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

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

作者: 假如兔子失了尾 | 来源:发表于2022-07-29 17:34 被阅读0次

    分离出视频中的音频(目前仅支持本地视频文件)

    /**
    *  获取视频中的音频
    *
    *  @param videoUrl 视频的本地路径
    *  @param newFile 导出音频的路径
    *  @completionHandle 音频路径的回调
    */
    - (void)videoManagerGetBackgroundMiusicWithVideoUrl:(NSURL *)videoUrl newFile:(NSString*)newFile completion:(void(^)(NSString*data))completionHandle{
        
        AVURLAsset *videoAsset = [[AVURLAsset alloc] initWithURL:videoUrl options:nil];;
        NSArray *keys = @[@"duration",@"tracks"];
        [videoAsset loadValuesAsynchronouslyForKeys:keys completionHandler:^{
            NSError *error = nil;
            AVKeyValueStatus status = [videoAsset statusOfValueForKey:@"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中的音频,插入轨道
                [firstTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration) ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] atTime:kCMTimeZero error:nil];
                NSURL *url = [NSURL fileURLWithPath:newFile];
                AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName:AVAssetExportPresetAppleM4A];//输出为M4A音频
                exporter.outputURL = url;
                exporter.outputFileType = @"com.apple.m4a-audio";//类型和输出类型一致
                exporter.shouldOptimizeForNetworkUse = YES;
                [exporter exportAsynchronouslyWithCompletionHandler:^{
                    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 音视频分离(导出视频中的音频)

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