Xpra an ffmpeg weiterleiten

726
user2426679

Ich versuche, ein kopfloses Xpra-Display aufzunehmen. (Ich habe sowohl die xvfb- als auch die Xdummy-Option versucht).

Das Problem ist mit ffmpegs "x11grab". Der verwendete Befehl lautet:

/usr/bin/ffmpeg -y -framerate 2 -video_size 1920x1080 -f x11grab -i :102 -vcodec libx264 -crf 0 -preset ultrafast /output.mkv 

Das Problem ist, dass dies nur eine leere Anzeige aufzeichnet. Es ist komplett weiß mit Ausnahme des schwarzen X, das Sie an einem Linux-System erkennen würden.

Ffmpeg funktioniert gut, um "echte" Displays aufzunehmen, und ich kann an die xpra-Sitzung anschließen und sehen, dass tatsächlich Fenster im Display vorhanden sind. Wenn Sie eine xwd-Ausgabe in xwud leiten, werden dieselben Fenster angezeigt.

Ich habe den ganzen Tag damit verschwendet! Weiß jemand, was ich tun kann, um x11grab zum Laufen zu bringen?

2

2 Antworten auf die Frage

1
user2426679

Nach einigem Graben habe ich beschlossen, dass es etwas damit zu tun hat, wie xpra seine aktiven Fenster verwaltet.

Um xwd in xwud zu leiten, muss ich die untergeordnete Fenster-ID für xwd angeben. Andernfalls wird nur ein leerer Fensterrahmen angezeigt. Optisch ist das vom leeren, weißen Rahmen, den ich von ffmpeg bekomme, sehr unähnlich, aber ich denke, dass es auf dasselbe hinweist.

Wenn ich raten müsste, hat das etwas mit den Flugzeugen zu tun, wie durch gezeigt

 444 req->planeMask = (unsigned int)AllPlanes; 445 req->format = ZPixmap; 

^ Der ffmpeg-Code für x11grab von https://ffmpeg.org/doxygen/trunk/x11grab_8c_source.html

Ich habe mich entschlossen, xpra zu verschrotten und xvfb standalone zu verwenden. Dadurch kann ich ffmpeg verwenden

1
totaam

Xpra ist ein Compositing-Window-Manager, ich zitiere: Der Window-Manager setzt die Fensterpuffer zu einem Bild zusammen, das den Bildschirm darstellt, und schreibt das Ergebnis in den Anzeigespeicher. . Im Fall von xpra befindet sich der Anzeigespeicher auf dem Client, und bis Sie Ihren Client anschließen, ist er nicht vorhanden. Daher wird in der vfb nichts angezeigt. So funktioniert xpra.

Wenn Sie xpra verwenden und die vfb weiterhin mit x11grab an ffmpeg weiterleiten möchten, können Sie die vfb separat starten und dann xpra shadowüber xpra auf die vorhandene vfb zugreifen. (Der Modus "xpra shadow" ist viel weniger effizient ... da er kein Compositing verwendet, verwendet er Screenscraping wie X11grab).

Ab Version 0.16 gibt es eine neue Option namens sync-xvfb (in Millisekunden), mit der auch der virtuelle Bildschirm gezeichnet werden kann, den Sie dann erfassen können.