使用ffmpeg命令为视频生成gif动态图片

系统设置2021-01-20

ffmpeg工具能很好的帮我们处理视频音频,本文将介绍利用ffmpeg将视频或者视频的某一段转换成gif动态图片的简单方法,如果你正在使用ffmpeg,基本就不需要额外的第三方工具了。

转换视频为gif图片如有必要可能需要使用引号将文件名或路径包含起来。

设置时间

通常我们只需要转换视频的某一个时间片段,所以不能像上图中的命令那样直接转换,需要使用-ss(设置起始时间),-t(设置持续时间)。

ffmpeg -ss 起始时间 -t 持续时间 -i 输入文件 输出文件

比如ffmpeg -ss 9 -t 5 -i 1.mp4 1.gif,将会从视频的9秒开始截取5秒片段转换为gif图片。-ss也可以设置为00:00:00.000的形式,为小时、分钟、秒、毫秒,例如00:00:09.000。

设置循环次数

-loop 循环次数,比如设置-loop 1,生成的gif图片将只会播放一次,0为无限次(默认)。

ffmpeg -ss 起始时间 -t 持续时间 -i 输入文件 -loop 循环次数 输出文件

比如ffmpeg -ss 9 -t 5 -i 1.mp4 -loop 0 1.gif。

设置缩放

如果是高分辨率视频,可能需要将画面缩放,不然gif图片就太大了,可以使用scale控制。比如scale=iw/2:-1:flags=lanczos(lanczos为缩放算法),将会设置gif图片的宽度为源视频一半,高度为比例缩放,也可以强制设置宽高像素。

ffmpeg -ss 起始时间 -t 持续时间 -i 输入文件 -loop 循环次数 -vf scale=宽:高:flags=lanczos 输出文件

例如ffmpeg -ss 9 -t 5 -i 1.mp4 -loop 0 -vf scale=iw/2:-1:flags=lanczos 1.gif。

设置fps(每秒帧数)

设置低一些的fps可以压缩gif的体积,使用fps=指定的fps数值,保持流畅即可。

ffmpeg -ss 起始时间 -t 持续时间 -i 输入文件 -loop 循环次数 -vf "scale=宽:高:flags=lanczos,fps=数值" 输出文件

例如ffmpeg -ss 9 -t 5 -i 1.mp4 -loop 0 -vf "scale=iw/2:-1:flags=lanczos,fps=15" 1.gif

裁剪画面

可能我们只需要将视频画面的一部分转成gif图片,可以使用crop,具体为crop=宽度:高度:宽度起始:高度起始,比如crop=200:200:0:0,将会从横向0像素,纵向0像素开始,从画面裁剪200x200的区域。

ffmpeg -ss 起始时间 -t 持续时间 -i 输入文件 -loop 循环次数 -vf "scale=宽:高:flags=lanczos,fps=数值,crop=宽度:高度:宽度起始:高度起始" 输出文件

例如ffmpeg -ss 9 -t 5 -i 1.mp4 -loop 0 -vf "scale=iw/2:-1:flags=lanczos,fps=15,crop=iw/2:ih:0:0" 1.gif,将裁剪视频的左半边画面。

提高gif画面质量

你可能发现通过上面的方法直接生成的gif图片质量不怎么好,可以使用split和palette过滤器进行改善。

ffmpeg -ss 起始时间 -t 持续时间 -i 输入文件 -loop 循环次数 -vf "scale=宽:高:flags=lanczos,fps=数值,crop=宽度:高度:宽度起始:高度起始,split[s1][s2];[s1]palettegen[p];[s2][p]paletteuse" 输出文件

如ffmpeg -ss 9 -t 5 -i 1.mp4 -loop 0 -vf "scale=iw/2:-1:flags=lanczos,fps=15,crop=iw/2:ih:0:0,split[s1][s2];[s1]palettegen[p];[s2][p]paletteuse" 1.gif。

上面的参数和过滤器可根据自己的需要自由选择及设置。

参考:https://superuser.com/questions/556029/how-do-i-convert-a-video-to-gif-using-ffmpeg-with-reasonable-quality

更多了解:http://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html

palettegen和paletteuse相关选项:https://ffmpeg.org/ffmpeg-filters.html#palettegen-1

本文链接:https://www.xstui.com/read/1082