2015-10-14 173 views
3

我必须从视频文件中提取所有帧,然后将它们保存到文件中。 我试图使用AVAssetImageGenerator,但它非常慢 - 每帧(样本1280x720 MPEG4视频)需要1s - 3s,而不保存到文件处理。iOS从视频中提取所有帧

无论如何要让它更快? OpenGL,GPU,(...)?

我将非常感谢您向我展示正确的方向。

+0

如果你打算在iOS设备上这样做,我相信它会消耗更多的资源。从gif文件开始,尝试将其转换为单个帧,然后转换为更高格式。 –

回答

3

AVAssetImageGenerator是一个随机访问(搜索)接口,并且需要时间,所以一个优化可以使用一个AVAssetReader,这将快速并顺序地为你提供帧。你也可以选择使用yuv格式,这会给你更小的帧(我认为)更快的解码。

但是,那些原始帧非常庞大:1280px * 720px * 4字节/像素(如果在RGBA中),每个像素大约为3.6MB。如果你想保留所有的内容,你需要一些非常严重的压缩(想到MPEG4 @ 720p)。

那么你想达到什么目的?

您确定要以108MB/s(30fps)或864MB/s(240fps)的速率填满用户的磁盘吗?

+0

因此,在基本场景中,我想保存视频,但从原始帧中删除了一些帧后(没有任何过滤器,单帧编辑等)。 – user2262230

+1

好的,在这种情况下,您应该通过'AVAssetReader'读取帧,并有条件地使用'AVAssetWriter'将其中一些帧写入另一帧。 –