从一组jpeg图像创buildanimationgif

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

你可以用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得到了更好的结果,因为我能够指定分辨率和帧率。 你的milage可能会有所不同,我相信你可以找到更多的选项ffmpeg,如果你看。

Simon P Stevens的回答几乎把我带到了那里:

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

我们来看看我们是否可以把这件事整理一下。

通过一个AVI是不必要的。 -pix_fmtrgb24是无效的, -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示例

使用ImageMagick:

 convert *.png a.gif 

ffmpeg to .avi.avi to .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

基于Simon P Stevens和dwurf的回答,我提出了这个简化的解决方案:

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

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