美文网首页
iOS 音视频分离(导出视频中的音频)

iOS 音视频分离(导出视频中的音频)

作者: 假如兔子失了尾 | 来源:发表于2019-12-12 14:27 被阅读0次

/**

*  获取视频中的音频

*

*  @param videoUrl 视频的本地路径

*  @param newFile 导出音频的路径

*  @completionHandle 音频路径的回调

*/

+ (void)VideoManagerGetBackgroundMiusicWithVideoUrl:(NSURL*)videoUrlnewFile:(NSString*)newFilecompletion:(void(^)(NSString*data))completionHandle{

    AVURLAsset*videoAsset = [[AVURLAssetalloc]initWithURL:videoUrloptions:nil];;

    NSArray *keys = @[@"duration",@"tracks"];

    [videoAssetloadValuesAsynchronouslyForKeys:keys completionHandler:^{

        NSError*error =nil;

        AVKeyValueStatusstatus = [videoAssetstatusOfValueForKey:@"tracks"error:&error];

        if(status ==AVKeyValueStatusLoaded) {//数据加载完成

            AVMutableComposition *mixComposition = [[AVMutableComposition alloc] init];

            // 2 - Video track

            //Audio Recorder

            //创建一个轨道,类型是AVMediaTypeAudio

            AVMutableCompositionTrack *firstTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];

            //获取videoAsset中的音频,插入轨道

            [firstTrackinsertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration) ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] atTime:kCMTimeZero error:nil];

            NSURL*url = [NSURLfileURLWithPath:newFile];

            AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName:AVAssetExportPresetAppleM4A];//输出为M4A音频

            exporter.outputURL= url;

            exporter.outputFileType=@"com.apple.m4a-audio";//类型和输出类型一致

            exporter.shouldOptimizeForNetworkUse = YES;

            [exporterexportAsynchronouslyWithCompletionHandler:^{

                dispatch_async(dispatch_get_main_queue(), ^{

                    if(exporter.status==AVAssetExportSessionStatusCompleted) {

                        completionHandle(newFile);

                    }else{

                        NSLog(@"提取失败原因:%@",exporter.error);

                        completionHandle(nil);

                    }

                });

            }];

        }

    }];

}

Demo分享 https://github.com/LXHugh/AVSeparation

相关文章

  • iOS 音视频分离(导出视频中的音频)

    /** * 获取视频中的音频 * * @param videoUrl 视频的本地路径 * @param newFi...

  • iOS 音视频分离(导出视频中的音频)

    分离出视频中的音频(目前仅支持本地视频文件) 提取音频,获取播放时长,获取视频第一帧图片请到Demo分享 http...

  • iOS-17 音视频

    链接:iOS 音视频开发-常用音频、视频框架介绍(一) - 简书 iOS 音视频开发-AVAudioRecorde...

  • iOS - 采集音视频及写入文件

    �音视频采集包括两部分:视频采集和音频采集。在iOS中可以同步采集视频与音频,通过系统框架AVFoundation...

  • iOS视频采集以及写入二

    概述 音视频采集包括两部分:视频采集音频采集 在iOS开发中,是可以同步采集视频&音频的,使用方式也非常简单 相关...

  • 音视频内容

    音视频 目的 数据来源及去向 具体执行过程 参考其他简书内容 iOS音视频开发闲谈(理论步骤)iOS音频播放(一)...

  • 【iOS】AVPlayer 播放音视频

    1、常见的音视频播放器 iOS开发中不可避免地会遇到音视频播放方面的需求。 常用的音频播放器有 AVAudioPl...

  • 【iOS】AVPlayer 播放音视频

    1、常见的音视频播放器 iOS开发中不可避免地会遇到音视频播放方面的需求。 常用的音频播放器有 AVAudioPl...

  • iOS 直播专题2-音视频采集

    从设备(手机)的摄像头、MIC中采集音频、视频的原始数据 ios的音视频采集可以从AVFoundation框架里采...

  • FFmpeg转封装(7)

    音视频文件音视频流抽取 1.FFmpeg抽取音视频文件中的AAC音频流 2.FFmpeg抽取音视频文件中的H.26...

网友评论

      本文标题:iOS 音视频分离(导出视频中的音频)

      本文链接:https://www.haomeiwen.com/subject/clhtnctx.html