iOS后处理 - 将时间戳覆盖到视频和导出

时间:2014-07-22 05:10:55

标签: ios timestamp avmutablecomposition overlays chromakey

我正在开发一个应用程序,将视频和时间/ GPS /加速度计数据同时记录到单独的文件中。

我可以播放视频并让我的叠加层实时显示,但我不能简单地将其导出。

我想对视频进行后期处理并叠加时间,坐标和视频。 还有其他形状将被覆盖,从而改变每个帧的大小/位置。

我尝试使用AVMutableComposition并添加CALayers但结果有限 - 这在一定程度上有效,但我无法将时间戳与视频同步。我可以使用CAKeyframeAnimation值+ keyTimes,但我需要处理的值过多。

我目前的做法是渲染一个单独的视频,其中包含使用数据创建的CGImages。这很好但我需要使用ChromaKey在叠加层中具有透明度。我已经读过这样做之后可能会出现质量问题。

我应该看一下更简单的方法吗?

我知道渲染速度不会太棒,但我不希望单独使用PC'用于呈现视频的应用程序。

2 个答案:

答案 0 :(得分:0)

将AVAssetReader用于录制的视频。获取CMSampleBufferRef,获取时间戳,在样本缓冲区上绘制时间,将缓冲区写入AVAssetWriterInputPixelBufferAdaptor。录制视频的方法类似。

答案 1 :(得分:0)

使用AVVideoCompositing协议https://developer.apple.com/library/mac/documentation/AVFoundation/Reference/AVVideoCompositing_Protocol/index.html

这将允许您使用像素缓冲区逐帧回调来执行您想要的操作。

使用此协议,您可以拍摄一帧并覆盖您想要的任何人。看看此示例 - https://developer.apple.com/library/ios/samplecode/AVCustomEdit/Introduction/Intro.html,了解如何逐帧修改。如果您利用AVVideoCompositing协议,您可以在AVPlayerItem和AVExportSession上设置自定义视频合成器和视频合成,以呈现/导出您想要的内容。