我正在开发一个应用程序,将视频和时间/ GPS /加速度计数据同时记录到单独的文件中。
我可以播放视频并让我的叠加层实时显示,但我不能简单地将其导出。
我想对视频进行后期处理并叠加时间,坐标和视频。 还有其他形状将被覆盖,从而改变每个帧的大小/位置。
我尝试使用AVMutableComposition
并添加CALayers
但结果有限 -
这在一定程度上有效,但我无法将时间戳与视频同步。我可以使用CAKeyframeAnimation
值+ keyTimes,但我需要处理的值过多。
我目前的做法是渲染一个单独的视频,其中包含使用数据创建的CGImages
。这很好但我需要使用ChromaKey在叠加层中具有透明度。我已经读过这样做之后可能会出现质量问题。
我应该看一下更简单的方法吗?
我知道渲染速度不会太棒,但我不希望单独使用PC'用于呈现视频的应用程序。
答案 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上设置自定义视频合成器和视频合成,以呈现/导出您想要的内容。