Ios: Remove audio from video

匿名 (未验证) 提交于 2019-12-03 01:23:02

问题:

I have requirement some times mute video send enduser so I required remove audio file form the video. Passing video for single process for mute.

回答1:

// Remove audio from video      - (void) RemoveAudioFromVideo:(NSString *)VideoLocalPath {     NSString * initPath1 = VideoLocalPath;     AVMutableComposition *composition = [AVMutableComposition composition];      NSString *inputVideoPath = initPath1;     AVURLAsset * sourceAsset = [[AVURLAsset alloc] initWithURL:[NSURL fileURLWithPath:inputVideoPath] options:nil];      AVMutableCompositionTrack *compositionVideoTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];      BOOL ok = NO;      AVAssetTrack * sourceVideoTrack = [[sourceAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];      CMTimeRange x = CMTimeRangeMake(kCMTimeZero, [sourceAsset duration]);      ok = [compositionVideoTrack insertTimeRange:x ofTrack:sourceVideoTrack atTime:kCMTimeZero error:nil];      if([[NSFileManager defaultManager] fileExistsAtPath:initPath1]) {         [[NSFileManager defaultManager] removeItemAtPath:initPath1 error:nil];     }      NSURL *url = [[NSURL alloc] initFileURLWithPath: initPath1];      AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:composition presetName:AVAssetExportPresetHighestQuality];      exporter.outputURL=url;      NSLog(@";%@", [exporter supportedFileTypes]);      exporter.outputFileType = @"com.apple.quicktime-movie";     [exporter exportAsynchronouslyWithCompletionHandler:^{         [self savefinalVideoFileToDocuments:exporter.outputURL];     }]; }  // Write final Video -(void)savefinalVideoFileToDocuments:(NSURL *)url {     NSString *storePath = [[self applicationCacheDirectory] stringByAppendingPathComponent:@"Videos"];     NSData * movieData = [NSData dataWithContentsOfURL:url];     [movieData writeToFile:storePath atomically:YES]; }  // Directory Path - (NSString *)applicationCacheDirectory {     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);     NSString *documentsDirectory = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;     return documentsDirectory; } 


回答2:

In Swift 3,

func removeAudioFromVideo(_ videoPath: String) {     let initPath1: String = videoPath     let composition = AVMutableComposition()     let inputVideoPath: String = initPath1     let sourceAsset = AVURLAsset(url: URL(fileURLWithPath: inputVideoPath), options: nil)     let compositionVideoTrack: AVMutableCompositionTrack? = composition.addMutableTrack(withMediaType: AVMediaTypeVideo, preferredTrackID: kCMPersistentTrackID_Invalid)     let sourceVideoTrack: AVAssetTrack? = sourceAsset.tracks(withMediaType: AVMediaTypeVideo)[0]     let x: CMTimeRange = CMTimeRangeMake(kCMTimeZero, sourceAsset.duration)     _ = try? compositionVideoTrack!.insertTimeRange(x, of: sourceVideoTrack!, at: kCMTimeZero)     if FileManager.default.fileExists(atPath: initPath1) {         try? FileManager.default.removeItem(atPath: initPath1)     }     let url = URL(fileURLWithPath: initPath1)     let exporter = AVAssetExportSession(asset: composition, presetName: AVAssetExportPresetHighestQuality)     exporter?.outputURL = url     exporter?.outputFileType = "com.apple.quicktime-movie"     exporter?.exportAsynchronously(completionHandler: {() -> Void in         self.saveFinalVideoFile(toDocuments: exporter!.outputURL!)     }) }  func saveFinalVideoFile(toDocuments url: URL) {     let fileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("Videos")     let movieData = try? Data(contentsOf: url)     try? movieData?.write(to: fileURL, options: .atomic) } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!