Fixieren eines nicht gemixten Bild- / JPEG-Streams von der Webcam mit gstreamer

4155
nponeccop

Ich habe ein defektes Material mit der folgenden Pipeline aufgenommen:

gst-launch-1.0 v4l2src ! filesink location=encode.mjpeg 

Irgendwie kann es gstreamer immer noch abspielen:

gst-launch-1.0 filesrc location=encode.mjpeg ! jpegdec ! videoconvert ! xvimagesink 

Da ich jedoch versehentlich keinen Container verwendet habe, wird der Stream sehr schnell wiedergegeben framerate=(fraction)0/1. Gibt es eine Möglichkeit, meine defekte Datei .aviohne Rekomprimierung in einen oder einen anderen Container zu konvertieren ?

Das folgende triviale Muxen funktionierte nicht wie erwartet:

gst-launch-1.0 filesrc location=encode.mjpeg \ ! 'image/jpeg,framerate=30/1,width=1280,height=720' ! avimux \ ! filesink location=encode.avi . -v 

Irgendwie spielt der Gstreamer encode.avibei ~ 1 FPS sehr langsam ab, ohne nennenswerten CPU-Aufwand zu verursachen. Weder Vlc` noch Adobe Aftereffects können ihn importieren - sie zeigen nur einen korrekt decodierten Streifen des ersten Frames an.

0

1 Antwort auf die Frage

0
thiagoss

Das Problem, das Sie beim Muxen in avi haben, hängt mit der Tatsache zusammen, dass filesrc Puffer für avimux bereitstellt, die nicht ordnungsgemäß an den Mjpeg-Frames ausgerichtet sind. Daher erstellt avimux intern Proben mit falscher Ausrichtung, was die Verwendung der Player erschwert später während der Wiedergabe.

Dies kann durch Verwendung eines Mjpeg-Parsers nach dem Capsfilter (jpegparse?) Behoben werden. Eine andere Option besteht darin, die Samples zu decodieren und erneut zu codieren, um sie richtig auszurichten und zu muxen. Die folgende Pipeline sollte funktionieren:

gst-launch-1.0 filesrc location=encode.mjpeg \ ! 'image/jpeg,framerate=30/1,width=1280,height=720' ! decodebin ! videoconvert ! \ <some encoder> ! <some muxer> ! filesink location=outputfile 

Sie können den Encoder und Muxer auswählen, den Sie möchten, Sie können sie sogar in jpeg und mux in avi codieren, wie Sie es anfangs gewünscht haben.

Bearbeiten : Um zu versuchen, den Inhalt ohne Dekodierung in avi zu muxen, versuchen Sie Folgendes:

gst-launch-1.0 filesrc location=encode.mjpeg \ ! 'image/jpeg,framerate=30/1,width=1280,height=720' ! jpegparse ! avimux \ ! filesink location=encode.avi . -v 

Wenn jpegparse es sehr gut macht, sollte '' image / jpeg, Framerate = 30/1, width = 1280, height = 720 '' nicht erforderlich sein.

* ohne Rekomprimierung * - Die Rekomprimierung mit mjpeg verringert offensichtlich die Qualität, da sich die Quantisierungseinstellungen in der Kamera und in "jpegenc" unterscheiden. nponeccop vor 10 Jahren 0
If remuxing without decompressing still doesn't work you can try looking at jpegenc quality property by doing: gst-inspect-1.0 jpegenc and setting it to a higher level to see if it improves your situation. In gst-launch you set properties after the element with: jpegenc quality= thiagoss vor 10 Jahren 0