Wie schreibe ich ein Video mit H.264-Komprimierung mit der VideoWriter-Klasse in OpenCV? Ich möchte grundsätzlich ein Video von der Webcam bekommen und speichern, nachdem ein Zeichen gedrückt wurde. Die Video-Ausgangsdatei ist bei der MPEG4 Part 2-Komprimierung sehr groß.Schreiben einer Videodatei mit H.264-Komprimierung in OpenCV
Antwort
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.
- 1. Objekt innerhalb einer Videodatei trecken
- 2. Schreiben eines mp4-Videos mit Python opencv
- 3. Reparieren einer beschädigten MP4-Videodatei
- 4. Abspielen einer Videodatei in iPhone 4.1
- 5. Capture Screenshot/Frame einer Videodatei
- 6. Schreiben opencv Matte nach stdout
- 7. Region of Interest in Videodatei
- 8. Wie extrahiert man Audio aus einer Videodatei mit Python?
- 9. Text zu einer Videodatei hinzufügen
- 10. .h und .H Header-Dateien in g ++
- 11. Wie bekomme ich Videodatei Dauer in C#
- 12. Effiziente Hintergrundsubtraktion mit OpenCV
- 13. Schreiben x264 von OpenCV 3 mit FFmpeg unter Linux
- 14. Erzeugen einer Vogelperspektive/Draufsicht mit OpenCV
- 15. Videodatei erstellen
- 16. Rückprojektion in Java mit OpenCV
- 17. So erstellen Sie Blob einer Videodatei
- 18. OpenCV cvWriteFrame, cvWriteToAVI
- 19. Wohin mit der Videodatei in android Projekt
- 20. Erhalten Videodauer bei der Eingabe einer Videodatei
- 21. Automatisch (refactor) .h in Header und Implementierung (h + cpp)
- 22. Wie bekomme ich die Dauer einer Videodatei?
- 23. Länge einer Videodatei flv -mpg -avi
- 24. Wie füge ich zwei Audiodateien und eine Videodatei mit C# in eine Videodatei ein?
- 25. , wie Bilder aus einer Videodatei zu extrahieren ffmpeg mit
- 26. letzte Frame-Seltsamkeit beim Lesen/Schreiben von AVIs mit OpenCV
- 27. Videogröße ist 0 Bytes mit videowriter opencv
- 28. Wie schreibe ich Frames in eine Videodatei?
- 29. FaceDetection in Python mit OpenCV
- 30. Wie eine Float-Matte in eine Datei in OpenCV schreiben
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 –
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
Danke .. lassen Sie mich wissen, wenn Sie an der h264 lib Installation arbeiten. . Ich muss wissen –