FFmpegは、ビデオを表すサムネイルとして使用できるビデオから画像をキャプチャできます。最も一般的な方法は、FFmpeg Wikiに記録されています。
しかし、私はある間隔でランダムなフレームを選びたくありません。FFmpegでフィルターを使用してシーンの変更をキャプチャするいくつかのオプションを見つけました。
フィルタthumbnail
は、ビデオ内の最も代表的なフレームを見つけようとします。
ffmpeg -i input.mp4 -vf "thumbnail,scale=640:360" -frames:v 1 thumb.png
また、次のコマンドは、以前と比較して40%を超える変更があるフレームのみを選択し(おそらくシーンの変更も同様です)、5つのPNGのシーケンスを生成します。
ffmpeg -i input.mp4 -vf "select=gt(scene\,0.4),scale=640:360" -frames:v 5 thumb%03d.png
Fabio Sonnatiへの上記コマンドの情報クレジット。2番目の画像は、n個の画像を取得して最良のものを選択できるため、より良いように見えました。試したところ、同じ画像が5回生成されました。
さらに調査した結果、次のことがわかりました。
ffmpeg -i input.mp4 -vf "select=gt(scene\,0.5)" -frames:v 5 -vsync vfr out%02d.png
-vsync vfr
異なる画像を取得します。これは常にビデオの最初のフレームを常に選択します。ほとんどの場合、最初のフレームはクレジット/ロゴであり、意味がないため-ss
、ビデオの最初の3秒を破棄するために3 を追加しました。
私の最後のコマンドは次のようになります。
ffmpeg -ss 3 -i input.mp4 -vf "select=gt(scene\,0.5)" -frames:v 5 -vsync vfr out%02d.jpg
これは私ができる最善でした。私は5つのビデオしか選んでいないので、それらはすべてビデオの最初からのものであり、ビデオの後半で発生する重要なシーンを見逃す可能性があることに気づきました
他のより良いオプションのためにあなたの脳を選びたいです。
libopenjpeg
..でコンパイルしましたが、それが違いを生むかどうかわかりません。