问题
我想将一部长电影转换成一系列关于动画 GIF 的作品。
每个 GIF 必须小于 5MB。
有什么方法可以确定 GIF 在编码时有多大?
到目前为止的进展
我可以将电影分割成单独的帧:ffmpeg -i movie.ogv -r 25 frameTemp.%05d.gif
然后我可以使用 convert
从 ImageMagick 创建 GIF。但是,我找不到在运行命令之前确定可能的文件大小的方法。
或者,我可以将电影分成几 block :ffmpeg -i movie.ogv -vcodec copy -ss 00:00:00 -t 00:20:00 output1.ogv
但我无法知道,当我 convert
将文件转换为 GIF 将小于 5MB。
一个包含大量 Action 的 10 秒场景可能超过 5MB(糟糕!),而静态场景可能低于 5MB(不是问题,但效率不高)。
想法
我认为我想做的是将整个电影转换为 GIF,然后找到一种按文件大小拆分的方法。
查看 ImageMagick,我可以将 GIF 拆分为帧,但我看不到将其拆分为特定大小/长度的动画 GIF 的方法。
那么,这可能吗?
最佳答案
avconv
中目前没有“停止在这个文件大小”选项。我知道。当然,它可以很快被破解,但目前 libav
项目不做快速破解,所以它可能会出现在 ffmpeg
第一的。
除此之外,您还面临一个问题,即动画 gif 是一种非常古老的格式,因此会做一些相当奇怪的事情。让我解释一下它通常的工作方式:
第三步是在动画 gif 中完成的唯一时间压缩,没有它,文件大小会大得多(因为必须一次又一次地保存每个像素)。
但是,如果您不确定最后一次中断是什么时候,则无法确定像素是否与之前的“帧”相同。毕竟,这个特定的帧可能是图像中的第一个。
如果 5MiB 的限制足够软,可以稍微超过它,您可能可以将一些东西放在一起,只是不断地逐帧添加,并立即计算最终文件大小。一旦超过限制,只需停止并使用下一帧作为下一个文件的起点。
关于ffmpeg - 拆分电影,使每个 GIF 都在特定文件大小之下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24628412/