使用 AVAssetExportSession 导出 MP3

Posted

技术标签:

【中文标题】使用 AVAssetExportSession 导出 MP3【英文标题】:Exporting MP3 with AVAssetExportSession 【发布时间】:2019-09-20 08:58:29 【问题描述】:

我现在在一个 ios 应用程序中拥有这段 Swift 代码,它允许我将一些音频项目从我的设备的 iTunes 库传输到我自己的应用程序的文档目录。

let exportSession = AVAssetExportSession(asset: AVAsset(url: url), 
                                         presetName: AVAssetExportPresetAppleM4A)
exportSession?.shouldOptimizeForNetworkUse = true
exportSession?.outputFileType = AVFileType.m4a
exportSession?.outputURL = newFileURL

exportSession?.exportAsynchronously(completionHandler: [weak self]
    () -> Void in
    if exportSession!.status == AVAssetExportSession.Status.completed  
        // All is working fine!!
        .... some useful code ....
    

它适用于 .m4a 类型的媒体项目,但不幸的是不适用于 .mp3 类型的媒体。

我当然尝试过这段代码的变体,但都没有奏效。

如果有人知道如何让它发挥作用,那就太好了。

【问题讨论】:

【参考方案1】:

如果其他人面临同样的问题;这就是为我工作的结果。

似乎这不是唯一可能的解决方案,但我没有尝试其他任何解决方案。

let exportSession = AVAssetExportSession(asset: AVAsset(url: url), 
                                         presetName: AVAssetExportPresetPassthrough)
exportSession?.shouldOptimizeForNetworkUse = true
exportSession?.outputFileType = AVFileType.caf
exportSession?.outputURL = newFileURL // File with a .caf extention.

exportSession?.exportAsynchronously(completionHandler: [weak self]
    () -> Void in
    if exportSession!.status == AVAssetExportSession.Status.completed  
        // All is working fine!!
        .... some useful code ....
    

【讨论】:

你好,你能解释一下newFileURL是什么吗?我不明白。 什么是 .caf 扩展名?它不是 .mp3 这是很久以前的事了,但据我所知,.caf 是一种不同的音频文件格式。我认为它可以与 .mp3 相媲美,但没有许可证问题。 newFileURL 只是我必须在代码中事先设置的变量。

以上是关于使用 AVAssetExportSession 导出 MP3的主要内容,如果未能解决你的问题,请参考以下文章

使用 AVAssetExportSession 导出 MP3

AVAssetExportSession - 如何从视频持续时间中修剪毫秒

AVAssetExportSession始终无法导出

AVAssetExportSession 总是无法导出

AVAssetExportSession 错误 -11820

无法使用 AVAssetExportSession 修剪音频文件