我需要可以在Windows 7上编写脚本的内容。此图像将用于横幅。
答案 0 :(得分:67)
Simon P Stevens' answer几乎把我带到了那里:
ffmpeg -f image2 -i image%d.jpg video.avi
ffmpeg -i video.avi -pix_fmt rgb24 -loop_output 0 out.gif
让我们看看我们是否能够做到这一点。
通过avi进行是不必要的。 -pix_fmt
的{{1}}无效,而rgb24
选项会阻止循环播放,这是我不想要的。我们得到:
-loop_output
我的输入图片标有零填充的3位数字,我有30个(image_001.jpg,image_002.jpg,...),所以我需要修复格式说明符
ffmpeg -f image2 -i image%d.jpg out.gif
我的输入图片来自我的手机相机,它们太大了!我需要缩小它们。
ffmpeg -f image2 -i image_%003d.jpg out.gif
我还需要顺时针旋转90度
ffmpeg -f image2 -i image_%003d.jpg -vf scale=531x299 out.gif
这个gif将在帧之间零延迟播放,这可能不是我们想要的。指定输入图像的帧速率
ffmpeg -f image2 -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 out.gif
最终结果 - 我与世界分享了我的伴侣的精彩面部表情:
答案 1 :(得分:45)
您可以使用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
您可以获得windows binaries for ffmpeg here。
您也可以使用mplayer执行类似的操作。请参阅Encoding from multiple input image files。
我认为命令行会是这样的:
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选项。
答案 2 :(得分:33)
使用ImageMagick:
convert *.png a.gif
答案 3 :(得分:11)
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
没有比那些人简单得多。
答案 4 :(得分:3)
根据Simon P Stevens和dwurf的答案,我提出了这个简化的解决方案:
ffmpeg -f image2 -framerate 1 -i image%d.jpg video.gif
这导致每个图像的速率为1秒。根据您的需要调整framerate
值。
答案 5 :(得分:2)
我只想添加dwurf的答案,这将生成一个带有标准256色调色板的gif,看起来并不那么令人愉悦。
我找到two blog-posts并根据我的需要调整它们,以便通过为动画使用自定义调色板来提高视觉质量:
生成调色板:
ffmpeg -f image2 -i image%d.jpg -vf scale=900:-1:sws_dither=ed,palettegen palette.png
将图像转换为具有所需帧速率的常规视频,因为第三个命令仅适用于单个输入视频而不是一堆图像
ffmpeg.exe -f image2 -framerate 1.2 -i image%d.jpg video.flv
现在将生成的视频转换为更漂亮的gif:
ffmpeg.exe -i video.flv -i palette.png -filter_complex "fps=1.2,scale=900:-1:flags=lanczos[x];[x][1:v]paletteuse" video.gif