1. 程式人生 > >Ubuntu下錄製螢幕並轉換成gif

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