![为什么使用 avconv 将一系列图像转换为 gif 时似乎无法获得正确的帧速率?](https://linux22.com/image/1408433/%E4%B8%BA%E4%BB%80%E4%B9%88%E4%BD%BF%E7%94%A8%20avconv%20%E5%B0%86%E4%B8%80%E7%B3%BB%E5%88%97%E5%9B%BE%E5%83%8F%E8%BD%AC%E6%8D%A2%E4%B8%BA%20gif%20%E6%97%B6%E4%BC%BC%E4%B9%8E%E6%97%A0%E6%B3%95%E8%8E%B7%E5%BE%97%E6%AD%A3%E7%A1%AE%E7%9A%84%E5%B8%A7%E9%80%9F%E7%8E%87%EF%BC%9F.png)
我需要将一系列图像转换为 gif。
我找到了三种主要方法来实现这一点。一种涉及 ImageMagick,一种涉及 gifsicle,另一种涉及 avconv。
我不能使用 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 将它们合并到一起。