ffmpeg常用功能備忘

下載 ffmpeg:https://www.gyan.dev/ffmpeg/builds/

以下範例使用版本:version: 9.0.1

安裝方法:

  • 把解壓後的ffmpeg目錄,貼到C:\Program Files中,複製包含ffmpeg.exe的資料夾路徑,例如:C:\Program Files\ffmpeg\bin。 接著,設定\系統\系統資訊\進階系統設定,進入「系統內容」視窗後,點擊「環境變數」鈕扣。 在系統變數找到「path」,點選「編輯\新建」,把之前複製的bin路徑貼上,最好把它移到最上方,然後點選「確定」來儲存設定。
  • 在cmd中,用ffmpeg -version來確認安裝成功,用where ffmpeg來確定安裝位置。

使用方法:

  • 如已安裝,直接在cmd中運行指令
  • 如未安裝,只是下載解壓:
    • 把圖片、音樂、視頻等要處理的檔案和 ffmpeg.exe 、ffprobe.exe 放在同一個資料夾
    • 在該資料夾按住 Shift + 右鍵 → 選擇「在此處開啟PowerShell視窗」或「命令提示字元」
    • 輸入指令(把檔名改成你的)
  • 基本語法結構:
    • 官方說明:「ffmpeg -h
    • FFmpeg 指令列的基本格式為:ffmpeg [全域參數] {[輸入檔案參數] -i 輸入檔案位址}… {[輸出檔案參數] 輸出檔案位址}…
    • 全域參數會影響整個程式執行。例如「-loglevel」會設定日誌等級;想看即時進度可以加「-progress」 或直接看預設輸出;「\」 換行符連接多行
    • 輸入檔案參數跟隨「-i」來指定輸入來源屬性,例如「-ss」來設定輸入檔起始時間;
    • 輸出檔參數決定輸出結果,例如 「-c:v」 指定視訊轉碼器,「-b:v」 控制視頻位元速率。加「-c copy 」可以不重新編碼,速度極快、無損。加「-y」 可以直接覆蓋輸出檔。
    • 舉個例子:將一個 MP4 視訊轉換為 AVI 格式,同時降低視頻碼率,命令如下:
      ffmpeg -i input.mp4 -b:v 500k -c:v libx264 output.avi
      • 此命令中,「-i input.mp4」 指定輸入檔,「-b:v 500k」 把視頻位元速率設為 500k,「-c:v libx264」 選用 libx264 編碼器進行視頻編碼,最終輸出為 output.avi。
    • 多行書寫:當命令參數眾多時,為增強可讀性,可寫成多行形式:
      ffmpeg \-y \-c:a libfdk_aac -c:v libx264 \-i input.mp4 \-c:v libvpx-vp9 -c:a libvorbis \output.webm
      • 這裡,「\」分行符號連接多行,全域參數 「-y」 居首,接著是輸入檔參數,最後是輸出檔參數與輸出檔案名,邏輯清晰,便於理解與修改。
  • 高頻參數詳解:
    • 「-c」參數是編碼器「指揮官」,如「-c:v」聚焦視頻編碼,「-c:a」掌管音訊編碼,「-c copy」則開啟「極速通道」,直接複製流而不重新編碼,能在格式轉換時保留原始品質並大幅提速,像無損轉換 MKV 到 MP4 時就常用到。
    • 「-i」是輸入檔 「指引牌」,精準定位輸入源,若處理多個輸入檔,多次使用 「-i」可依次指定。
    • 「-preset」是視頻品質 「調控器」,從「ultrafast」到「veryslow」,速度與品質逆向而行,追求快速出片可選「ultrafast」,看重畫質精細就得耐住性子選 「veryslow」。

1. 格式轉換

ffmpeg -i 輸入.mp4 輸出.mkv

ffmpeg -i 輸入.mov -c:v libx264 -c:a aac 輸出.mp4

ffmpeg -i 輸入.qsv -c:v libx264 -c:a aac -crf 23 輸出.mp4

這裡 「-c:v libx264」 指定視訊轉碼器為 libx264,它廣泛用於高品質 H.264 視頻編碼;
「-c:a aac」 將音訊編碼器設為 AAC,在音訊壓縮與品質平衡上表現出色;
「-crf 23」 中的 CRF(Constant Rate Factor)值設定畫面品質,取值 0 – 51,數值越小品質越高,23 是個兼顧品質與檔大小的常用值,如此就能得到畫質不錯且通用性強的 MP4 視頻。

2. 壓縮影片(減小體積)

常用高品質壓縮

ffmpeg -i 輸入.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k 輸出.mp4

更小體積(畫質稍降)

ffmpeg -i 輸入.mp4 -c:v libx264 -crf 28 -preset slow 輸出.mp4

(CRF 數值越大體積越小,18~28 是常用範圍)

3. 裁剪(剪片段)

從第 10 秒剪到第 30

ffmpeg -i 輸入.mp4 -ss 00:00:10 -to 00:00:30 -c copy 輸出.mp4

或指定時長(從第 10 秒開始剪 20 秒)

ffmpeg -i 輸入.mp4 -ss 10 -t 20 -c copy 輸出.mp4

「-ss」 指定開始時間,「-to」 設定結束時間,「-t」設定時長,「-c copy」 則是無損複製流,保證剪輯快速且畫質無損。

4. 提取音訊

ffmpeg -i 影片.mp4 -vn -c:a copy 音訊.m4a

或轉成 MP3

ffmpeg -i 影片.mp4 -vn -c:a libmp3lame -b:a 192k 音訊.mp3

