Swift — Удалите звук и поместите файл без звука в исходную папку

#c #swift

Вопрос:

Я хочу выбрать видеофайл mp4 или ts, удалить аудио из файла и поместить новый файл, переименованный в «‘имя файла’-noaudio.mp4», в расположение исходного файла. Это для приложения macOS, использующего Swift 4.0. Начальная часть кода работает самостоятельно, чтобы выбрать файл…. Но я не могу удалить аудио из видеофайла.

РЕДАКТИРОВАТЬ: Мне интересно, является ли частью проблемы использование AVFoundation и UIKit, которые, похоже, не работают с macOS. Я не могу найти замену. Каковы мои варианты?

Я смог выбрать файл с помощью

 import Cocoa import Foundation import AVFoundation import UIKit  @objc  func removeAudio(_ sender: NSMenuItem) {{  let dialog = NSOpenPanel();   dialog.title = "Choose a file";  dialog.showsResizeIndicator = true;  dialog.showsHiddenFiles = false;  dialog.allowsMultipleSelection = false;  dialog.canChooseDirectories = false;  dialog.allowedFileTypes = ["ts", "mp4"];    if (dialog.runModal() == NSApplication.ModalResponse.OK) {  let result = dialog.url // Pathname of the file   if (result != nil) {  let _: String = result!.path   }   } else {  // User clicked on "Cancel"  return  }   }  func removeAudioFromVideo(videoURL: NSURL, completion: (NSURL?, NSError?) -gt; Void) -gt; Void {   let fileManager = NSFileManager.defaultManager()   let composition = AVMutableComposition()    let sourceAsset = AVURLAsset(URL: videoURL)    let compositionVideoTrack = composition.addMutableTrackWithMediaType(AVMediaTypeVideo, preferredTrackID: kCMPersistentTrackID_Invalid)   let sourceVideoTrack: AVAssetTrack = sourceAsset.tracksWithMediaType(AVMediaTypeVideo)[0]    let x = CMTimeRangeMake(kCMTimeZero, sourceAsset.duration)    try! compositionVideoTrack.insertTimeRange(x, ofTrack: sourceVideoTrack, atTime: kCMTimeZero)    let exportPath : NSString = NSString(format: "%@%@", NSTemporaryDirectory(), "removeAudio.mov")    let exportUrl: NSURL = NSURL.fileURLWithPath(exportPath as String)    if(fileManager.fileExistsAtPath(exportPath as String)) {    try! fileManager.removeItemAtURL(exportUrl)  }    let exporter = AVAssetExportSession(asset: composition, presetName: AVAssetExportPresetHighestQuality)  exporter!.outputURL = exportUrl;  exporter!.outputFileType = AVFileTypeQuickTimeMovie    exporter?.exportAsynchronouslyWithCompletionHandler({  dispatch_async(dispatch_get_main_queue(), {    completion(exporter?.outputURL, nil)  })    })  } }