高效影音處理:用 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

相關文章

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

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

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

閱讀更多
如何使用 pkg 將 Node.js 專案打包成可攜式執行檔

如何使用 pkg 將 Node.js 專案打包成可攜式執行檔

為了在沒有 Node.js 的環境中執行專案,我們可以使用 pkg 將專案打包成可攜式執行檔。 雖然 pkg 已經停止維護了,但是它仍然是一個很好用的工具,然而使用上有不少需

閱讀更多
ImageMagick:圖片處理的神奇工具

ImageMagick:圖片處理的神奇工具

ImageMagick 是一款開源的圖片處理工具,提供了豐富的功能來處理圖片大小、格式和色彩等。此外,它還配備了命令列工具,方便用戶進行批次處理圖片。本篇文章將記

閱讀更多