web-dev-qa-db-ja.com

ビデオから(ffmpegによって)正確に毎分(または秒)でフレーム(画像形式)を抽出します

動機:フレームを探してから、ビデオから高品質で正確な時間のスクリーンショット(画像)を撮りたいと思います。

ビデオの長さは00:48:43.71と23.98 fpsです(24 fpsだと思いますよね?)。


このウェブページからの参照: ビデオのX秒ごとにサムネイル画像を作成する

1時間ごと、1分ごと、1秒ごとにフレームを取得するコマンドをいくつか作成しました。

画像を削除した後、スクリーンショットは実際にはhalf時間、half分、およびhalf秒から取得されます。あなたはすぐに理解するでしょう。

たとえば、毎分フレームを取得するコマンドは、実際にはフレームを抽出しています分で、つまり00:00:30、00:01:30、00:02: 30など。そのため、次のようにファイル名に名前を付けます。

ffmpeg -i "video.mp4" -start_number 0 -vf fps=1/60 "B 00-%02d-30.000.png"

(「B」プレフィックスを追加すると、さまざまなコマンドによる上書きを防ぐことができます。)

たとえば、00:03:00から00:04:00まで毎秒フレームを取得するには、次のように表彰されます。

ffmpeg -i "video.mp4" -start_number 0 -vf fps=1 -ss 00:03:00 -to 00:04:00 "C 00-03-%02d.500.png"

それらを確認するために、00:03:29から00:03:31までのすべてのフレームを抽出できます。

ffmpeg -copyts -ss 00:03:29 -i "video.mp4" -start_number 0 -to 00:03:31 "D 00-03-29.%03d.png"

次の画像ファイルが同一であることを確認する場合があります。

D 00:03:29.012.pngC 00:03:29.500.pngと同じです。

D 00:03:29.024.pngB 00:03:30.000.pngと同じです。

D 00:03:29.036.pngC 00:03:30.500.pngと同じです。


これらは今朝の試行錯誤からの私の発見です。ここに私の質問があります:

例として「正確に毎分フレームを抽出する」を取り上げましょう。フレーム00:00:00.000、00:00:01.000、00:00:02.000などを取得するコマンドはどのように取得できますか?

今朝ffmpegのことを聞いたばかりです。 -copytsが何を意味するのか( docs を読んだ後)、いつ-ss position-iの前に置く必要があるのか​​、いつ出力に置くのかはまだわかりません。部。ですから、間違ったコマンドを使用している場合は修正してくださいしてください。

3
midnite

Fpsフィルターは、入力fpsに基づいて出力fpsに一致するように、フレームをスマートにドロップ/複製するように設計されています。 1分ごとに1フレームを出力するように要求すると、00:00-01:00ウィンドウの中央で1つのフレームが選択され、他のすべてのフレームがドロップされます。したがって、00:30、01:30にフレームが取得されるのはなぜですか。等..

これを行うbat/bashスクリプトを作成することを検討しましたか?

for i in 0..50
   ffmpeg -ss %i:oo -i input.mp4 -vframes 1 out-%i.png

00:30、01:30 [..]ではなく01:00、02:00 [..]にスクリーンショットを取得したい場合は、次のこともできます。

ffmpeg -ss 00:30 -i input.mp4 -start_number 0 -vf fps=1/60 "B 00-%02d-00.000.png"
3
Ely