私は 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 秒間の画像を抽出するなど)。タイムスタンプと期間を置き換え、そのたびに出力画像を移動することで、これを手動で実行できますが、理想的には、タイムスタンプと期間を一度に入力し、出力画像を上書きしないようにします。これを行う方法はありますか? タイムスタンプ/期間を含む外部ファイルを使用する方法はありますか?
私はこの分野は初心者なので、bash ではなく ffmpeg のみで実行することを好みます。
答え1
ffmpeg で簡単に実行する方法はありません。セグメント muxer はありますが、セグメントの継続時間を設定することはできません。
このように実行しても問題はありません。これはかなり簡単だと思います。開始点と期間のコンマ区切りリストを含むテキスト ファイルを作成するだけです。
$ 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、…) で始まる出力ファイルが作成されます。