【发布时间】:2017-10-11 23:52:05
【问题描述】:
我有两个解决这个问题的方法:
解决方案 A
- 将资产转换为
AVMutableComposition。 - 每秒只保留一帧,方法是使用
removeTimeRange(...)方法删除所有其他帧的timing。
解决方案 B
- 使用
AVAssetReader将所有单独的帧提取为CMSampleBuffer的数组 - 将
[CMSampleBuffer]写回到影片中,每20 帧 左右按要求跳过一次。 - 将获取的视频文件转换为
AVMutableComposition,并使用scaleTimeRange(..)减少视频的整体timeRange以获得延时效果。
问题
- 第一种解决方案不适合全高清视频,视频多处卡顿,搜索栏显示时间不准确。
例如 12 秒的延时摄影可能只会显示为 5 秒的持续时间,因此即使在搜索完成后它也会继续播放。
我的意思是视频的时间安排因为某种原因搞砸了。
- 第二种解决方案非常慢。对于 10 分钟 HD 视频,由于所有执行都在内存中完成,因此内存将运行到无穷大。
我正在寻找一种可以立即为视频制作延时摄影的技术,无需等待时间。解决方案 A 可以做到这一点,但不适合,因为时间问题和口吃。
任何建议都会很棒。谢谢!
【问题讨论】:
-
使用解决方案 B,除了使用
CMSampleBufferCreateCopyWithNewTiming()修改时间戳。那么就不需要你的第3步了。 -
必须从
assetTrack中提取[CMSampleBuffer]数组这一事实使得该解决方案非常缓慢,并且还给内存带来了很大压力。它不是一个好的解决方案。我想完全远离CMSampleBuffer。但如果没有其他办法,这可能是唯一的出路。 -
哦,我明白了,您不想先处理整个文件。我错过了。
标签: ios video avfoundation timelapse