Make
an animated GIF from the command line (2)
【前言】
若未看過,請先看前一篇,了解基本設定。
【步驟】
1.
尋找目標。
第一步當然是先看影片,記住欲抽出的時段。本例是
1:12
到
1:15。保險一點,前後各多取
1
秒,即自
1:11
起
6
秒。
2.
抽出圖片。
ffmpeg
-ss 1:11 -i source.mp4 -t 6 images\1%3d.png
-ss:
起點。格式:秒或
hh:mm:ss[.xxx]。
-i:
來源檔名。
-t:
時長。格式:秒或
hh:mm:ss[.xxx]。
1%3d
是檔名模式,1001
起算,1
是為了分類。
註一:此指令順序很重要,-ss
是影片的選項,要在
-i
前;-t
是輸出終止時長,要在輸出檔前。
3.
選圖。
進入
images
資料夾:
a.
計算:每秒圖數(frame
rate) = 總圖數
/
時長。
此例是
144
/ 6 = 24 (frames/sec)。
b.
去除前後不要的圖片。
c.
記住餘圖中,頭尾兩檔名稱。
此例是
1016
和
1121。
4.
編輯圖片。
for
/L %a in (1016,2,1121)
do (
magick
convert
images\%a.png -crop 1080x720+0+0 -resize 30% +repage images\b%a.png
)
(1016,2,1121):
自
1016.png
起,每
2
個圖取
1
個,直到
1121.png。最後面的圖可能會被跳過。
-crop:
裁剪。自左上角
(0,0)
起取寬
1080、高
720。先用繪圖軟體觀察,"小畫家"即可。
-resize:
改變尺寸。
+repage:
重設畫布值。
輸出檔名頭稍加更改以便區別。
前
3
項都是為了減少動圖的檔案尺寸,因為動圖的最大問題就是檔案太大。這大概就是
Facebook
不開放直接貼動圖的原因。
5.
製作動圖。
magick
convert
-delay 2x24 images\b*.png -fuzz 1% -layers OptimizeTransparency
baby.gif
-delay:
間隔。2
是因為每
2
個圖取
1
個;24
是影片速率(frame
rate),即上述每秒圖數。2x24
近似
8x100,故此設定相當於
-delay
8。
-fuzz:
降低色數。1%
內的顏色視為同色。此為減少動圖的檔案尺寸。fuzz
數值愈大,尺寸愈小,但會失真。
-layers:
處理動圖圖層的方式。文長不述,自閱
ImageMagick
選項說明。OptimizeTransparency
會看
fuzz
的設定。
【後語】
1.
本例是先抽出影片中某一片段的所有畫格,然後每
2
個圖取
1
個。如果已確定是要每
2
個圖取
1
個,可以在抽出時直接設定:
ffmpeg
-ss 1:11 -i source.mp4 -r 12 -t 6 images\1%3d.png
-r:
rate,每秒畫格數。24
/ 2 = 12
此法的優點是只取須要的圖,可減短抽取時間。但缺點不少:
a.
必須先知道影片速率(frame
rate)。
b.
必須先知道要每
2
個圖取
1
個。
c.
如果想每
3
個圖取
1
個呢?就必須重新抽取一次。
所以建議:還是先抽出片段中的所有畫格。
2.
不難吧!下一篇敘述製作動圖的一些變化,用的來源圖是前一篇的數字方圖。
【附錄】批次檔的完整內容
ffmpeg
-ss 1:11 -i source.mp4 -t 6 images\1%%3d.png
echo
選圖
pause
for
/L %%a in (1016,2,1121)
do (
magick
convert
images\%%a.png -crop 1080x720+0+0 -resize 30%% +repage
images\b%%a.png
)
magick
convert
-delay 2x24 images\b*.png -fuzz 1%% -layers OptimizeTransparency
baby.gif
vaparQucni_1982 Michelle King https://wakelet.com/wake/eZqxbfn3iBawrC3dSIc9-
回覆刪除despdifnela