使用 AVAssetWriter 而不是 AVAssetExportSession 导出 AVMutableVideoComposition

Export a AVMutableVideoComposition using AVAssetWriter instead of AVAssetExportSession

我有一个AVMutableVideoComposition,我想将它导出到视频文件。

不幸的是,AVAssetExportSession 没有成功,因为我需要对输出视频设置(比特率、关键帧...)进行精细控制

如何从 AVMutableVideoComposition 中提取图像以将它们提供给 AVAssetWriterInput

到目前为止,我调查了 AVVideoCompositionRenderContextAVAsynchronousVideoCompositionRequest,但两者似乎都是死胡同,因为我找不到 API 来渲染我的 AVMutableComposition

目前我认为这是不可能的。

有两种解决此限制的方法:

  • 放弃 AVMutableVideoComposition 并使用 AVAssetReaderAVAssetReaderTrackOutput

    => 如果你只是想连接一些视频,这就是你应该做的。

  • 让它通过两次。使用 AVMutableVideoComposition 导出视频一次,然后再次读取和写入。

    => 不是最优的,我可以侥幸逃脱,因为我的视频太小了。 => 如果有转换、CIFilters 和其他复杂操作,编写起来会容易得多。

希望下次我能找到更干净的解决方案:

设置 AVAssetReader 到 "read" 来自 AVMutableVideoComposition 的视频帧,然后将它们交给 AVAssetWriterInput。您可以使用 AVAssetReaderVideoCompositionOutput 设置资产 reader,设置 videoComposition,如果需要可能还设置 customVideoCompositor。自定义视频合成器是您可以使用自己的 CIFilters 和任何您想要的东西的地方。