AVFoundation - 音视频组合编辑

这篇具有很好参考价值的文章主要介绍了AVFoundation - 音视频组合编辑。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、简要说明

相关类

  • AVMutableComposition
  • AVMutableCompositionTrack

二、使用

1、音频和视频合成

- (void)testCom1{
  
    AVMutableComposition *mutableComposition = [AVMutableComposition composition];
     
    AVMutableCompositionTrack *compositionVideoTrack = [mutableComposition addMutableTrackWithMediaType:AVMediaTypeVideo
                                                                                       preferredTrackID:kCMPersistentTrackID_Invalid];
  
    AVMutableCompositionTrack *compositionAudioTrack = [mutableComposition addMutableTrackWithMediaType:AVMediaTypeAudio
                                                                                       preferredTrackID:kCMPersistentTrackID_Invalid];
    
  // 获取资源
    AVURLAsset *asset1 = [[AVURLAsset alloc] initWithURL:self.movieFile1 options:nil];
    AVURLAsset *asset2 = [[AVURLAsset alloc] initWithURL:self.musicFile1 options:nil];
 
    AVAssetTrack *videoAssetTrack  = [asset1 tracksWithMediaType:AVMediaTypeVideo][0];
    AVAssetTrack *audioAssetTrack  = [asset2 tracksWithMediaType:AVMediaTypeAudio][0];
     
     
    // 指定位置放入 视频和 音频
    [compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAssetTrack.timeRange.duration)
                                   ofTrack:videoAssetTrack
                                    atTime:kCMTimeZero
                                     error:nil];
 
    [compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, audioAssetTrack.timeRange.duration)
                                   ofTrack:audioAssetTrack
                                    atTime:kCMTimeZero
                                     error:nil]; 
  
  
    AVAssetExportSession *assetExportSession = [[AVAssetExportSession alloc] initWithAsset:mutableComposition
                                                                                presetName:AVAssetExportPreset1280x720]; 
    NSTimeInterval timestamp = [NSDate timeIntervalSinceReferenceDate];
    NSString *filename = [NSString stringWithFormat:@"%f.m4a", timestamp];
    NSString *docsDir = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSUserDomainMask, YES).firstObject;
    NSString *destPath = [docsDir stringByAppendingPathComponent:filename];
    NSString *composedMoviePath = [NSURL fileURLWithPath:destPath];
    
    
    // 导出
    NSURL *composedMovieUrl = [NSURL fileURLWithPath:composedMoviePath];
    assetExportSession.outputFileType              = AVFileTypeQuickTimeMovie;
    assetExportSession.outputURL                   = composedMovieUrl;
    assetExportSession.shouldOptimizeForNetworkUse = YES;
    
    NSLog(@"composedMovieUrl : %@",composedMovieUrl);
    
  
    [assetExportSession exportAsynchronouslyWithCompletionHandler:^{
        switch (assetExportSession.status) {
            case AVAssetExportSessionStatusFailed: {
                NSLog(@"生成失敗");
                break;
            }
            case AVAssetExportSessionStatusCancelled: {
                NSLog(@"生成会话被取消");
                break;
            }
            default: {
                NSLog(@"生成完了");
                [[NSWorkspace sharedWorkspace] selectFile:composedMovieUrl.path inFileViewerRootedAtPath:nil];
                break;
            }
        }
    }];
}


2、视频的拼接

