工作中,经常需要将录制的视频(.mp4 .avi .mkv…)转换成gif动图。特别是在写博客时,用图片无法简洁清楚的表达你的想法意图,目前csdn博客文章中是无法支持本地视频演示的,但是可以另辟蹊径,我们可以将视频格式的文件先转换成 gif动图,再进行上传展示。
我们使用 ffmpeg 软件来完成转换工作
- $ sudo add-apt-repository ppa:jonathonf/ffmpeg-3
- $ sudo apt-get update
- $ sudo apt-get install ffmpeg
(1)直接转换命令:
$ ffmpeg -i out.mp4 out.gif
(2) 带参数命令:
ffmpeg -ss 00:00:14 -i test_00.mp4 -to 18 -r 20 -s 480x960 -vf scale=200:-1 test.gif
参数说明:
- -ss 表示起始点
- -i 后面跟要操作的那个视频文件
- -to 表示文件的终止点, 即录制多少秒.
- -r 帧速率,可以增大这个值输出更画质更优的 GIF 文件
- -vf 图形筛选器,GIF 的缩放大小
- -s 设置图片的长宽大小
消除图片抖动
如果只用用2.2中的转换命令,画质不是很清晰,因为使用默认的ffmpeg转换后的gif图片像素会有抖动,因此需要使用滤镜。方法如下:
- #!/bin/sh
-
- palette="/tmp/palette.png"
-
- filters="fps=30,scale=960:-1:flags=lanczos"
-
- ffmpeg -v warning -i $1 -vf "$filters,palettegen" -y $palette
- ffmpeg -v warning -i $1 -i $palette -lavfi "$filters [x]; [x][1:v] paletteuse" -y $2
这里的fps 每秒帧率是可以调整的,数字越大图片质量越清晰。
scale 参数说明:
将输入的1920x1080缩小到960x540输出
- ffmpeg -i input.mp4 -vf scale=960:540 output.mp4
-
- //ps: 如果540不写,写成-1,即scale=960:-1, 那也是可以的,ffmpeg会通知缩放滤镜在输出时保持原始的宽高比。
将上面的内容保存为脚本文件video2gif.sh 并增加可执行权限:
- $ sudo chmod a+x video2gif.sh
- $ ./video2gif.sh test.mp4 test.gif
这样子转换出来的gif图片格式,就很清晰了,如下是转换的对比效果图:
图一:是用2.2中的命令直接转换过来的gif图片

图二: 是用执行脚本文件滤镜之后的gif图片

推荐使用脚本文件来转换。
ffmpeg的基本用法_加班猿的博客-CSDN博客_ffmpeg怎么用
Ubuntu下录制屏幕并转换成gif_游走的大千世界的烤腰子的博客-CSDN博客