使用 AVAssetWriter 而不是 AVAssetExportSession 导出 AVMutableVideoComposition
Export a AVMutableVideoComposition using AVAssetWriter instead of AVAssetExportSession
我有一个AVMutableVideoComposition
,我想将它导出到视频文件。
不幸的是,AVAssetExportSession
没有成功,因为我需要对输出视频设置(比特率、关键帧...)进行精细控制
如何从 AVMutableVideoComposition
中提取图像以将它们提供给 AVAssetWriterInput
?
到目前为止,我调查了 AVVideoCompositionRenderContext
和 AVAsynchronousVideoCompositionRequest
,但两者似乎都是死胡同,因为我找不到 API 来渲染我的 AVMutableComposition
目前我认为这是不可能的。
有两种解决此限制的方法:
放弃 AVMutableVideoComposition
并使用 AVAssetReader
和 AVAssetReaderTrackOutput
。
=> 如果你只是想连接一些视频,这就是你应该做的。
让它通过两次。使用 AVMutableVideoComposition
导出视频一次,然后再次读取和写入。
=> 不是最优的,我可以侥幸逃脱,因为我的视频太小了。
=> 如果有转换、CIFilters
和其他复杂操作,编写起来会容易得多。
希望下次我能找到更干净的解决方案:
设置 AVAssetReader
到 "read" 来自 AVMutableVideoComposition
的视频帧,然后将它们交给 AVAssetWriterInput
。您可以使用 AVAssetReaderVideoCompositionOutput
设置资产 reader,设置 videoComposition
,如果需要可能还设置 customVideoCompositor
。自定义视频合成器是您可以使用自己的 CIFilters 和任何您想要的东西的地方。
我有一个AVMutableVideoComposition
,我想将它导出到视频文件。
不幸的是,AVAssetExportSession
没有成功,因为我需要对输出视频设置(比特率、关键帧...)进行精细控制
如何从 AVMutableVideoComposition
中提取图像以将它们提供给 AVAssetWriterInput
?
到目前为止,我调查了 AVVideoCompositionRenderContext
和 AVAsynchronousVideoCompositionRequest
,但两者似乎都是死胡同,因为我找不到 API 来渲染我的 AVMutableComposition
目前我认为这是不可能的。
有两种解决此限制的方法:
放弃
AVMutableVideoComposition
并使用AVAssetReader
和AVAssetReaderTrackOutput
。=> 如果你只是想连接一些视频,这就是你应该做的。
让它通过两次。使用
AVMutableVideoComposition
导出视频一次,然后再次读取和写入。=> 不是最优的,我可以侥幸逃脱,因为我的视频太小了。 => 如果有转换、
CIFilters
和其他复杂操作,编写起来会容易得多。
希望下次我能找到更干净的解决方案:
设置 AVAssetReader
到 "read" 来自 AVMutableVideoComposition
的视频帧,然后将它们交给 AVAssetWriterInput
。您可以使用 AVAssetReaderVideoCompositionOutput
设置资产 reader,设置 videoComposition
,如果需要可能还设置 customVideoCompositor
。自定义视频合成器是您可以使用自己的 CIFilters 和任何您想要的东西的地方。