iOS从视频中提取所有帧

3
我需要从视频文件中提取所有帧然后保存到文件中。我尝试使用AVAssetImageGenerator,但速度非常慢 - 每一帧需要1秒-3秒(例如1280x720 MPEG4视频),而没有保存到文件的过程。
有没有什么方法可以让它更快? OpenGL、GPU等?
如果您能指导我正确的方向,我将不胜感激。

如果您要在iOS设备上执行此操作,我相信它会消耗更多的资源。从gif文件开始,尝试将其转换为单个帧,然后再进行更高格式的转换。 - Teja Nandamuri
1个回答

3
AVAssetImageGenerator 是一个随机访问(寻址)接口,而寻址需要时间,因此一种优化方法是使用 AVAssetReader,它将快速顺序地向您提供帧。您还可以选择使用 yuv 格式工作,这将提供更小的帧(我认为)更快的解码。

然而,这些原始帧非常庞大:如果是 RGBA,则为 1280px * 720px * 4 字节/像素,每个帧约为 3.6MB。如果您想保留所有这些帧,您需要一些相当严重的压缩(例如 MPEG4 @ 720p)。

那么您想实现什么目标呢?

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


所以在基本情况下,我想保存视频,但是在原始视频的基础上删除一些帧(没有任何过滤器、单帧编辑等)。 - user2262230
1
好的,这种情况下你应该通过AVAssetReader读取帧,并有条件地将其中一些帧写出到另一个AVAssetWriter中。 - Rhythmic Fistman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接