Трубопровод XPra к ffmpeg

662
user2426679

Я пытаюсь записать безголовый дисплей XPRA. (Я пробовал оба варианта xvfb и Xdummy).

Проблема с ffmpeg "x11grab". Используемая команда:

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

Проблема в том, что это просто записывает пустой экран. Он полностью белый, за исключением черного X, который вы узнаете в системе Linux.

Ffmpeg отлично работает для записи «настоящих» дисплеев, и я могу подключиться к сеансу xpra и увидеть, что на самом деле на дисплее есть окна. Кроме того, передача вывода xwd в xwud показывает те же окна.

Я потратил весь день на это! Кто-нибудь знает какие-нибудь хаки, которые я могу сделать, чтобы заставить работать x11grab?

2

2 ответа на вопрос

1
user2426679

Так что после некоторой тяжелой работы я решил, что это связано с тем, как xpra управляет активными окнами.

Для передачи xwd в xwud требуется указать идентификатор дочернего окна для xwd, в противном случае он просто отображает пустую рамку окна. Визуально это очень отличается от пустой белой рамки, которую я получаю от ffmpeg, но я думаю, что это указывает на то же самое.

Если бы мне пришлось угадать, это как-то связано с самолетами, о чем свидетельствует

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

^ код ffmpeg для x11grab, с https://ffmpeg.org/doxygen/trunk/x11grab_8c_source.html

Я решил отказаться от xpra и использовать автономный xvfb. Это позволяет мне использовать ffmpeg

1
totaam

Xpra - это оконный менеджер композитинга, цитирую: оконный менеджер объединяет оконные буферы в изображение, представляющее экран, и записывает результат в память дисплея. , В случае xpra память дисплея находится на клиенте, и до тех пор, пока вы не подключите свой клиент, она не существует, и поэтому на vfb ничего не отображается. Вот как работает xpra.

Если вы хотите использовать xpra и по-прежнему передавать vfb в ffmpeg с помощью x11grab, вы можете запустить vfb отдельно, а затем использовать xpra shadow для доступа к существующему vfb через xpra. (теневой режим xpra гораздо менее эффективен ... потому что он не использует композитирование, он использует скрапбукинг, как x11grab)

Начиная с версии 0.16, появилась новая опция sync-xvfb (в миллисекундах), которая также может использоваться для рисования виртуального экрана, который затем можно захватить.

Похожие вопросы