Linux中gif的製作和圖片轉換

圖片轉換命令convert

convert 命令是由 ImageMagick 包提供。

選擇轉換爲jpg圖片會比轉換爲png圖片小很多。 jpg 圖片比 png小。

縮放:

convert -sample 80x60 input.jpg output.jpg

縮放後圖像保持原來的長寬比例(也可同時轉換格式,好用法):

convert -sample 25%x25% input.jpg output.jpg

類型轉換

convert 1.jpg 1.png

特殊效果

convert -charcoal 2 input.jpg output.jpg   #炭筆
convert -colorize 255 input.jpg output.jpg   #着色 可以指定三種顏色 red/green/blue
convert -implode 4 input.jpg output.jpg   #內爆效果
convert -solarize 42 input.jpg output.jpg   #曝光,模擬膠片曝光
convert -spread 5 input.jpg output.jpg     #隨機移動,參數是位移大小

加邊框

convert -raise 5x5 input.jpg output.jpg
convert +raise 5x5 input.jpg output.jpg

使用ImageMagick的如下命令生成gif

  1. 執行如下命令將單幀圖片壓縮成 gif 圖片:

    convert -delay 120 -loop 0 *.png  out.gif
  2. 執行如下命令將 gif 圖片進行壓縮:

    convert out.gif -fuzz 10% -layers Optimize optimized.gif
  3. 一個複雜一點的命令
    convert -delay 50 frame1.gif -delay 100 frame1.gif -delay 150 frame1.gif -loop 0 -pause 200 animated.gif

利用ffmpeg將mp4轉換爲gif

方法一: 直接將視頻轉換爲gif

# 將整個small.mpr轉換爲gif
ffmpeg -i small.mp4 small.gif

# 從視頻第2秒開始,截取3秒片段爲gif
ffmpeg -t 3 -ss 00:00:02 -i small.webm small-clip.gif

# 轉換爲高質量的gif
ffmpeg -i small.mp4 -b 2048k small.gif

方法二: 先轉換爲圖片,再利用convert轉換爲gif

# 每10幀每秒
ffmpeg -i input.mp4 -r 10 output%05d.png

# 在利用Imagemagick的convert工具轉換爲gif
convert output*.png output.gif

在第一步時指定目錄:

mkdir /tmp/gif/

ffmpeg -i input.mp4 -r 10 /tmp/gif/output%04d.png

Peek

Peek是一個gif記錄工具。缺點:錄製後不能進行調整;優點:安裝方便

sudo add-apt-repository ppa:peek-developers/stable
sudo apt update && sudo apt install peek

在Ubuntu 16.04上安裝了 Peek後,這個軟件無法捕捉到圖像,捕捉界面是全黑的。

Gifine

Gifine可以錄製簡短的Gifs或者videos。優點:錄製後能進行調整;缺點:安裝麻煩,

嘗試了一次Gifine,製作全屏gif,時間大概40s,佔用了我10G內存,3.3G交換分區。製作小的gif還是可以。

原因:當時幀率默認爲30;總共錄製的圖片多達1238張,每張圖有100KB,總共有136MB。
解決辦法:錄製前改小幀率;錄製後適當刪除一些幀。

製作長gif:可以選擇使用Gifine,錄製多段小gif,再利用convert命令進行合併。

總體來說Gifine還是不錯的。

每一幀,對應一張圖片

Ubuntu 16.04安裝 Gifine

依次運行下面的命令進行安裝:

This has been tested on a fresh install of Ubuntu 16.04 LTS.

Install git:

$ sudo apt install git

Next, install all of the gifine's dependencies and sub-dependencies:

$ sudo apt install -y \
ffmpeg \
graphicsmagick \
gifsicle \
luarocks \
libxext-dev \
libimlib2-dev \
mesa-utils \
libxrender-dev \
glew-utils \
libglm-dev \
cmake \
compiz \
gengetopt \
libglu1-mesa-dev \
libglew-dev \
libxrandr-dev \
libgirepository1.0-dev

Install slop

sudo add-apt-repository ppa:nilarimogard/webupd8 
sudo apt-get update
sudo apt-get install slop

Install LGI:

$ sudo luarocks install lgi

LuaRocks is the package manager for Lua modules.

Install gifine

$ sudo luarocks install --server=http://luarocks.org/dev gifine

另可直接參照:GitHub Gifine

這裏Gifine說只需在slop和xrectsel之間選擇一個進行安裝,且建議安裝的是 slop ,所以上面我們安轉了 slop。

依賴項xrectsel的安裝方法
Github xrectsel

而xrectsel又依賴libx11,這可以通過安裝libx11-dev來解決。

sudo apt install libx11-dev -y
cd /tmp
git clone https://github.com/lolilolicon/xrectsel.git
cd xrectsel
sudo ./bootstrap
sudo ./configure && sudo make && sudo checkinstall
# 然後輸入一些信息,(必須輸入版本號才能生成xrectsel的deb安裝包)
sudo dpkg -i xrectsel-***.deb

Gifine使用說明

使用技巧:錄製前先將要錄製的界面縮小,幀率設置爲4,錄製後刪除效果不佳的幀;這樣會大大減小最後生成的gif的大小。

錄製前:
打開Gifine後,你可以進行兩種操作:錄製視頻幀或者加載視頻幀。

設置幀率"Framerate"爲5或10

錄製後:
錄製視頻幀後,可以進行裁剪,可以設置幀延遲、幀率以及循環次數的選項。

  • Trim left of : 剪切掉左側的幀(每一幀,對應一張圖片)
  • Trim right of: 剪切掉右側的幀
  • Delete frame:刪除當前幀
  • Halve frame: 將幀的數量減半(刪除一半的圖片)
  • Reset cuts:恢復所有裁剪的圖片
  • Delay:延時。一般設置爲8或9,延時太小圖片變化的太快,看不清楚。

技巧: 在gif的開頭和結尾不要切換的太快,保留一定圖片,有助於提升gif的表達效果。

錄製的視頻幀不會自動清除,它們保存在/tmp/gifine_**文件夾下,你還可以重新加載;在初始界面選擇"Load directory"加載目錄來加載。

補充

在GitHub上找到的幾個shell工具

都依賴於ffmpeg; makes creating high-quality gifs from video files

gifgen

<https://github.com/lukechilds/gifgen&gt;

make-gif
<https://github.com/shmibs/make-gif&gt;

使用google的guetzli壓縮圖片

google/guetzli: Perceptual JPEG encoder

請注意,Guetzli旨在用於高品質圖像。您應該始終傾向於提供未壓縮的圖像(例如尚未使用任何JPEG編碼器壓縮的圖像,包括Guetzli)。

參考

來自於我的簡書:faner - 簡書

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章