Ich versuche gstreamer 0.10 von Python zu verwenden, um gleichzeitig eine v4l2-Videoquelle anzuzeigen und sie in xvid-in-avi aufzunehmen. Über einen langen Zeitraum würde der Computer schnell genug sein, um dies zu tun, aber wenn ein anderes Programm die Platte verwendet, löscht es Frames. Das ist schlimm genug, aber bei der Wiedergabe gibt es im Video Bewegungen, in denen Frames gelöscht wurden, anstatt die Frames anzuzeigen, die wir mit einer niedrigeren Framerate kodieren konnten.Wie kann ich Live-Videos mit gstreamer aufnehmen, ohne Frames zu verlieren?
Die Pipeline ist v4l2src ! capsfilter ! tee ! queue ! xvidenc ! avimux ! filesink
und das Tee sinkt auch auf queue ! xvimagesink sync=false
. Ich habe versucht, videorate
vor xvidenc
hinzuzufügen, aber das scheint die Dinge noch schlimmer zu machen.
Ich habe erwogen, das unkomprimierte Video in dieser Pipeline auf die Festplatte zu spulen und es in einem Hintergrund-Thread zu codieren. Was könnte ich noch tun, um dieses Problem zu lösen? Ist xvidenc
oder avimux
die falsche Sache mit ausgelassenen Rahmen? Könnte ich die Größe der Warteschlange vor meinem Encoder drastisch erhöhen?
Wie würden Sie chunk die Ausgabe so kann jeder Chunk so schnell gelöscht werden, da sie umcodiert wurde? – joeforker
Ich habe die Umstellung auf Bewegung jpeg beendet. Die Komprimierung ist schrecklich, aber sie überfordert die CPU nicht. – joeforker