58

我需要可以在 Windows 7 上编写脚本的东西。此图像将用于横幅中。

4

6 回答 6

123

西蒙 P 史蒂文斯的回答几乎让我到了那里:

ffmpeg -f image2 -i image%d.jpg video.avi
ffmpeg -i video.avi -pix_fmt rgb24 -loop_output 0 out.gif

让我们看看我们是否可以整理一下。

不需要通过avi。A -pix_fmtofrgb24无效,并且该-loop_output选项可防止循环,这是我不想要的。我们得到:

ffmpeg -f image2 -i image%d.jpg out.gif

我的输入图片标有一个零填充的 3 位数字,我有 30 个(image_001.jpg,image_002.jpg,...),所以我需要修复格式说明符

ffmpeg -f image2 -i image_%003d.jpg out.gif

我输入的图片来自我的手机相机,它们太大了!我需要按比例缩小它们。

ffmpeg -f image2 -i image_%003d.jpg -vf scale=531x299 out.gif

我还需要将它们顺时针旋转 90 度

ffmpeg -f image2 -i image_%003d.jpg -vf scale=531x299,transpose=1 out.gif

这个 gif 将在帧之间以零延迟播放,这可能不是我们想要的。指定输入图像的帧率

ffmpeg -f image2 -framerate 9 -i image_%003d.jpg -vf scale=531x299,transpose=1 out.gif

图像有点太大,所以我将裁剪出 100 像素的天空。转置使这变得很棘手,我使用旋转后的 x 和 y 值:

ffmpeg -f image2 -framerate 9 -i image_%003d.jpg -vf scale=531x299,transpose=1,crop=299,431,0,100 out.gif

最终结果 - 我可以与全世界分享我的伴侣的精彩面部表情:

使用 ffmpeg 创建的动画 gif 示例

于 2015-04-09T15:36:12.877 回答
76

你可以用ffmpeg做到这一点

首先将图像转换为视频:

ffmpeg -f image2 -i image%d.jpg video.avi

(这会将图像从当前目录(名为 image1.jpg、image2.jpg...)转换为名为 video.avi 的视频文件。)

然后将 avi 转换为 gif:

ffmpeg -i video.avi -pix_fmt rgb24 -loop_output 0 out.gif

您可以在此处获取 ffmpeg 的 Windows 二进制文件


你也可以用mplayer做类似的事情。请参阅从多个输入图像文件编码

我认为命令行会是这样的:

mplayer mf://*.jpg -mf w=800:h=600:type=jpg -vf scale=160:120 -vo gif89a:fps=3:output=out.gif

(其中 800 和 600 是您的源宽度和高度,160 和 120 是目标宽度,height.out.gif 是您的目标文件名)


我刚刚测试了这两个,它们都工作正常。然而,我从 mplayer 获得了更好的结果,因为我能够指定分辨率和帧速率。您的里程可能会有所不同,如果您查看的话,我相信您可以找到更多 ffmpeg 选项。

于 2010-09-10T22:58:10.127 回答
53

使用 ImageMagick:

convert *.png a.gif
于 2013-07-14T09:37:03.493 回答
14

ffmpeg.avi.avi.gif有效,但唯一需要注意的是,您的图像必须以完全递增的数字顺序命名才能正常工作,没有间隙。我编写了一个快速的 python 脚本来相应地重命名我的所有图像,以便这个ffmpeg配方可以工作:

import os

files = [ f for f in os.listdir('.') if os.path.isfile(os.path.join('.',f)) and f.endswith('.jpg') ]
for i, file in enumerate(sorted(files)):
    os.rename(file, 'image%03d.jpg' % i)

然后我偶然发现了一种比ffmpeg更简单的方法来进行转换,它只是使用 ImageMagick 的命令行转换工具,像这样

convert image%03d.jpg[0-198] animated_gif.gif

没有比这更简单的人了。

要点在这里:https ://gist.github.com/3289840

于 2012-08-07T20:41:48.423 回答
11

我只是想补充一下dwurf的答案,这将生成一个带有标准 256 色调色板的 gif,这在视觉上看起来并不令人愉悦。

我找到了两篇 博客文章并根据我的需要对其进行了调整,以便通过为动画使用自定义调色板来提高视觉质量:

生成调色板:

ffmpeg -f image2 -i image%d.jpg -vf scale=900:-1:sws_dither=ed,palettegen palette.png

将图像转换为具有所需帧速率的常规视频,因为第三个命令仅适用于单个输入视频而不是一堆图像

ffmpeg -f image2 -framerate 1.2 -i image%d.jpg video.flv

现在用生成的调色板将生成的视频转换成更漂亮的 gif:

ffmpeg -i video.flv -i palette.png -filter_complex "fps=1.2,scale=900:-1:flags=lanczos[x];[x][1:v]paletteuse" video.gif
于 2018-05-16T11:10:15.587 回答
10

根据 Simon P Stevens 和 dwurf 的回答,我想出了这个简化的解决方案:

ffmpeg -f image2 -framerate 1 -i image%d.jpg video.gif

这导致每张图像的速率为 1 秒。framerate根据您的需要调整值。

于 2017-11-15T14:57:24.153 回答