AVAssetWriter:指定关键帧

问题描述 投票:2回答:1

我在iOS上使用AVAssetWriter来编码MP4视频。我目前正在使用AVAssetWriterInputPixelBufferAdaptor传递数据,但我在这方面很灵活。

如何指定哪些输入帧是关键帧?

目前,我可以通过设置AVVideoMaxKeyFrameIntervalKey来控制关键帧的数量(或使所有帧关键帧),但我的编码视频是一个简单的幻灯片 - 转换,我想确保主要图像上的关键帧而不牺牲压缩。

ios avfoundation mp4 avassetwriter
1个回答
0
投票

如果你制作CMSampleBufferRefs(通过CMSampleBufferCreateReadyWithImageBuffer(…)直接传递给你的AVAssetWriterInput(而不是通过AVAssetWriterInputPixelBufferAdaptor),你可以使用CMSetAttachment(…)在你的帧上设置kCMSampleBufferAttachmentKey_ForceKeyFramekCFBooleanTrue,以确保它将成为一个关键帧。

远离AVAssetWriterInputPixelBufferAdaptor的潜在缺点是你失去了拥有共享像素缓冲池所带来的内存效率。

如果内存效率很重要,您可能需要考虑查看VideoToolboxVTCompressionSessionVTCompressionSessionAVAssetWriter*更复杂,但也暴露了内部使用的像素缓冲池。

如果你确实沿着这条路线前进,那么在向kVTEncodeFrameOptionKey_ForceKeyFrame提交帧以进行压缩时,你将需要使用kCFBooleanTrue键设置为VTCompressionSessionEncodeFrame(…)作为帧属性。

© www.soinside.com 2019 - 2024. All rights reserved.