ffmpeg输出文件大小随电影长度的线性增长快于线性增长

ffmpeg输出文件大小随电影长度的线性增长快于线性增长,ffmpeg,Ffmpeg,我正在使用ffmpeg将一些.bmp图像串成一部电影。总共有1001帧,长度为0:40。我使用的命令是 ffmpeg -f image2 -i render.%05d.bmp -c:v libx264 -s 512:268 render.mp4 输出文件大33.2MB,大约是相同长度的全高清视频大小的两倍(大约是像素的16倍!)。除了文件大小不合理地大之外,我意识到它随着帧数的增加比线性增长快(不能确切地说它是二次的、指数的等等)。在100帧之后,它的大小约为1536KB(这已经太大了),在5

我正在使用ffmpeg将一些.bmp图像串成一部电影。总共有1001帧,长度为0:40。我使用的命令是

ffmpeg -f image2 -i render.%05d.bmp -c:v libx264 -s 512:268 render.mp4
输出文件大33.2MB,大约是相同长度的全高清视频大小的两倍(大约是像素的16倍!)。除了文件大小不合理地大之外,我意识到它随着帧数的增加比线性增长快(不能确切地说它是二次的、指数的等等)。在100帧之后,它的大小约为1536KB(这已经太大了),在500帧之后,它的大小已经达到15104KB,而在1001帧之后,它最终达到34085KB

我有根据的猜测是,对于每一帧,它都会再次存储关于所有前一帧的一些信息,这是毫无意义的

我做错了什么?在向我推荐libx265之前:它会将整个视频变为绿色。

使用:

ffmpeg -i render.%05d.bmp -c:v libx264 -vf "scale=512:-2,format=yuv420p" -movflags +faststart output.mp4
  • 如果输出文件太大,请添加中所述的
    -crf
    -preset
    选项
  • 如果输出仍然太大,则将
    -c:v libx264
    更改为
    -c:v libx265
    ,但编码速度会较慢。由于像素格式的原因,尝试x265时输出为绿色:如我的示例所示,使用
    format=yuv420p
    将解决此问题。看
  • 如果您的目标是特定的输出文件大小,则使用两次通过
    -b:v
    (请参见上面的任一链接)

这并不能真正阻止奇怪的“爆炸大小”现象(仔细想想,这也可能是一个显示错误),而且文件仍然出乎意料地大。但它肯定会将文件大小减少到一个可行的水平。非常感谢你的帮助@JakobFilser过度简化我猜最初的帧比较简单,后来的帧比较复杂,所以复杂的帧接收到更多的比特。如果它仍然出乎意料地大,请使用更高的
-crf
值,或者如果需要输出小于某个大小,则执行两次编码。