1

对于这个问题,我有两个解决方案:

解决方案 A

  1. 将资产转换为AVMutableComposition.
  2. 通过使用方法删除timing所有其他帧,每秒只保留一帧。removeTimeRange(...)

解决方案 B

  1. 使用 将AVAssetReader所有单独的帧提取为一个数组CMSampleBuffer
  2. 根据要求每20 帧左右[CMSampleBuffer]回写一次电影。
  3. 将获得的视频文件转换为一个AVMutableComposition并用于scaleTimeRange(..)减少timeRange视频的整体以获得延时效果。

问题

  • 第一种方案不适用于全高清视频,视频多处卡顿,搜索栏显示时间不准确。

例如,12 秒的延时摄影可能只显示为 5 秒的持续时间,因此即使在搜索完成后它也会继续播放。

我的意思是由于某种原因,视频的时间安排都搞砸了。

  • 第二种解决方案非常慢。对于10 分钟的 高清视频,内存将运行到无穷大,因为所有执行都在内存中完成。

我正在寻找一种可以立即为视频制作延时摄影的技术,而无需等待时间解决方案一种是这样做的,但由于时间问题和口吃不适合。

任何建议都会很棒。谢谢!

4

1 回答 1

0

您可能想尝试使用内置的缩略图生成功能,看看它们是否足够快速/有效以满足您的需求。

它们的好处是经过优化,可以有效地从视频流中生成图像。

一个接一个地简单地显示“幻灯片放映”之类的缩略图视图可能会给您想要的效果。

在关键类 AVAssetImageGenerator 上有信息,这里包括如何使用它来生成多个图像:

于 2017-05-12T16:39:03.267 回答