web-dev-qa-db-ja.com

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

スクリーンショット: FilmStrip

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

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

5
Usama Javed

enter image description here

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フレーム
  • scale 各フレームを小さいサイズに(または、タイルの後に拡大縮小することもできます)
  • タイル 各フレームを1つの画像に。デフォルトのグリッドサイズは6x5であるため、表示する画像の数に応じて、layoutで調整する必要がある場合があります。

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

5
llogan

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

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/1001 for NTSCビデオ
  • qscaleは、出力フレームの品質(量子化スケール)を2(最高)から31(最低)まで制御します。

上記の編集に気づきました。それで、使用したいフレームが開始点として問題ないはずです

次に、 ImageMagick のようなツールを使用して、画像を1つのアセットにつなぎ合わせる必要があります。

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