動機:フレームを探してから、ビデオから高品質で正確な時間のスクリーンショット(画像)を撮りたいと思います。
ビデオの長さは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.png
はC 00:03:29.500.png
と同じです。
D 00:03:29.024.png
はB 00:03:30.000.png
と同じです。
D 00:03:29.036.png
はC 00:03:30.500.png
と同じです。
これらは今朝の試行錯誤からの私の発見です。ここに私の質問があります:
例として「正確に毎分フレームを抽出する」を取り上げましょう。フレーム00:00:00.000、00:00:01.000、00:00:02.000などを取得するコマンドはどのように取得できますか?
今朝ffmpeg
のことを聞いたばかりです。 -copyts
が何を意味するのか( docs を読んだ後)、いつ-ss position
を-i
の前に置く必要があるのか、いつ出力に置くのかはまだわかりません。部。ですから、間違ったコマンドを使用している場合は修正してくださいしてください。
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"