今回は動画が入力された際に「動画の中の開始から1秒、2秒、3秒……の位置の画像のみを連番静止画で出力する」というような、動画の全フレームではなく、一定の間隔で限られたフレームのみを連番静止画として出力する方法について確認してみたいと思います。
FFMPEGの実行バイナリファイルの入手に関しましては、もし入手方法がわからないという方がいらっしゃいましたら、以下の記事を参考にしてみてください。
FFMPEGで動画から一定の頻度で連番静止画を出力する方法
以下のコマンドで、入力動画を連番PNG画像に変換できます。今回は、1秒あたり2枚ずつの頻度で画像を出力できるようにしてみました。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ffmpeg -i input.mp4 -r 2 -vcodec png output\output_%06d.png
ポイントは以下の通りです。
- 入力動画を「input.mp4」の位置に指定します
- 「-r 2」を指定することで、画像を出力するフレームレートを指定できます。この場合、1秒あたり2枚の画像を出力できます。例えば「-r 1」なら1秒の間隔で画像を出力できます。
- PNG形式で出力する場合は「-vcodec png」を指定します
- 出力画像のファイルパス及びファイル名を最後に記述します。「output\output_%06d.png」の場合、outputフォルダ内に、0で詰めた6桁の数字の連番静止画として画像が出力されます。すなわち、画像はoutput_000001.png, output_000002.png, output_000003.pngのような名前の順番で出力されます。
- 「output」フォルダがないと正常に出力されない可能性があるので注意してください。
まとめ
今回は、FFMPEGで動画内のフレームを、一定頻度で連番静止画に出力する方法を確認しました。
動画を連番静止画にしたいというケースはあると思いますが、全フレームを出力すると枚数が多すぎるという場合などに有効なので、試してみてください。