iOS视频到音频文件转换[重复]

Posted

技术标签:

【中文标题】iOS视频到音频文件转换[重复]【英文标题】:iOS video to audio file conversion [duplicate] 【发布时间】:2013-12-25 19:20:05 【问题描述】:

我设法使用 NSUrlConnection 下载了一个 youtube 视频并将其保存到设备中。现在我想将此(我猜是 .mp4)文件转换为 .mp3 音频文件。有谁知道这个问题的解决方案?也许有一种方法只能从视频中下载音频?这样可以节省很多时间。

【问题讨论】:

我不这么认为它的重复。因为在所谓的原始问题中没有公认的答案。 【参考方案1】:

首先,您不想转换任何东西,这很慢。相反,您想从 mp4 文件中提取音频流。为此,您可以创建一个仅包含原始文件音轨的AVMutableComposition,然后使用AVAssetExportSession 导出合成。这目前以 m4a 为中心。如果您想同时处理 m4a 和 mp3 输出,请检查音轨类型,确保设置正确的文件扩展名并在导出会话中选择 AVFileTypeMPEGLayer3AVFileTypeAppleM4A

    NSURL*      dstURL = [NSURL fileURLWithPath:dstPath];
    [[NSFileManager defaultManager] removeItemAtURL:dstURL error:nil];

    AVMutableComposition*   newAudioAsset = [AVMutableComposition composition];

    AVMutableCompositionTrack*  dstCompositionTrack;
    dstCompositionTrack = [newAudioAsset addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];


    AVAsset*    srcAsset = [AVURLAsset URLAssetWithURL:srcURL options:nil];
    AVAssetTrack*   srcTrack = [[srcAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];


    CMTimeRange timeRange = srcTrack.timeRange;

    NSError*    error;

    if(NO == [dstCompositionTrack insertTimeRange:timeRange ofTrack:srcTrack atTime:kCMTimeZero error:&error]) 
        NSLog(@"track insert failed: %@\n", error);
        return;
    


    AVAssetExportSession*   exportSesh = [[AVAssetExportSession alloc] initWithAsset:newAudioAsset presetName:AVAssetExportPresetPassthrough];

    exportSesh.outputFileType = AVFileTypeAppleM4A;
    exportSesh.outputURL = dstURL;

    [exportSesh exportAsynchronouslyWithCompletionHandler:^
        AVAssetExportSessionStatus  status = exportSesh.status;
        NSLog(@"exportAsynchronouslyWithCompletionHandler: %i\n", status);

        if(AVAssetExportSessionStatusFailed == status) 
            NSLog(@"FAILURE: %@\n", exportSesh.error);
         else if(AVAssetExportSessionStatusCompleted == status) 
            NSLog(@"SUCCESS!\n");
        
    ];

【讨论】:

谢谢!听起来太酷了。有没有办法做同样的事情,只是将视频文件的 url 赋予一种“流”吗?首先下载整个文件非常慢。 尝试将 srcURL 设置为远程 URL。检查轨道需要更长的时间,因此您应该异步加载轨道。 一切正常,但有时我会收到“空数组”错误,因为视频文件的保存尚未准备好。你们知道为 NSData writeToFile 获取 CompletionHandler(或其他东西)的方法吗? writeToFile 是同步的,所以这不应该是问题。问一个新问题并发布一些代码。如果我的回答解决了您的问题,请单击大复选框接受它作为答案。 谁能告诉我 srcURL 是什么?

以上是关于iOS视频到音频文件转换[重复]的主要内容,如果未能解决你的问题,请参考以下文章

视频到音频文件通过节点 js 中的 FFMPEG 转换和保存

使用ffmpeg将文件夹中的所有mp4音频文件转换为mp3 [重复]

如何在ios(Cocos2d)中将字符串转换为音频(声音)文件?

iOS快捷转音视频格式,有它就够了

怎么通过ffmpeg将音频文件转换成Mp3 转

sh 使用一个图像将音频文件转换为视频文件