高效影音處理:用 FFmpeg 輕鬆轉換、合併及提取影片

高效影音處理:用 FFmpeg 輕鬆轉換、合併及提取影片

目錄

FFmpeg 是一款功能強大的開源影音處理工具,廣泛用於影片格式轉換、擷取影片中的聲音檔、添加字幕、擷取特定片段,以及進行批次處理等。考慮到其多功能性,我將經常使用的指令和用法記錄下來,以便於日後查詢和使用。

安裝 FFmpeg

可以到官方網站 下載安裝檔,或是使用下列指令安裝:

Windows

使用 Chocolatey 安裝: (還不知道怎麼安裝 / 使用 Chocolatey 的可以參考這篇 )

choco install -y ffmpeg

MacOS

使用 Homebrew 安裝:

brew install ffmpeg

FFmpeg 的基本使用

  • 影片格式轉換

    將 .mkv 轉換成 .mp4,副檔名可以換成不同的檔案格式

    ffmpeg -i "input.mkv" "output.mp4"
    
    • 批次處理

      可以批次處理資料夾內的影片檔案,例如將資料夾內的 .mkv 檔案轉換成 .mp4 格式。

      for /r %A in (*.mkv) do ffmpeg -i "%~nA.mkv" "%~nA.mp4"
      

      可以將 do 後方的 ffmpeg -i "%~nA.mkv" "%~nA.mp4" 替換成任何想要執行的指令。 其中 /r 為搜尋包含子資料夾的檔案,若只想搜尋當前資料夾可以不寫此指令,%~nA 為顯示不含副檔名的檔名,例如 input.mkv 會顯示成 input

      可以先加入 echo 來確認指令是否正確,例如:

      for /r %A in (*.mkv) do @echo ffmpeg -i "%~nA.mkv" "%~nA.mp4"
      
  • 擷取影片聲音檔

    ffmpeg -i "input.mp4" -vn -acodec libmp3lame -q:a 0 "output.mp3"
    
    for /r %A in (*.mp4) do @echo ffmpeg -i "%~nA.mp4" -vn -acodec libmp3lame -q:a 0 "%~nA.mp3"
    
  • 添加字幕檔

    # 內封字幕檔,需要撥放器支援解讀,但是可以隨時提取字幕資料出來。
    ffmpeg -i "input.mkv" -i "input-subtitle.srt" "output.mp4"
    
    # 內嵌字幕檔,將字幕資料像圖案一樣疊在影片上,形成新的影片。因此不需要撥放器支援字幕解讀,反之因為字幕已經變成了圖片,因此無法提取。
    ffmpeg -i "input.mkv" -vf "subtitles='input-subtitle.srt'" "output.mp4"
    
    for /r %A in (*.mkv) do @echo ffmpeg -i "%~nA.mkv" -i "&~nA.srt" "%~nA.mp4"
    
    for /r %A in (*.mkv) do @echo ffmpeg -i "%~nA.mkv" -vf "subtitles='%~nA.srt'" "%~nA.mp4"
    
  • 擷取片段

    將聲音或影片擷取出來,可以指定開始時間點及持續時間。使用 -ss hh:mm:ss 指定開始時間點,-t hh:mm:ss 指定持續時間。 可以將 .mp4 替換成任何影片副檔名或是聲音副檔名 e.g. .mp3

    ffmpeg -i "input.mp4" -ss hh:mm:ss -t hh:mm:ss "output.mp4"
    
  • 擷取每一幀的畫面

    將影片中每一幀的畫面輸出成圖片,可以指定輸出的圖片格式,例如 .bmp.png.jpg.webp 等等。

    ffmpeg -i "input.mp4" "output-%d.bmp"
    
  • 合併影片

    # 產生要合併的影片名稱列表文件
    (for %i in (*.mp4) do @echo file '%i') > merge.txt
    # 將文件中的影片做合併
    ffmpeg -f concat -safe 0 -i merge.txt -c copy output.mp4
    
  • 將圖片轉成 Webp 格式

    Webp 是一種 Google 開發的圖片格式,可以將圖片壓縮成較小的檔案,並且保持高品質的圖片。

    ffmpeg -i "input.png" -compression_level 6 -lossless 1 "output.webp"
    
    for /r %A in (*.png *.jpg) do @echo ffmpeg -i "%A" -compression_level 6 -lossless 1 "%~dpnA.webp"
    
  • 輸出成 Animated WebP

    這是一種支援動畫的圖片格式,可以將影片轉換成 Animated WebP,並且可以指定轉換後的動畫播放次數、壓縮級別、品質等等。

    下列指令將 input.mp4 轉換成帧率為 20 帧每秒,循環播放,預設渲染預設效果,無損的 output.webp 檔案:

    ffmpeg -i input.mp4 -vcodec libwebp -filter:v fps=fps=20 -lossless 1 -loop 0 -preset default -an -vsync 0 output.webp
    
    for /r %A in (*.mp4) do @echo ffmpeg -i "%~nA.mp4" -vcodec libwebp -filter:v fps=fps=20 -lossless 1 -loop 0 -preset default -an -vsync 0 "%~nA.webp"
    

    若希望轉出的 output.webp 動畫只播放一次,有損,壓縮級別為 3(0-6,預設為 4,越高效果越好),品質為 70(0-100,預設為 75,越高效果越好),渲染為圖片,可使用以下指令:

    ffmpeg -i input.mp4 -vcodec libwebp -filter:v fps=fps=20 -lossless 0 -compression_level 3 -q:v 70 -loop 1 -preset picture -an -vsync 0 output.webp
    
    for /r %A in (*.mp4) do @echo ffmpeg -i "%~nA.mp4" -vcodec libwebp -filter:v fps=fps=20 -lossless 0 -compression_level 3 -q:v 70 -loop 1 -preset picture -an -vsync 0 "%~nA.webp"
    

其他參考資料

comments powered by Disqus

相關文章

羅技 MX Master 2S 無線人體工學滑鼠:終極使用評價

羅技 MX Master 2S 無線人體工學滑鼠:終極使用評價

今天我要帶大家認識一款在高端滑鼠市場上深受喜愛的產品。雖然它不是羅技的最新力作,但它卻是我用過的最愛,也是最好用的滑鼠之一。那就是羅技的 MX Master

閱讀更多
使用 Visual Studio Code 跨平台 C/C++ 開發環境全攻略

使用 Visual Studio Code 跨平台 C/C++ 開發環境全攻略

幾年前曾經使用 Visual Studio Code 在 Windows 上開發 C/C++,曾寫了一篇文章 記錄過程,但是當時只有在 Windows 上開發,最近又有需求要撰寫一些 C/C++ 專案,並且這次會在 macOS 和 Linux 上

閱讀更多
如何在 Hugo 網站中加入 LikeCoin 讚賞鍵提升創作收入

如何在 Hugo 網站中加入 LikeCoin 讚賞鍵提升創作收入

因為我本身是 LikeCoin 支持者,也是推崇文章開源但內容有價的創作者。 因此希望即便從 WordPress 轉移至 Hugo ,依然能夠使用 LikeCoin 作為連結我與讀者間的橋梁。 本文以 hugo v0.114.1 搭配 LoveIt

閱讀更多