ビデオのXX秒ごとに画像を作成する

ビデオのXX秒ごとに画像を作成する

スクリーンショット:フィルムストリップ

私は試したffmpeg -i video.mkv -vf fps=1 out%d.png

しかし、それは 1 つずつ画像を生成します。すべてのサムネイルを 1 つの画像にする必要があります。上記のスクリーンショットのように。

答え1

ここに画像の説明を入力してください

ffmpeg -i input -filter_complex \
"select='not(mod(n,30))',scale=120:-1,tile=layout=3x2" \
-vframes 1 -q:v 2 output.jpg
  • 選択する30秒ごとに1フレーム
  • 規模各フレームを小さいサイズに変更します(タイルの後に拡大縮小することもできます)
  • タイル各フレームを 1 つの画像に分割します。デフォルトのグリッド サイズは 6x5 なので、layout表示する画像の数に応じて調整する必要がある場合があります。

入力期間と形式によっては、処理に時間がかかる場合があります。

答え2

次のようなものを使うことができます

ffmpeg -i video.mkv -filter:v "select=not(mod(n\,10)),setpts=N/((25)*TB)" -qscale:v 2 frame%03d.jpg
  • どのフレームを取得するかを制御selectします(この場合は10フレームのうち1フ​​レーム)
  • フレームレートを制御setpsし、ソース(25PALまたは30000/1001NTSCビデオ)によって異なります。
  • qscale出力フレームの品質(量子化スケール)を2(最高)から31(最低)まで制御します。

上の編集に気づきました。これで使用したいフレームが見つかったら、出発点としては問題ないはずです。

次に、次のようなツールを使用して画像を1つのアセットにまとめる必要があります。イメージマジック

montage -background "transparent" -depth 8 -type TrueColorMatte frame??.jpg \
    -geometry 50x50 -tile 10x10 -matte -transparent "transparent" \
    -type TrueColorMatte -depth 8 allframes.jpg

関連情報