「-vn」 表示忽略視頻流,僅處理音訊,「-c:a libmp3lame」 選用流行的 LAME MP3 編碼器保障音訊品質。

5. 合併多個影片(無重編碼,最快)

先建立一個文字檔 list.txt:

file '影片1.mp4'
file '影片2.mp4'
file '影片3.mp4'

然後執行:

ffmpeg -f concat -safe 0 -i list.txt -c copy 合併.mp4

6. 調整解析度 / 縮放 / 部分裁切

縮放到 1280×720

ffmpeg -i 輸入.mp4 -vf scale=1280:720 輸出.mp4

保持比例,寬度改成 1280

ffmpeg -i 輸入.mp4 -vf scale=1280:-2 輸出.mp4

寬度 1280,高度按比例自動計算,並強制為偶數「-2」(奇數「-1」可能報錯)
其他常見寫法:
高度固定 720,寬度自動(保持比例且為偶數) scale=-2:720
寬度最大不超過 1280,高度最大不超過 720(保持比例) scale=’min(1280,iw)’:-2

從 「source.mp4」 中裁剪出左上角 320×240 區域 (Crop 濾鏡可裁剪畫面):

ffmpeg -i 輸入.mp4 -vf “crop=320:240:0:0” 輸出.mp4

添加畫中畫效果

ffmpeg -i background_video.mp4 -i overlay_video.mp4 -filter_complex “[1:v]scale=iw/2:ih/2[ovrl];[0:v][ovrl]overlay=W-w: H-h” pip_video.mp4

以 「background_video.mp4」 為背景,「overlay_video.mp4」 為小窗視頻,置於右下角

7. 加速 / 減速

2 倍速

ffmpeg -i 輸入.mp4 -filter:v "setpts=0.5*PTS" -filter:a "atempo=2.0" 輸出.mp4

0.5 倍速(慢放)

ffmpeg -i 輸入.mp4 -filter:v "setpts=2.0*PTS" -filter:a "atempo=0.5" 輸出.mp4

8. 旋轉 / 翻轉

順時針轉 90

ffmpeg -i 輸入.mp4 -vf "transpose=1" 輸出.mp4

順時針轉 180

ffmpeg -i 輸入.mp4 -vf "transpose=1,transpose=1" 輸出.mp4

順時針轉 270 度(等同逆時針轉 90 度)

ffmpeg -i 輸入.mp4 -vf "transpose=2" 輸出.mp4

水平翻轉

ffmpeg -i 輸入.mp4 -vf hflip 輸出.mp4

垂直翻轉(上下顛倒)

ffmpeg -i 輸入.mp4 -vf vflip 輸出.mp4

transpose數值表示的效果說明:

0:逆時針轉 90 度 + 垂直翻轉
1:順時針轉 90 度
2:逆時針轉 90 度
3:順時針轉 90 度 + 垂直翻轉

如果影片格式支援(如 MP4),只想改變播放時的方向而不想重新編碼影片(節省時間且不損失畫質),可以使用 -metadata:s:v rotate 參數:

設定影片播放時順時針旋轉 180

ffmpeg -i 輸入.mp4 -c copy -metadata:s:v rotate="180" 輸出.mp4

9. 加字幕(硬字幕)

ffmpeg -i 影片.mp4 -vf "subtitles=字幕.srt" 輸出.mp4

10. 提取影片畫面(截圖 / 製作 GIF)

每秒截一張圖

ffmpeg -i 影片.mp4 -vf fps=1 圖片_%04d.png

製作成 GIF(從第 5 秒開始,時長 3 秒)

ffmpeg -ss 5 -t 3 -i 影片.mp4 -vf "fps=10,scale=480:-1" 輸出.gif

11. 調整音量 / 音訊處理

音量加大 1.5

ffmpeg -i 輸入.mp4 -af "volume=1.5" 輸出.mp4
ffmpeg -i 輸入.mp3 -af "volume=1.5" 輸出.mp3

音訊標準化(自動調整響度)

ffmpeg -i 輸入.mp4 -af loudnorm 輸出.mp4

混音

ffmpeg -i 輸入音樂1.mp3 -i 輸入音樂2.mp3 -filter_complex amix=inputs=2:duration=first:dropout_transition=3 輸出混音音樂.mp3

這裡通過 amix 濾鏡精准控制混音參數,實現完美音訊融合。

12. 圖片序列轉影片

ffmpeg -framerate 30 -i 圖片_%04d.png -c:v libx264 -pix_fmt yuv420p 輸出.mp4

13. 去除音訊(只留畫面)

ffmpeg -i 輸入.mp4 -an -c:v copy 無聲.mp4

14.  快速查看影片資訊

ffprobe -i 影片.mp4

或更詳細

ffprobe -v quiet -print_format json -show_format -show_streams 影片.mp4

15. 合併圖片和音樂為視頻:

ffmpeg -loop 1 -framerate 30 -i 圖片.jpg -i 音樂.mp3 -c:v libx264 -tune stillimage -c:a aac -b:a 192k -pix_fmt yuv420p -shortest -max_interleave_delta 100M -movflags +faststart 輸出.mp4

強制指定時長(更精準),

先查音樂精確時長:

ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 音樂.mp3

假設顯示 64.162083,-t就改成:

ffmpeg -loop 1 -framerate 30 -i 圖片.jpg -i 音樂.mp3 -t 64.162083 -c:v libx264 -tune stillimage -c:a aac -b:a 192k -pix_fmt yuv420p -movflags +faststart 輸出.mp4


已發佈

分類:

,

作者:

標籤: