9

AVI ファイルとして提供されるビデオ トレーニング コースがあります。ほとんどの画面はスライドとして表示され、マウス ポインターが画面上を移動します。

画面が変わったときにスライドのスクリーンショットを自動的にキャプチャしたいと思います (マウスポインターが動き回ったために画像が少し変化した場合は無視します)。

これをやりたいので、画像を単語またはhtmlドキュメントに貼り付けて、現在スクリーンショットを撮っているので、学習しながらメモを追加できますが、非常に遅くて退屈で、コースは非常に長いです(約24時間の合計プレイ時間)。

私はpythonをよく知っていますが、ビデオファイルから静止画を抽出する方法と、静止画を別の静止画と比較して、どれを保持し、どれを破棄するかを決定する方法について確信が持てません。

誰でもこれを行う方法を提案できますか?

4

3 に答える 3

13

ffmpegのようなツールは、ビデオから画像を抽出するのに適しています。マニュアルから:

 ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg

これにより、ビデオから毎秒 1 ビデオ フレームが抽出されfoo-001.jpegfoo-002.jpeg、 などの名前のファイルに出力されます。画像は、新しい WxH 値に合わせて再スケーリングされます。

それらの違いを比較することは、おそらくPILおよび/またはOpenCVによって行うことができます。

編集:キー フレーム(イントラ フレーム)のみを取得する方がおそらく効率的であることに気付きました。これは、シーンに劇的な変化が発生したときに発生するためです。後で簡単にグーグルすると、次のようになります。

ffmpeg -i foo.avi -vsync 0 -vf select="eq(pict_type\,PICT_TYPE_I)" -s WxH -f image2 foo-%03d.jpeg
于 2012-08-23T21:30:59.487 に答える
5

基本的に必要なのはシーン検出です。framedifferenceanalyzerは、Pythonの概念実証であり、まさにそれを実行し、問題自体について学習するための良い出発点を提供するはずです。

自分で実装する場合、ffmpegはビデオを一連のフレームに変換するための理想的なツールです。純粋なPythonでその部分を実行しようとは思わないでしょう。

フレーム間の差を計算するには、ImageMagick(特に比較ツール)を使用できます。ImageMagickにはいくつかのPythonバインディングがあります。たとえば、PythonMagickmagickwandの2つだけです。

OpenCVを使用して画像分析を行うこともできます。OpenCVは、高性能で高品質のコンピュータービジョンアルゴリズムのライブラリであり、おそらく、このようなことを行うための最も強力なツールの1つです。ただし、コンピュータビジョン/画像処理についてある程度の知識があり、探しているものについてすでに十分な知識があることを前提としています。

于 2012-08-23T21:50:47.727 に答える