【问题标题】:Merging *.mp3 with *.mov file using AVAssetReader and AVAssetWriter使用 AVAssetReader 和 AVAssetWriter 将 *.mp3 与 *.mov 文件合并
【发布时间】:2011-06-16 15:57:39
【问题描述】:

我能够使用 AVAssetWriter 创建 *.mov 文件。我使用了从使用 AVCaptureSession 获得的屏幕截图图像和音频 CMSampleBuffer,并将其传递给 AVAssetWriter 的输入,并且它起作用了。

现在我想将 *.mov 文件与 ipod/iphone 音乐库中的音乐(很可能是 *.mp3)合并。所以我最初的想法是使用 AVAssetReader 从 *.mp3 和 *.mov 文件中获取样本并将样本传递给 AVAssetWriter。这行得通吗?只需阅读文档,我认为这是可能的。

我玩了一会儿这个想法,但我无法让它发挥作用。

我的第一次尝试是使用 2 个 AVAssetReader,每个文件一个。我使用 AVAssetReaderAudioMixOutput 作为第一个阅读器的输出,然后使用 AVAssetReaderVideoCompositionOutput 作为第二个阅读器的输出。问题是使用 AVAssetReaderVideoCompositionOutput 要求您将 AVVideoComposition 传递给它。我在创建 AVVideoComposition/AVMutableVideoComposition 时遇到了问题,所以我放弃了这个解决方案。我不明白为什么需要传递 AVVideoComposition,我只是想获取电影的样本。

所以我的第二次尝试类似,但我没有使用 AVAssetReaderVideoCompositionOutput 作为第二个阅读器的输出,而是使用了 2 AVAssetReaderTrackOutput。所以现在我有 2 个阅读器,总共有 3 个输出,我尝试使用输出中的示例并将其传递给 AVAssetWriter 以创建一个 *.mov 文件。我能够运行它,没有错误/崩溃。但我无法播放生成的 *.mov 文件。它的播放时长是 0。同样,AVAssetReader+AVAssetWriter 的想法没有运气。

所以我的问题/s:你可以使用 AVAssetReader 和 AVAssetWriter 来合并两个文件吗?有没有人尝试过这样做并使其工作?我应该只使用 AVMutableVideoComposition 吗?

如有必要,我会发布我的代码。

【问题讨论】:

    标签: iphone ios video audio avfoundation


    【解决方案1】:

    您可以使用 AVAssetReader 和 AVAssetWriter 来合并这两个文件,但这可能比您需要的控制/功率曲线更进一步。

    AVAssetExportSession 可能更合适,因为您可以在几行代码中合并音频和视频轨道:

    1. 创建一个包含 mp3 和 mov 的 AVComposition 作为 AVCompositionTracks
    2. 使用 AVAssetExportSession 导出 AVComposition。

    【讨论】:

    • 感谢您的回复。只是要清楚。通过将 mp3 与电影合并,我的意思是使 mp3 成为 mov 的背景声音。是否可以使用 AVAsset+AVAssetWriter 做到这一点?我假设它可以使用 AVComposition 来完成。
    • 两种方法都可以,但 AVAssetWriter 更难。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    相关资源
    最近更新 更多