Verlustfreie avi-encoding auf linux

Ich bin versucht, zu schreiben video mit opencv. Es ist wichtig für mich, dies zu tun genau - so hat es ein lossless-codec. Ich arbeite mit der OpenCV-2.4.1 unter Ubuntu 12.04

Bisher war ich mit dem fourcc-code 0. Das gab mir genau die Ergebnisse, die ich wollte, und ich war in der Lage sich zu erholen, die Bilder perfekt.

Ich bin nicht sicher, was passiert ist, aber wie von einem kürzlichen update (um Jul 20 2012), ist etwas schief gelaufen und ich bin nicht mehr in der Lage, Dateien zu schreiben, die mit dieser fourcc-code. Ich weiß wirklich nicht erinnern, was es war, aber es könnte kommen aus und mache ein update, entfernen Sie einige software von meinem software-center, und einige andere Dinge, die ich Tat, während die Allgemeine Reinigung...

Wenn ich eine ältere Datei mit mediainfo (http://www.fourcc.org/identifier/) sehe ich das folgende Ergebnis:

Complete name                            : oldsample.avi
Format                                   : AVI
Format/Info                              : Audio Video Interleave
Format profile                           : OpenDML
File size                                : 1.07 GiB
Duration                                 : 41s 467ms
Overall bit rate                         : 221 Mbps
Writing application                      : Lavf53.5.0
Video
ID                                       : 0
Format                                   : RGB
Codec ID                                 : 0x00000000
Codec ID/Info                            : Basic Windows bitmap format. 1, 4 and 8 bpp     versions are palettised. 16, 24 and 32bpp contain raw RGB samples
Duration                                 : 41s 467ms
Bit rate                                 : 221 Mbps
Width                                    : 640 pixels
Height                                   : 4294966 816 pixels
Display aspect ratio                     : 0.000
Frame rate                               : 30.000 fps
Bit depth                                : 8 bits
Stream size                              : 1.07 GiB (100%)

Nun, ich sehe, dass ich beim schreiben mit dem 0 fourcc-codec, das Programm eigentlich standardmäßig der i420 codec. Hier ist die Ausgabe aus einer der Dateien, die ich versuche zu schreiben jetzt:

Complete name                            : newsample.avi
Format                                   : AVI
Format/Info                              : Audio Video Interleave
File size                                : 73.0 MiB
Duration                                 : 5s 533ms
Overall bit rate                         : 111 Mbps
Writing application                      : Lavf54.6.100
Video
ID                                       : 0
Format                                   : YUV
Codec ID                                 : I420
Codec ID/Info                            : 8 bit Y plane followed by 8 bit 2x2 subsampled U and V planes.
Duration                                 : 5s 533ms
Bit rate                                 : 111 Mbps
Width                                    : 640 pixels
Height                                   : 480 pixels
Display aspect ratio                     : 4:3
Frame rate                               : 30.000 fps
Compression mode                         : Lossless
Bits/(Pixel*Frame)                       : 12.000
Stream size                              : 72.9 MiB (100%)

Dieses format und andere Formate, die ich versuche zu verwenden (wie huffyuv HFYU), funktionieren bei mir nicht, weil ich am Ende mit Effekten wie diesem http://imgur.com/a/0OC4y - Sie sehen, die hellen Artefakte kommen durch das, was ich davon ausgehen ist entweder die verlustbehaftete Kompression oder chroma-subsampling bei HFYU der angeblich verlustfrei. Was Sie sehen, ist der rot-Kanal von einem meiner videos. Der perzeptuelle Effekt ist vernachlässigbar, wenn man sich alle 3 Kanäle gleichzeitig, aber es ist wichtig, dass ich rekonstruieren Sie die Bilder genau.

Darüber hinaus, während ich in der Lage bin zu spielen, meine alten Dateien in media-Playern wie vlc, die ich plötzlich finde Sie völlig unvereinbar mit opencv. Wenn ich versuche zu öffnen, das ältere Dateien mit ein videoergreifung, dem offenen Schritt funktioniert, aber versuchen zu tun, ein read-Vorgang-Ergebnisse in einem segfault. Außerdem, Wenn ich versuche zu schreiben, die entweder mit:

CV_FOURCC(0,0,0,0)
0

Opencv standardmäßig I420 aus irgendeinem Grund.

Als Nächstes habe ich versucht, mit einigen alternativen codecs. 'DIB' scheint, wie etwas, das sollte für mich arbeiten, und auf die opencv website (http://opencv.willowgarage.com/wiki/VideoCodecs) es ist aufgeführt als 'empfohlen' codec. Allerdings versuchen, verwenden Sie diese Ergebnisse in der folgenden Meldung:

OpenCV-2.4.1/modules/highgui/src/cap_gstreamer.cpp:483: error: (-210) Gstreamer Opencv backend doesn't support this codec acutally. in function CvVideoWriter_GStreamer::open

Aborted (core dumped)

Überprüfte ich die opencv-Quelle für diesen codec, und stolperte über Folgendes:

cd OpenCV-2.4.1/modules
grep -i -r "CV_FOURCC" ./*
...
./highgui/src/cap_qt.cpp:    /*if( fourcc == CV_FOURCC( 'D', 'I', 'B', ' ' ))
./highgui/include/opencv2/highgui/highgui_c.h:#define CV_FOURCC_DEFAULT CV_FOURCC('I', 'Y', 'U', 'V') /* Use default codec for specified filename (Linux only) */

Ich habe versucht die Installation von qt4 und neu mit der WITH_QT Flagge, aber das hat auch nichts ändern. Ich habe auch versucht die Kommentarzeichen vor, dass ein Teil des Codes und der Neuinstallation von opencv, aber das hat auch nicht funktioniert.

Mein Ziel ist es für jede Art, wie effizient zu speichern und abzurufen, einen video-stream mit 16 bits für jedes pixel (wie 32float würde funktionieren, und dann würde es nicht perfekt sein muss). Jetzt bin ich erst Auspacken der 16 bits in die Kanäle rot und grün, das ist, warum ich muss es perfekt sein - da wird ein Fehler von 1 in der rot-Kanal ist, multipliziert mit 256, die in das endgültige Ergebnis. Ich bin nicht mit Erfolg mit einem der fourcc-codes zur Verfügung zu mir.

InformationsquelleAutor dlants | 2012-07-22
Schreibe einen Kommentar