FFmpeg 常用指令
目錄
FFmpeg 是一套強大的開源影音處理工具,可以用來做影片格式轉換、擷取影片聲音檔、添加字幕檔、擷取片段、擷取每一幀的畫面、批次處理等等。 本篇記錄下常用的指令,以利未來查詢。
FFmpeg 安裝 #
可以到官方網站 FFmpeg 下載安裝檔,或是透過套件管理工具來安裝。
-
Windows ( Chocolatey)
choco install -y ffmpeg
-
MacOS ( Homebrew)
brew install ffmpeg
常用指令 #
-
影片格式轉換
ffmpeg -i "input.mkv" "output.mp4" # 將 .mkv 轉換成 .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"