Ubuntu下录制屏幕并转换成gif


  日常工作中,经常需要将录制的视频(.mp4/.ogv/avi/…)转换成gif动图。随便举个例子,同学们在使用博客记录东西的时候常常需要演示应用程序在手机上的运行效果,通常这些效果都是被以视频格式来进行保存的。而往往markdown编辑器不允许上传视频,因此我们常常需要将视频格式的文件先转换成 gif动图,再进行上传展示。

分两步走。

第一步:录制视频

视频的来源通常都是通过屏幕录制。而视频录制的方式有很多种,随便列举几种。
1.手机软件自带(eg.小米手机自带“屏幕录制”软件)
2.使用Android Studio自带的屏幕录制功能,如下图:
在这里插入图片描述

3.ubuntu系统上的屏幕录制软件
1)打开Ubuntu软件中心,安装RecordMyDesktop
2)安装之后,打开RecordMyDesktop,点击选择窗口,也可以在任务栏上右键该应用的图标(红点),点击“选择区域”,更加精确地选择录制区域(必须回到桌面才能选择)。选择好录制区域和录制信息后,点击“录制”,开始录制屏幕。在任务栏上右键该应用的图标可以停止或暂停录制。假设录制好的视频为out.ogv.
等等。

第二步:将视频转换成gif
方法一.

1)打开Ubuntu软件中心,GNOME MPlayer和ImageMagick。
2),打开命令行终端,输入命令 mplayer -ao null out.ogv -vo jpeg:outdir=. ,会在当前目录下把视频生成一张张的jpg图片。
3)紧接着在终端中输入命令 convert *.jpg video.gif , 把jpg图片合并成gif动图。

方法二(推荐)

通过GNOME MPlayer和ImageMagick把视频转换成gif,会发现转换后的gif体积会大很多,因此这里推荐另一种把视频转换成gif的方式:

1)下载ffmpeg

$ sudo add-apt-repository ppa:jonathonf/ffmpeg-3
$ sudo apt-get update
$ sudo apt-get install ffmpeg

2)将视频转化为Gif

$ ffmpeg -i out.ogv out.gif

3)另外还可指定转换参数(参数可调,自己可以尝试下)

$  ffmpeg -ss 2 -t 10 -i out.ogv -s 649x320 -r 15 out.gif

其中,
-ss 2 -t 12 表示从从视频的第2秒开始转换, 转换时间长度为10秒.
-s用于设定大小, -r 用于设定帧数.

转换的gif效果展示:
执行命令:

$ ffmpeg -i  demo.mp4 -s 320x480  out.gif

效果:
在这里插入图片描述

看到没,gif是转换成功了。但是有没有发现有什么不对?
没错,转换之后的gif动图感觉不清楚,能明显的看到像素点。如果你要求不高的话,这样是完全可以的,但是我还是想把它优化一下,这就是下面的工作了。

消除图片抖动

使用默认的ffmpeg转换后的gif图片像素会有抖动,因此需要使用滤镜:
下面提供两种脚本文件内容,内容基本一致。只不过脚本2可指定转换gif的起始时间和持续时长。另外,经过比对验证感觉脚本2转换的gif质量更高一些。
脚本1:

#!/bin/sh
palette="/tmp/palette.png"
filters="fps=15,scale=320:-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

脚本2:

# start_time和duration可自行指定
start_time=0
duration=10
palette="/tmp/palette.png"
filters="fps=15,scale=320:-1:flags=lanczos"

ffmpeg -v warning -ss $start_time -t $duration -i $1 -vf "$filters,palettegen" -y $palette
ffmpeg -v warning -ss $start_time -t $duration -i $1 -i $palette -lavfi "$filters [x]; [x][1:v] paletteuse" -y $2
ffmpeg -v warning -i $1 -i $palette -lavfi "$filters [x]; [x][1:v] paletteuse" -y $2

然后将上面的内容保存为脚本gifenc.sh之后再执行脚本:

./gifenc.sh out.ogv anim.gif

即可。


转换的gif效果展示:

$ sudo chmod a+x gifenc.sh
$ ./gifenc.sh demo.mp4 out1.gif


效果:
在这里插入图片描述

好了,两种gif自己对比一下,孰好孰坏,一眼便知!

“消除图片抖动”的解决方案,来源于:
http://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html#content

纯英文文档,知道你们英语有些不咋地,所以可参照下面的译文:
使用 FFmpeg 处理高质量 GIF 图片




参考文章:https://blog.csdn.net/u012964944/article/details/50464263

猜你喜欢

转载自blog.csdn.net/zhangqunshuai/article/details/83181543
今日推荐