对于这个问题,我有两个解决方案:
解决方案 A
- 将资产转换为
AVMutableComposition
. - 通过使用方法删除
timing
所有其他帧,每秒只保留一帧。removeTimeRange(...)
解决方案 B
- 使用 将
AVAssetReader
所有单独的帧提取为一个数组CMSampleBuffer
- 根据要求每20 帧左右
[CMSampleBuffer]
回写一次电影。 - 将获得的视频文件转换为一个
AVMutableComposition
并用于scaleTimeRange(..)
减少timeRange
视频的整体以获得延时效果。
问题
- 第一种方案不适用于全高清视频,视频多处卡顿,搜索栏显示时间不准确。
例如,12 秒的延时摄影可能只显示为 5 秒的持续时间,因此即使在搜索完成后它也会继续播放。
我的意思是由于某种原因,视频的时间安排都搞砸了。
- 第二种解决方案非常慢。对于10 分钟的 高清视频,内存将运行到无穷大,因为所有执行都在内存中完成。
我正在寻找一种可以立即为视频制作延时摄影的技术,而无需等待时间。解决方案一种是这样做的,但由于时间问题和口吃不适合。
任何建议都会很棒。谢谢!