如何使用Objective-C iOS以编程方式向对话视频添加配音评论?我尝试使用AVMutableComposition类将录制音频合并到对话视频中,但似乎将它们混合在一起(视频背景音合并后完全丢失),无法使用它进行配音。如何在ios中以编程方式将视频添加到视频中?
有人可以帮忙吗?
这里是我使用的代码:
-(void)mergeAudio:(NSString *)audioPath toVideo:(NSString *)videoPath
{
AVURLAsset* videoAsset;
AVURLAsset* audioAsset;
AVMutableComposition* mixComposition = [AVMutableComposition composition];
NSURL *audio_url = [NSURL fileURLWithPath:audioPath];
audioAsset = [[AVURLAsset alloc]initWithURL:audio_url options:nil];
CMTimeRange audio_timeRange = CMTimeRangeMake(kCMTimeZero, audioAsset.duration);
AVMutableCompositionTrack *b_compositionAudioTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
[b_compositionAudioTrack insertTimeRange:audio_timeRange ofTrack:[[audioAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] atTime:kCMTimeZero error:nil];
NSURL *video_url = [NSURL fileURLWithPath:videoPath];
videoAsset = [[AVURLAsset alloc]initWithURL:video_url options:nil];
CMTimeRange video_timeRange = CMTimeRangeMake(kCMTimeZero,audioAsset.duration);
AVMutableCompositionTrack *a_compositionVideoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
[a_compositionVideoTrack insertTimeRange:video_timeRange ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:kCMTimeZero error:nil];
NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docsDir = [dirPaths objectAtIndex:0];
NSString *outputFilePath = [docsDir stringByAppendingPathComponent:[NSString stringWithFormat:@"dub.mov"]];
NSURL *outputFileUrl = [NSURL fileURLWithPath:outputFilePath];
if ([[NSFileManager defaultManager] fileExistsAtPath:outputFilePath]){
[[NSFileManager defaultManager] removeItemAtPath:outputFilePath error:nil];
}
AVAssetExportSession* _assetExport = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName:AVAssetExportPresetHighestQuality];
_assetExport.outputFileType = @"com.apple.quicktime-movie";
_assetExport.outputURL = outputFileUrl;
[_assetExport exportAsynchronouslyWithCompletionHandler:
^(void) {
dispatch_async(dispatch_get_main_queue(), ^{
// Do export finish stuff
});
}];
}
“我尝试使用AVMutableComposition类将录制音频合并到对话视频中,但似乎将它们混合在一起(视频背景声音在合并后完全丢失)”然后你做错了,因为AVMutableVideoComposition正是你如何做到这一点的,如果您记得使用视频背景音,它不会丢失视频背景音。如果您需要特定帮助,请显示您的代码。 – matt
@matt我更新了代码,我使用iphone摄像头捕捉视频,然后将该视频与mp3歌曲合并,结果是一个带有没有原始视频声音的mp3歌曲的新视频文件,您能告诉我哪里出了错? – UmbalaAZ
是的,我当然可以。 :) – matt