web-dev-qa-db-ja.com

VLCまたはFFmpegを使用してビデオの「10フレームごとに1つ」を抽出する

科学的な目的で、ビデオの「10フレームごとに正確に1フレーム」のフレームを抽出しようとしています(つまり、1を抽出し、9のままにしてから繰り返します)。ビデオは105フレーム、3.5秒、29.97fps(h.264、.mov、Nikon D3100により作成)です。

ここにアップロード があります。

VLC

以下のコマンドは10フレームを生成しますが、6つの画像しか生成しません。さまざまなシーン比率を試してみましたが、どちらも正しい数のフレームを生成しませんでした。

vlc 1.mov --video-filter=scene --vout=dummy --scene-ratio=10 --scene-prefix=img- --scene-path=. vlc://quit

誰かが私に何が問題なのか教えてくれませんか?

FFmpeg

FFmpegには、私の目的にぴったり合ったコマンドがないようです。以下のコマンドは、毎秒3フレームを抽出しますが、FPSは正確に30ではなく(2.97)、正確な結果を生成しません。

さらに、FFmpegでさえ、このコマンドでさえ正しいフレーム数を与えません。 3.5秒のビデオで最大10フレームを期待していますが、得られるのは12フレームです。

ffmpeg -i 1.mov -y -an -sameq  -r 3 -f image2 -vcodec mjpeg %03d.jpg 

どうすれば自分のやりたいことを達成できますか?

12
wmac

10フレームごとに1フレームを選択

これを行うには、selectffmpeg ビデオフィルターを使用できます。

ffmpeg -i input.mov -vf "select=not(mod(n\,10))" -vsync vfr -q:v 2 img_%03d.jpg
  • JPG出力の場合、-q:vを使用して品質を変えることができます。有効範囲は2(最高品質)から31(最低品質)です。代わりにPNGに出力する場合は、このオプションは必要ありません。

  • これにより、img_001.jpgimg_002.jpgimg_003.jpgなどが出力されます。

21
llogan

あなたの質問で最も重要な点は、ビデオが30ではなく29.97フレーム/秒を使用するという事実です。厄介なNTSC。

とにかく、すべてのフレームを抽出して、不要なものを削除するのが最も簡単だと思います:

ffmpeg -i 1.mov -y -f image2 -c:v mjpeg %03d.jpg

次に、不要なものを削除します。 10フレームごとに1.jpgで終わるため、他のすべてのフレームを取得できます…

find . -maxdepth 1 -not -iname "*1.jpg"

…そして、これらが削除したいものであることを確認したら、次のようにします。

find . -maxdepth 1 -not -iname "*1.jpg" -exec rm '{}' \;

mencoderを使用できる場合、framestepオプションを試すことができます。説明は ドキュメント内 で、framestep=10のようにあなたの場合。個人的にはインストール/試行できませんでした。

4
slhck

最初にビデオを一連の未加工のrgb24またはrgb32画像に変換する場合、元の形式ではまったく画像ではない可能性のある異常なフレームタイプが含まれている可能性があるため、適切な数のフレームを取得できる可能性があります。 ?

オリジナルのレーザーディスクでは、ビデオ全体が1〜100,000以上の個別のフレーム番号を持つ一連の画像で構成されていました。これは、将来の変換や操作のベースラインを確立するための正しい方法です。

業界はこの奇妙な圧縮のアイデアに変更して、費やされた金額を減らし、処理する数値の真の科学的形態を壊しました。

オーディオを完全に失わないように、最初にオーディオをウェーブファイルとして抽出する必要があります。 FFMPEGは、抽出された各画像に識別情報を配置するようです。抽出されたばかりの画像から文字列画像をまとめようとし、同じ拡張子を持つ他のソースからの他の画像を混在させると、ffmpegは、すべての真ん中につながろうとした画像を無視します。

レーザーディスク形式では、フレームレートは、シーケンシャルイメージを提示するレートによって決まり、イメージ自体によって制御されることはありません。

FFMPEGは、あらゆる種類の画像の適切な処理と表示のために、芸術ではなく科学から教訓を得るかもしれません。あるいは、AV業界全体かもしれません。業界では、ハードウェアの機能を改善し、大量のメモリ/ストレージを必要とする生データを使用する必要があります。精度と正確さのために生データに勝るものはありません。

0
Aluetta