为什么使用 avconv 将一系列图像转换为 gif 时似乎无法获得正确的帧速率?

为什么使用 avconv 将一系列图像转换为 gif 时似乎无法获得正确的帧速率?

我需要将一系列图像转换为 gif。

我找到了三种主要方法来实现这一点。一种涉及 ImageMagick,一种涉及 gifsicle,另一种涉及 a​​vconv。

我不能使用 Imagemagick,因为它比其他任何方法都慢得多。我不能使用 gifsicle,因为它不能处理“png”文件。我可以使用 ImageMagick 的“mogrify”命令将 PNG 转换为 gif,然后使用 gifsicle 将它们合并为单个 gif,但这会降低 mogrify 的速度,这对我而言是一个大问题。

我已经找到了如何使用 avconv 来实现我需要的功能,但是由于某种原因,生成的 gif 的帧速率增加了一倍。

这是我正在使用的命令:

avconv -i frame%15d.png -s qvga -vf format=rgb8,format=rgb24 -pix_fmt rgb24 -r 10 output.gif

输出如下:

avconv version 9.13-6:9.13-0ubuntu0.14.04.1, Copyright (c) 2000-2014 the Libav developers
  built on May  9 2014 13:34:03 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Input #0, image2, from 'frame%15d.png':
  Duration: 00:00:12.04, start: 0.000000, bitrate: N/A
    Stream #0.0: Video: png, rgb24, 320x240, 25 fps, 25 tbr, 25 tbn
File 'output.gif' already exists. Overwrite ? [y/N] y
Output #0, gif, to 'output.gif':
  Metadata:
    encoder         : Lavf54.20.3
    Stream #0.0: Video: rawvideo, rgb24, 320x240, q=2-31, 200 kb/s, 90k tbn, 10 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (png -> rawvideo)
Press ctrl-c to stop encoding
frame=  121 fps=  0 q=0.0 Lsize=   10406kB time=12.10 bitrate=7044.8kbits/s    
video:27225kB audio:0kB global headers:0kB muxing overhead -61.779245%

有 301 张图像需要持续 30 秒,这就是我强制帧速率为 10 的原因。但它似乎忽略了这一点。

如果我还使用“-r 10”强制输入帧速率,则生成的 gif 将以我所需帧速率的一半持续 60 秒。

输入和输出均强制使用 FPS 的命令:

avconv -r 10 -i frame%15d.png -s qvga -vf format=rgb8,format=rgb24 -pix_fmt rgb24 -r 10 output2.gif

输出结果如下:

avconv version 9.13-6:9.13-0ubuntu0.14.04.1, Copyright (c) 2000-2014 the Libav developers
  built on May  9 2014 13:34:03 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Input #0, image2, from 'frame%15d.png':
  Duration: 00:00:12.04, start: 0.000000, bitrate: N/A
    Stream #0.0: Video: png, rgb24, 320x240, 25 fps, 25 tbr, 25 tbn
Output #0, gif, to 'output2.gif':
  Metadata:
    encoder         : Lavf54.20.3
    Stream #0.0: Video: rawvideo, rgb24, 320x240, q=2-31, 200 kb/s, 90k tbn, 10 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (png -> rawvideo)
Press ctrl-c to stop encoding
frame=  301 fps=270 q=0.0 Lsize=   25884kB time=30.10 bitrate=7044.5kbits/s    
video:67725kB audio:0kB global headers:0kB muxing overhead -61.780963%

我不知道我现在做错了什么,希望有人能提供意见。

或者,如果有人知道一种无需使用 ImageMagick 即可将一批 PNG 转换为单个 gif 的快速方法,那么我就可以使用 gifsicle 将它们合并到一起。

相关内容