2016-07-19 14 views
1

私がやりたいことは、ある時点(例えば、20秒)にビデオフレームを取得することです。 私はこのような何か行うことができます知っている - ビデオを巻き戻して、それを一時停止:のみ提供された時間内にビデオフレームを取得するQt

QMediaPlayer* player = new QMediaPlayer; 
... 
player->play(); 
player->setPosition(20000); 
player->pause(); 

をしかし、いくつかのよりエレガントな解決策がある(私はビデオ全体を必要としないので、これは私にはハックのように思えるが、ある時点のフレーム)?

+0

を保存し、この[リンク](http://stackoverflow.com/questions/30800772/あなたは
キャプチャしたい位置を選択how-to-grab-video-frames-in-qt/30863191#30863191)が役に立ちます。 – Jeet

+1

別の[link2](http://stackoverflow.com/questions/37724602/how-to-save-a-frame-using-qmediaplayer)が役立ちます。 – Jeet

答えて

3

以下の手順は、ビデオファイルからフレームをキャプチャするのに役立ちます。

プロジェクトレベル

  1. QT + =マルチメディア
    コードレベル
  2. が開始QMediaplayerオブジェクト(QMediaPlayer(QObjectを親、QMediaPlayer :: VideoSurface)に
  3. セットQMediaplayer.setVideoOutput(サブクラスQAbstractVideoSurfaceのサブクラス
  4. QAbstractVideoSurfaceのサブクラスは、supportedPixelFormats、isFor matSupportedは、我々が各フレーム
    5.Load QMediaplayer
    6.setMute =真(オーディオ)を使用してビデオファイル
    7の画像バッファを取得することができ
    4.From 方法、開始します。 QMediaPlayerオブジェクトに必要な位置をミリ秒単位で設定します。
    8.再生方法を開始します。
    9. 現在メソッドは、受信したデータバッファをQImageに変換し、必要に応じてQPixmapに変換します。
    10.ピクチャマップを取得した後、ウィジェットでロードする(例:QLabel)
  5. 他のフレームをキャプチャする必要がある場合は、すぐにビデオファイルを一時停止します。 pause())。これが完了したら、

QMediaplayer次いでQAbstractVideoSurfaceのサブクラスのstopメソッドをコールし、上記のサンプルアプリケーションがhere見出すことができる前記QMediaPlayerオブジェクト

  • にサブクラスのオブジェクト(QAbstractVideoSurface)からの信号スロットを使用して行うことができます

    (アプリケーションスクリーンショット)

    enter image description here

    オープンビデオファイル:ビデオ・フィルを参照して選択電子
    スライダー:QLabel
    保存した画像やビューをキャプチャ:キャプチャした画像

  • 関連する問題