ffmpeg 常用指令

📢 本文由 gemini-3-flash-preview 翻譯

說到影音處理就不得不提到 ffmpeg 這個開源工具。雖然自己之前就已經開始使用,但因為零零散散的筆記與需求並不多,加上偶爾才使用一次,所以一直沒想過要寫這篇文章。這次我想著把儲存已久的內容彙整一下(雖然很多都沒記,只好自己補充囉)。

影片轉檔

1
ffmpeg -i video.mp4 video.avi

影片轉音訊

1
ffmpeg -i input.mp4 -vn output.mp3
  • -vn:表示我們已在輸出檔案中停用影像錄製。

影片重新編碼

有時候影片的編碼格式損壞,在部分設備上播放會較為卡頓,這時候就需要重新編碼。

1
ffmpeg -i "video.mp4" -c:v libx264 -c:a aac -preset fast "video_re.mp4"

這會使用 x264 重新編碼影片,並使用 aac 重新編碼音訊。

轉換為無聲 webm 影片

1
ffmpeg -i input.mp4 -an -c:v libvpx-vp9 -crf 30 -b:v 0 output.webm

其中:

  • -an:關鍵參數,用於移除聲音。
  • -c:v libvpx-vp9:指定影片編碼格式(vp9 是較為通用的格式,如果追求極速轉換可以使用 libvpx)。
  • -crf 30:控制品質,通常在 0-63 之間,數字越小,畫質越好,檔案越大。
  • -b:v 0:使用 vp9 編碼時,通常將位元率設為 0,讓 -crf 參數來決定畫質。

轉換為 GIF

使用 -loop 0 參數使其循環播放。

1
ffmpeg -i input.mp4 -loop 0 output.gif

如果需要背景透明的話,分為兩種情況:

一種是原影片本身就有透明通道(如 ProRes 4444.mov),直接轉換可能會產生雜訊,一般需要使用調色盤(Palette)濾鏡來確保透明色被正確對應。

1
ffmpeg -i input.mov -vf "fps=15,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" -loop 0 output.gif

參數詳情為:

  • fps=15:設定影格率,不寫則使用原影片影格率。

  • split[s0][s1]:將影片分為兩路,這裡 s0 用來生成調色盤,s1 用來輸出影像。

  • [s0]palettegen[p]:對 s0 流生成專門的 256 色調色盤,並命名為 p,預設情況下 palettegen 會自動保留透明顏色。

  • [s1][p]paletteuse:將生成的調色盤 p 套用到影片流 s1 上。

二是如果原影片是純色背景,可以使用 colorkey 濾鏡進行去背。

1
ffmpeg -i input.mp4 -vf "fps=15,colorkey=0x00FF00:0.1:0.1,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" -loop 0 output.gif

對於 colorkey=0x00FF00:0.1:0.1 具體為:

  • 0x00FF00:需要去除的顏色,這裡是以純綠色為例,黑色為 0x000000
  • 第一個 0.1:相似度(Similarity),0.01-1.0 表示匹配程度從精準匹配到模糊匹配,一般設定在 0.1-0.3。
  • 第二個 0.1:混合度(Blend),用於柔化邊緣。

合併影音

首先確認音訊編碼是否相容(例如 AAC 編碼)。

1
ffprobe audio.mp3

如果相容,直接複製合併即可:

1
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a copy output.mp4

如果音訊不相容,則需要轉換音訊格式:

1
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac output.mp4

圖片格式

ffmpeg 甚至可以用於轉換圖片格式,比較簡單的作法是直接執行:

1
ffmpeg -i input.png output.jpg

這對於臨時更換格式非常實用。

This post is licensed under CC BY-NC-SA 4.0 by the author.