我需要的东西,可以在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_fmt
的rgb24
是无效的, -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
最后的结果 – 我得到分享我的伴侣与世界的真棒面部表情:
使用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
值。