#pragma mark - 视频的拼接
- (void)testCom2
{
    AVMutableComposition *mutableComposition = [AVMutableComposition composition];
     
    AVURLAsset *videoAsset1 = [[AVURLAsset alloc] initWithURL:self.movieFile1 options:nil];  // URLHookmark
    AVURLAsset *videoAsset2 = [[AVURLAsset alloc] initWithURL:self.movieFile2 options:nil];  // FurShader 无声
     
    AVAssetTrack *videoAssetTrack1 = [videoAsset1 tracksWithMediaType:AVMediaTypeVideo][0];
    AVAssetTrack *audioAssetTrack1 = [videoAsset1 tracksWithMediaType:AVMediaTypeAudio][0];
    
    AVAssetTrack *videoAssetTrack2 = [videoAsset2 tracksWithMediaType:AVMediaTypeVideo][0];
    AVAssetTrack *audioAssetTrack2 = [videoAsset2 tracksWithMediaType:AVMediaTypeAudio][0];
     
    AVMutableCompositionTrack *compositionVideoTrack = [mutableComposition addMutableTrackWithMediaType:AVMediaTypeVideo
                                                                                       preferredTrackID:kCMPersistentTrackID_Invalid];
    // 音声合成用の`AVMutableCompositionTrack`を生成
    AVMutableCompositionTrack *compositionAudioTrack = [mutableComposition addMutableTrackWithMediaType:AVMediaTypeAudio
                                                                                       preferredTrackID:kCMPersistentTrackID_Invalid];
     
    [compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAssetTrack1.timeRange.duration)
                                   ofTrack:videoAssetTrack1
                                    atTime:kCMTimeZero
                                     error:nil];
 
    [compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, audioAssetTrack1.timeRange.duration)
                                   ofTrack:audioAssetTrack1
                                    atTime:kCMTimeZero
                                     error:nil];
    
    // 追加
    [compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAssetTrack2.timeRange.duration)
                                   ofTrack:videoAssetTrack2
                                    atTime:videoAssetTrack1.timeRange.duration
                                     error:nil];
    [compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, audioAssetTrack2.timeRange.duration)
                                   ofTrack:audioAssetTrack2
                                    atTime:audioAssetTrack1.timeRange.duration
                                     error:nil];
   
  
    AVAssetExportSession *assetExportSession = [[AVAssetExportSession alloc] initWithAsset:mutableComposition
                                                                                presetName:AVAssetExportPreset1280x720];
 
    
    // エクスポートファイルの設定
    NSString *composedMovieDirectory = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
    NSString *composedMoviePath      = [NSString stringWithFormat:@"%@/%@", composedMovieDirectory, @"test.mp4"];
    
    // すでに合成動画が存在していたら消す
    NSFileManager *fileManager = NSFileManager.defaultManager;
    if ([fileManager fileExistsAtPath:composedMoviePath]) {
        [fileManager removeItemAtPath:composedMoviePath error:nil];
    }
    
    // 保存設定
    NSURL *composedMovieUrl = [NSURL fileURLWithPath:composedMoviePath];
    assetExportSession.outputFileType              = AVFileTypeQuickTimeMovie;
    assetExportSession.outputURL                   = composedMovieUrl;
    assetExportSession.shouldOptimizeForNetworkUse = YES;
    
    NSLog(@"composedMovieUrl : %@",composedMovieUrl);
    
    // 動画をExport
    [assetExportSession exportAsynchronouslyWithCompletionHandler:^{
        
                switch (assetExportSession.status) {
                    case AVAssetExportSessionStatusFailed: {
                        NSLog(@"生成失敗");
                        break;
                    }
                    case AVAssetExportSessionStatusCancelled: {
                        NSLog(@"生成会话被取消");
                        break;
                    }
                    default: {
                        NSLog(@"生成完了");
        //                if (self.handler) {
        //                    self.handler(composedMovieUrl);
        //                }
                        [[NSWorkspace sharedWorkspace] selectFile:composedMovieUrl.path inFileViewerRootedAtPath:nil];
                        break;
                    }
                }
    }];
}

伊织 2020-03-02文章来源地址https://www.toymoban.com/news/detail-609298.html

