Antwort

16

Sie können sicherlich die Klasse VideoWriter verwenden, aber Sie müssen the correct FourCC code verwenden, die den H264-Standard darstellt. FourCC steht für Four Character Code, der eine Kennung für ein Video-Codec-, Komprimierungs-, Farb- oder Pixelformat ist, das in Mediendateien verwendet wird.

Wenn Sie ein Objekt VideoWriter erstellen, geben Sie speziell den FourCC-Code beim Erstellen an. Konsultieren Sie die OpenCV-Dokumentation für weitere Informationen: http://docs.opencv.org/trunk/modules/highgui/doc/reading_and_writing_images_and_video.html#videowriter-videowriter

Ich nehme an, Sie C++ verwenden, und so die Definition des VideoWriter Konstruktor ist:

VideoWriter::VideoWriter(const String& filename, int fourcc, 
         double fps, Size frameSize, bool isColor=true) 

filename die Ausgabe der Videodatei ist, fourcc ist der FourCC-Code für den Code, den Sie verwenden möchten, fps ist die gewünschte Bildrate, frameSize ist die gewünschte Größe des Videos und isColor gibt an, ob das Video in Farbe sein soll oder nicht. Obwohl FourCC vier Zeichen verwendet, verfügt OpenCV über ein Dienstprogramm, das FourCC analysiert und eine einzelne Ganzzahl-ID ausgibt, die als Nachschlag verwendet wird, um das richtige Videoformat in eine Datei schreiben zu können. Verwenden Sie die CV_FOURCC-Funktion, und geben Sie vier einzelne Zeichen an, die jeweils einem einzelnen Zeichen im FourCC-Code des gewünschten Codecs entsprechen.

Insbesondere würden Sie es so nennen:

int fourcc = CV_FOURCC('X', 'X', 'X', 'X'); 

ersetzen X mit jedem Zeichen, die auf die FourCC (in dieser Reihenfolge) gehört. Da Sie den H264 Standard wollen, würden Sie ein VideoWriter Objekt wie so erstellen:

#include <iostream> // for standard I/O 
#include <string> // for strings 

#include <opencv2/core/core.hpp>  // Basic OpenCV structures (cv::Mat) 
#include <opencv2/highgui/highgui.hpp> // Video write 

using namespace std; 
using namespace cv; 

int main() 
{ 
    VideoWriter outputVideo; // For writing the video 

    int width = ...; // Declare width here 
    int height = ...; // Declare height here 
    Size S = Size(width, height); // Declare Size structure 

    // Open up the video for writing 
    const string filename = ...; // Declare name of file here 

    // Declare FourCC code 
    int fourcc = CV_FOURCC('H','2','6','4'); 

    // Declare FPS here 
    int fps = ...; 
    outputVideo.open(filename, fourcc, fps, S); 

    // Put your processing code here 
    // ... 

    // Logic to write frames here... see below for more details 
    // ... 

    return 0; 
} 

Alternativ können Sie dies einfach tun, wenn Ihr VideoWriter Objekt erklärt:

VideoWriter outputVideo(filename, fourcc, fps, S); 

Wenn Sie die oben verwenden, ist es nicht erforderlich, dass Sie open aufrufen, da dies den Schreiber zum Schreiben von Frames automatisch öffnet.


Wenn Sie nicht sicher sind, ob H.264 auf Ihrem Computer unterstützt wird, geben -1 als FourCC-Code und ein Fenster sollte sich, wenn Sie den Code ausführen, die alle verfügbaren Video-Codecs anzeigt, die sind auf Ihrem Computer. Ich möchte erwähnen, dass dies nur für Windows funktioniert. Bei Linux oder Mac OS wird dieses Fenster nicht angezeigt, wenn Sie -1 angeben. Mit anderen Worten:

Sie können wählen, welche am besten geeignet ist, sollte H.264 nicht auf Ihrem Computer vorhanden sein. Sobald dies erledigt ist, erstellt OpenCV den richtigen FourCC-Code, der in den VideoWriter-Konstruktor eingegeben wird, sodass Sie eine VideoWriter-Instanz erhalten, die eine VideoWriter darstellt, die diesen Videotyp in eine Datei schreibt.

Sobald Sie einen Rahmen bereit haben, gespeichert in frm für Schreiben in die Datei, können Sie entweder:

ODER

outputVideo.write(frm); 

Als Bonus, hier ist ein Tutorial zum Lesen/Schreiben von Videos in OpenCV: http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_gui/py_video_display/py_video_display.html - Allerdings ist es für Python geschrieben, aber was ist gut zu wissen, ist in der Nähe der Unterseite des Links, gibt es eine Liste von FourCC-Codes, die bekannt sind, wor k für jedes Betriebssystem. Übrigens ist der FourCC-Code, den sie für den H264-Standard angeben, tatsächlich 'X','2','6','4', wenn also 'H','2','6','4' nicht funktioniert, ersetzen Sie H durch X.

Eine weitere kleine Notiz. Wenn Sie Mac OS verwenden, müssen Sie 'A','V','C','1' oder 'M','P','4','V' verwenden. Aus Erfahrung, 'H','2','6','4' oder 'X','2','6','4' bei dem Versuch, den FourCC-Code anzugeben scheint nicht zu funktionieren.

+0

Ich habe das Programm versucht. Zuerst, als ich versuchte, den Fourcc-Parameter als -1 zu verwenden, kam kein Fenster auf. Als ich versuchte, mit x264, wie Sie erwähnt, ich bekam "konnte Codec nicht öffnen: libx264" Fehler und einige andere Fehler wie "defekte ffmpeg Standardeinstellungen erkannt" .. was soll ich tun BTW Ich benutze Ubuntu 14.04 –

+1

Das heißt, Sie haben nicht die H264-Bibliotheken .... Das ist ein weiterer Beitrag alle zusammen. Wenn ich zur Arbeit komme, gebe ich dir einen Link. Btw das -1 funktioniert nur in Windows. Vergessen, das auch zu erwähnen. Hoppla! – rayryeng

+0

Danke .. lassen Sie mich wissen, wenn Sie an der h264 lib Installation arbeiten. . Ich muss wissen –