我正在使用 ffmpeg 從影片中提取靜態圖像。從給定時間開始,在給定持續時間內使用 -ss 和 -t 參數。
ffmpeg -ss 00:10:01 -t 2 -i /Volumes/OO_8/VideoSource.mkv -qscale:v 2 -start_number /Users/Olivier/Pictures/ScreenCaptures/ViewsOfNature-%4d.jpeg
(我先從時間戳記/持續時間開始,以便 ffmpeg 在該點開始解復用。)
但是,我想使用幾個起點(例如,在 00:01:12 中,提取圖像 2 秒;在 00:11:00 分鐘中,提取圖像 4 秒;等等)我可以做手動執行此操作,替換時間戳和持續時間,並每次移動輸出影像,但理想情況下我想一次輸入時間戳和持續時間,而不是覆蓋輸出影像。有沒有辦法做到這一點?也許使用帶有時間戳/持續時間的外部文件?
我對此很陌生,並且更喜歡僅使用 ffmpeg,而不是使用 bash。
答案1
我沒有找到一種方法可以輕鬆地使用 ffmpeg 做到這一點。有一個分段復用器,但您無法設定分段的持續時間。
沒有什麼可以阻止你這樣做,我相信這相當簡單。只需建立一個文字文件,其中包含以逗號分隔的起點和持續時間清單:
$ cat split.txt
00:01:05,5
00:06:10,2
00:08:25,1
然後在 Bash 中:
count=1
while read -r -d ',' start duration; do
ffmpeg -ss "$start" -i input.mp4 -t "$duration" "$count-output-%04d.jpg"
(( count++ ))
done < split.txt
這將建立以唯一編號(1、2、3…)開頭的輸出檔。