dwu*_*urf 73
Simon P Stevens的回答几乎让我在那里:
ffmpeg -f image2 -i image%d.jpg video.avi
ffmpeg -i video.avi -pix_fmt rgb24 -loop_output 0 out.gif
Run Code Online (Sandbox Code Playgroud)
让我们看看我们是否能够做到这一点.
通过avi进行是不必要的.一-pix_fmt中rgb24是无效的,而-loop_output选项防止循环,这是我不想要的.我们得到:
ffmpeg -f image2 -i image%d.jpg out.gif
Run Code Online (Sandbox Code Playgroud)
我的输入图片标有零填充的3位数字,我有30个(image_001.jpg,image_002.jpg,...),所以我需要修复格式说明符
ffmpeg -f image2 -i image_%003d.jpg out.gif
Run Code Online (Sandbox Code Playgroud)
我的输入图片来自我的手机相机,它们太大了!我需要缩小它们.
ffmpeg -f image2 -i image_%003d.jpg -vf scale=531x299 out.gif
Run Code Online (Sandbox Code Playgroud)
我还需要顺时针旋转90度
ffmpeg -f image2 -i image_%003d.jpg -vf scale=531x299,transpose=1 out.gif
Run Code Online (Sandbox Code Playgroud)
这个gif将在帧之间零延迟播放,这可能不是我们想要的.指定输入图像的帧速率
ffmpeg -f image2 -framerate 9 -i image_%003d.jpg -vf scale=531x299,transpose=1 out.gif
Run Code Online (Sandbox Code Playgroud)
图像太大了,所以我会裁剪掉100像素的天空.转置使这很棘手,我使用后旋转的x和y值:
ffmpeg -f image2 -framerate 9 -i image_%003d.jpg -vf scale=531x299,transpose=1,crop=299,431,0,100 out.gif
Run Code Online (Sandbox Code Playgroud)
最后的结果 - 我与世界分享了我的伴侣的精彩面部表情:

Sim*_*ens 49
你可以用ffmpeg做到这一点
首先将图像转换为视频:
ffmpeg -f image2 -i image%d.jpg video.avi
Run Code Online (Sandbox Code Playgroud)
(这会将当前目录中的图像(名为image1.jpg,image2.jpg ...)转换为名为video.avi的视频文件.)
然后将avi转换为gif:
ffmpeg -i video.avi -pix_fmt rgb24 -loop_output 0 out.gif
Run Code Online (Sandbox Code Playgroud)
你可以在这里获得ffmpeg的windows二进制文件.
你也可以用mplayer做类似的事情.请参阅从多个输入图像文件进行编码.
我认为命令行会是这样的:
mplayer mf://*.jpg -mf w=800:h=600:type=jpg -vf scale=160:120 -vo gif89a:fps=3:output=out.gif
Run Code Online (Sandbox Code Playgroud)
(其中800和600是您的源宽度和高度,160和120是目标宽度和height.out.gif是您的目标文件名)
我刚刚测试了这两个并且它们都工作正常.但是我从mplayer得到了更好的结果,因为我能够指定分辨率和帧速率.你的milage可能会有所不同,如果你看的话,我相信你可以找到更多的ffmpeg选项.
psy*_*brm 37
使用ImageMagick:
convert *.png a.gif
Run Code Online (Sandbox Code Playgroud)
Loi*_*erg 12
该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)
Run Code Online (Sandbox Code Playgroud)
然后我偶然发现了比ffmpeg更简单的方法进行转换,这只是使用ImageMagick的命令行转换工具,就像这样
convert image%03d.jpg[0-198] animated_gif.gif
Run Code Online (Sandbox Code Playgroud)
没有比那些人简单得多.
请点击这里:https://gist.github.com/3289840
根据Simon P Stevens和dwurf的回答,我提出了这个简化的解决方案:
ffmpeg -f image2 -framerate 1 -i image%d.jpg video.gif
Run Code Online (Sandbox Code Playgroud)
这导致每个图像的速率为1秒。framerate根据需要调整值。
我只是想添加到dwurf的答案中,这将生成带有标准256色调色板的gif,看起来在视觉上并不令人满意。
我发现了两个 博客文章,并根据我的需求进行了调整,以通过为动画使用自定义调色板来改善视觉质量:
生成调色板:
ffmpeg -f image2 -i image%d.jpg -vf scale=900:-1:sws_dither=ed,palettegen palette.png
Run Code Online (Sandbox Code Playgroud)
将图像转换为具有所需帧速率的常规视频,因为第三个命令仅适用于单个输入视频,而不适用于一堆图像
ffmpeg.exe -f image2 -framerate 1.2 -i image%d.jpg video.flv
Run Code Online (Sandbox Code Playgroud)
现在将生成的视频与生成的调色板转换为更漂亮的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
Run Code Online (Sandbox Code Playgroud)