2016-07-19 11 views
1

Ich möchte den Videorahmen zu einem bestimmten Zeitpunkt (z. B. 20 Sek.) Abrufen. Ich weiß, dass ich etwas tun könnte - Video zurückspulen und anhalten:Abrufen des Videoframes in der angegebenen Zeit Qt

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

Aber gibt es einige elegantere Lösung (dies wie ein Hack mir scheint, da ich nicht komplette Video brauchen nur aber ein Rahmen irgendwann)?

+0

diese [link] Speichern des aufgenommenen Bildes (http://stackoverflow.com/questions/30800772/ How-to-Grab-Video-Frames-in-qt/30863191 # 30863191) kann Ihnen helfen. – Jeet

+1

ein anderer [link2] (http://stackoverflow.com/questions/37724602/how-to-save-a-frame-using-qmediaplayer) kann Ihnen helfen. – Jeet

Antwort

3

Die folgenden Schritte können Ihnen helfen, einen Frame aus einer Videodatei zu erfassen.

Projektebene

  1. QT + = Multimedia
    Codeebene
  2. Initiieren QMediaplayer Objekt (QMediaPlayer (QObject Eltern, QMediaPlayer :: VideoSurface)
  3. Satz QMediaplayer.setVideoOutput bis (Subclass von QAbstractVideoSurface)
  4. Unterklasse von QAbstractVideoSurface sollte die Methoden supportedPixelFormats, isFor neu implementieren matSupported, Start, vorhanden
    4.Von die vorhanden Methode, die wir den Bildpuffer jedes Rahmens
    5.Load die Videodatei mit QMediaplayer bekommen
    6.setMute = true (Audio)
    7. Stellen Sie die benötigte Position in Millisekunden auf das QMediaplayer-Objekt ein. 8.Starten Sie die Wiedergabemethode. 9.Von der vorhandenen Methode konvertieren Sie den empfangenen Datenpuffer in QImage und dann in QPixmap (falls erforderlich).
    10.Once hat das Pixmap, laden Sie es in ein Widget (Beispiel: In einem QLabel)
  5. Sofort pausieren Sie die Videodatei von der Wiedergabe (wenn Sie ein anderes Bild erfassen müssen. Anderenfalls stoppen() statt Pause()). Dies kann von der Unterklasse des Objekts (QAbstractVideoSurface) zu QMediaPlayer Objekt
  6. Wenn Sie fertig sind, rufen Sie die Stop-Methode der Unterklasse von QAbstractVideoSurface mit Signal-Slot durchgeführt werden und dann die QMediaplayer

oberhalb der Beispielanwendung here gefunden werden kann

(Application Screen Shot)

enter image description here

Open Video File: durchsuchen und ein Video fil wählen e
Slider: Wählen Sie die gewünschte Position
Aufnahme: Erfassung des Bildes und Anzeigen in einer QLabel
sparen