到了这里,关于AVFoundation - 音视频组合编辑的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 音视频技术开发周刊 | 304

    音视频技术开发周刊 | 304

    每周一期,纵览音视频技术领域的干货。 新闻投稿:contribute@livevideostack.com。 更强的Llama 2开源,可直接商用:一夜之间,大模型格局变了 Meta 终于发布了大家期待已久的免费可商用版本 Llama 2。 6000份问卷透露出AI时代的职业焦虑与机遇 |附报告下载 AI大模型的发展日新月异

    2024年02月14日
    浏览(11)
  • 音视频技术开发周刊 | 302

    音视频技术开发周刊 | 302

    每周一期,纵览音视频技术领域的干货。 新闻投稿:contribute@livevideostack.com。 ChatGPT神器Code Interpreter终于开放,到底怎么用?这里有一份保姆级教程 Code Interpreter 已经正式开放。 上海世界AI大会:MidJourney名字的来源是庄子? MidjourneyCEO大卫·霍尔兹在2023世界人工智能大会上发

    2024年02月16日
    浏览(7)
  • 音视频技术开发周刊 | 298

    音视频技术开发周刊 | 298

    每周一期,纵览音视频技术领域的干货。 新闻投稿:contribute@livevideostack.com。 AI艺术在北京798,展望人工智能与环境的未来 本文很有意思的提出了个假设,通过人工智能和艺术家协作与实践产生环绕地球的叙事,去开启置身于AI时代与生态之中的想象。在这种协作中,如何重

    2024年02月09日
    浏览(12)
  • 音视频技术开发周刊 | 273

    音视频技术开发周刊 | 273

    每周一期,纵览音视频技术领域的干货。 新闻投稿:contribute@livevideostack.com。 「紧急通知」LiveVideoStackCon 2022 音视频技术大会北京站改期 各位LVSer们: 因疫情影响,北京近期不再允许举办大型线下活动,我们无奈且抱歉的通知大家LiveVideoStackCon 2022音视频技术大会北京站大会

    2023年04月22日
    浏览(15)
  • 音视频技术开发周刊 | 300

    音视频技术开发周刊 | 300

    每周一期,纵览音视频技术领域的干货。 新闻投稿:contribute@livevideostack.com。 著名数据和AI企业Databricks,收购类ChatGPT开源平台MosaicML 6月27日,Databricks在官网宣布,以13亿美元(约94亿元)价格收购了类ChatGPT开源平台MosaicML。本次交易是全球生成式AI赛道第一笔超过10亿美元的

    2024年02月12日
    浏览(32)
  • 音视频技术开发周刊 | 284

    音视频技术开发周刊 | 284

    每周一期,纵览音视频技术领域的干货。 新闻投稿:contribute@livevideostack.com。 Google联合多加巨头推出ML基础设施:OpenXLA 阿里巴巴,AWS,AMD,Apple,Arm,NVIDIA都在其中。 https://opensource.googleblog.com/2023/03/openxla-is-ready-to-accelerate-and-simplify-ml-development.html 万字长文,探讨关于ChatGP

    2023年04月09日
    浏览(17)
  • 音视频技术开发周刊 | 305

    音视频技术开发周刊 | 305

    每周一期,纵览音视频技术领域的干货。 新闻投稿:contribute@livevideostack.com。 大神回归学界:何恺明宣布加入 MIT 「作为一位 FAIR 研究科学家,我将于 2024 年加入麻省理工学院(MIT)电气工程与计算机科学系 EECS 担任教职。」 AI 领域的著名学者,ResNet 发明人何恺明,最近在

    2024年02月14日
    浏览(15)
  • 音视频开发面试题集锦

    音视频开发面试题集锦

    下面是 2022.06 月音视频面试题集锦内容的节选: 媒体封装层是表示媒体数据是什么封装格式的,比如 MP4、FLV。在这层信息里,通常会携带码流编码格式的信息。 拿 MP4 来说,我们可以根据 Sample Description Box(moov/trak/mdia/minf/stbl/stsd) 中的信息来确定其封装的码流的编码格式。

    2023年04月13日
    浏览(14)
  • 音视频技术开发周刊 | 285

    音视频技术开发周刊 | 285

    每周一期,纵览音视频技术领域的干货。 新闻投稿:contribute@livevideostack.com。 GPT-4 Office全家桶发布 谷歌前脚刚宣布AI工具整合进Workspace,微软后脚就急匆匆召开了发布会,人狠话不多地祭出了办公软件王炸——Microsoft 365 Copilot,再次闪瞎全世界。从此,不管是Word、PPT、Exce

    2024年02月02日
    浏览(14)
  • 音视频技术开发周刊 | 297

    音视频技术开发周刊 | 297

    每周一期,纵览音视频技术领域的干货。 新闻投稿:contribute@livevideostack.com。 Geenee AR为品牌商和零售商提供虚拟试穿应用 这意味着Geenee AR的虚拟试穿解决方案能够与品牌商现有的销售渠道无缝集成。 谁说苹果掉队了?WWDC上只字未提AI,却已低调入场大模型 尽管苹果没有在

    2024年02月08日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包