【发布时间】:2013-06-22 05:31:43
【问题描述】:
我必须在视频文件中与音频一起在一些帧之间执行“慢动作”,并且需要将渐变视频存储作为新视频。
Ref:http://www.youtube.com/watch?v=BJ3_xMGzauk(从 0 到 10 秒观看)
根据我的分析,我发现 AVFoundation 框架很有帮助。
从上面的链接复制粘贴:
" 编辑 AV Foundation 使用合成从现有的媒体片段(通常是一个或多个视频和音频轨道)创建新资产。您使用可变组合来添加和删除轨道,并调整它们的时间顺序。您还可以设置音轨的相对音量和斜坡;并设置视频轨道的不透明度和不透明度渐变。作品是保存在内存中的媒体片段的集合。当您使用导出会话导出合成时,它会折叠到一个文件中。 在 iOS 4.1 及更高版本上,您还可以使用资产写入器从样本缓冲区或静止图像等媒体创建资产。
"
问题: 我可以使用 AVFoundation 框架对视频/音频文件进行“慢动作”吗?或者有没有其他可用的包?如果我想单独处理音频和视频,请指导我怎么做?
更新 :: AV 导出会话代码:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *outputURL = paths[0];
NSFileManager *manager = [NSFileManager defaultManager];
[manager createDirectoryAtPath:outputURL withIntermediateDirectories:YES attributes:nil error:nil];
outputURL = [outputURL stringByAppendingPathComponent:@"output.mp4"];
// Remove Existing File
[manager removeItemAtPath:outputURL error:nil];
AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:self.inputAsset presetName:AVAssetExportPresetLowQuality];
exportSession.outputURL = [NSURL fileURLWithPath:outputURL]; // output path;
exportSession.outputFileType = AVFileTypeQuickTimeMovie;
[exportSession exportAsynchronouslyWithCompletionHandler:^(void) {
if (exportSession.status == AVAssetExportSessionStatusCompleted) {
[self writeVideoToPhotoLibrary:[NSURL fileURLWithPath:outputURL]];
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library writeVideoAtPathToSavedPhotosAlbum:[NSURL fileURLWithPath:outputURL] completionBlock:^(NSURL *assetURL, NSError *error){
if (error) {
NSLog(@"Video could not be saved");
}
}];
} else {
NSLog(@"error: %@", [exportSession error]);
}
}];
【问题讨论】:
-
谁能帮帮我?
-
如果需要更多信息,请询问我。
-
很高兴看到有关如何减慢视频和音频速度的答案,但是您如何使音频中的音高也发生变化?你发现了吗?
标签: ios objective-c video ffmpeg avfoundation