LINUX.ORG.RU

Проблемы с записью видео с экрана (screencast-a) в VLC


0

3

Пытаюсь записать в фоне видео того, что происходит на экране с помощью следующей команды, которая была частична скопирована из интерфейса VLC:

vlc screen:// -I dummy --no-video :screen-fps=10 :screen-caching=300 :sout'#transcode{vcodec=mp1v,vb=2000,fps=10,scale=1,width=640,height=480,acodec=none} :no-sout-rtp-sap :no-sout-standard-sap :ttl=1 :sout-keep :file{dst=~/Work/TD_capture.avi}'

Также пробовал другие кодеки: mp4v, theo, WMV2, mp1v. Есть несколько проблем:

  • файл вообще не создаётся, ничего не пишется, однако...
  • загрузка ЦПУ после запуска VLC на пределе - 100% для любого кодека: я видел в интернете ролик - товарищ записывает скринкаст напрямую в h264 - это конечно не с моим процессором (старый Sempron с 1,6ГГц), однако он способен записывать видео в реальном времени в формате mp4 или по крайней мере в форматах MPEG-1/2.
  • Как корректно остановить vlc после того как определённая порция видео записана, или, например, прошло некоторое время?
  • Может проблема в опциях sout и transcode? Каков их корректный синтаксис? На некоторых форумах читал, что там пробелы должны быть и ключи могут по разномузаписываться?

Версия VLC - 1.1.5.

★★★★★

Нашёл корректно работающий пример здесь: http://forum.videolan.org/viewtopic.php?f=4&t=46971

Модифицировал под себя немного:

vlc screen:// -I dummy --no-video --screen-fps 10 --sout «#transcode{vcodec=mp4v,vb=1024,fps=20,scale=0.4,width=640,height=480,acodec=none}:duplicate{dst=std{access=file,mux=ts,dst=»/home/alex/Work/TD_capture.avi"}}"

Вобщем 1 и 4 проблемы практически решены. А вот с выходом из vlc не понятно: помощь по командной строке говорит о vlc vlc://quit, но этот url работает только если указана опция --one-instance и vlc находится в режиме проигрывания, тогда запуск ещё одной копии с параметром vlc://quit приводит к выходу обеих копий. А если vlc в режиме записи - не выходит. А вот почему эта «собака» отжирает 100% CPU (~ 50% - system, 50% - user) не понятно??? Может с драйвером видеокарты проблемы: не работает 2D ускорение? Как это можно проверить?

GladAlex ★★★★★
() автор топика
Ответ на: комментарий от GladAlex

>Note that if you only use the dummy interface, you won't be able to tell vlc to quit (Note that if you only use the dummy interface, you won't be able to tell vlc to quit (except watching a video).except watching a video).

Я не совсем понял проблему, но может быть -I rc это то что ты ищешь?

stormy
()
Ответ на: комментарий от stormy

Может быть, спасибо большое! Возможно, что rc - это то, что нужно. Вопрос в том, что хочу по запросу пользователя запустить vlc в фоне из своей программы, чтобы его не было видно, записать screencast и без проблем закрыть vlc, чтобы avi корректный был. Когда с dummy принудительно закрываешь - avi битый.

P.S. Спасибо, проверил, работает, выходит по vlc://quit.

Осталось пара проблем:

  • vlc кушает 100% на моём семпроне и старой ати-шной карточке, хотя похоже, что это не проблема vlc.
  • не видно курсора мыши: --screen-follow-mouse не помогает. Надо использовать --screen-mouse-image=<string>???

P.S.S. Странно: 1-й раз запустил с -I rc - vlc свернулся в трей, записал видео и вышел по vlc://quit - всё красиво, а теперь пишет приглашение:

Интерфейс удаленного управления запущен. Введите 'help' для справки.


и не выходит.

Командная строка:

vlc screen:// --one-instance -I rc --screen-follow-mouse --no-video --screen-fps 5 --sout «#transcode{vcodec=mp4v,vb=400,fps=5,scale=1,width=1280,height=1024,acodec=none}:duplicate{dst=std{access=file,mux=ts,dst=»/home/alex/Work/TD_capture.avi"}}"

GladAlex ★★★★★
() автор топика
Ответ на: комментарий от GladAlex

А нет, порядок, выходит, только долго из-за высокой загрузки CPU. Ещё хороший вариант - это -I qt --qt-start-minimized --qt-system-tray

Осталось с мышкой разобраться и можно встраивать в программу.

GladAlex ★★★★★
() автор топика
Ответ на: комментарий от GladAlex

vlc screen:// --one-instance -I dummy --screen-follow-mouse --no-video :screen-fps=5 :screen-caching=300 --sout «#transcode{vcodec=h264,vb=400,fps=5,scale=1,width=1280,height=1024,acodec=none}:duplicate{dst=std{access=file,mux=avi,dst=»/home/user/Work/TD_capture.avi"}}" --run-time=1200 vlc://quit

это окончательная и корректная команда для записи видео с экрана в течении 20 минут и выход по окончании записи. Потребляет менее 30% ЦПУ на моей машине (Athlon X2). Предыдущая команда была не совсем корректна. Изменения выделены жирным.

GladAlex ★★★★★
() автор топика
ffmpeg -f x11grab -s <X-размер>x<Y-размер> -r 25 -i :0.0 -sameq out_video.avi

неплохое качество выдает у меня ... пример , а то что дергается - лень обрабатывать , пробуйте сами .

Gramozeka ★★
()
Ответ на: комментарий от Gramozeka

Хорошая штука, но работает только в Линуксе, а мне кроме него нужен ещё Мак и винда, а это только vlc умеет. Была ещё идея делать скриншоты в своей программе через

		QDesktopWidget dw;

		QRect rctGeom = dw.screenGeometry(nDisplayNr);

		QPixmap originalPixmap = QPixmap(); // clear image for low memory situations on embedded devices.
		originalPixmap = QPixmap::grabWindow( dw.screen(nDisplayNr)->winId(), 
                                            rctGeom.x(), rctGeom.y(), rctGeom.width(), rctGeom.height() );
А потом уже картинки сжимать ffmpeg-ом. Но не знаю как быстро работал бы QPixmap::grabWindow(QDesktopWidget), и к тому же vlc на лету жмёт, а ffmpeg при таком подходе минут на 10 весь процессор займёт.

GladAlex ★★★★★
() автор топика
Ответ на: комментарий от GladAlex

1). У тебя есть звук? Создавал недавно тему: скринкастил средствами ffmpeg -f x11grab без сжатия на лету, чтобы досжать потом. Но звука нет (PCM). Что странно. Последний ролик от создателей Blender тоже без звука почему-то, а в другом дистрибутиве звук есть.

2). Если не было звука, как ты его сделал, если не секрет?

3). Проверил ffmpeg -f x11grab без сжатия на Unreal Tourmanent 2004 с 8x сглаживанием. В итоговом ролике легкое притормаживание графики игры (30 кадров в секунду). Игры полегче и любые системные задачи не тормозят вообще-вообще. Если ты занимаешься этим давно, не знаешь как решать проблему с ресурсоемкими играми? Может это новый патч для отзывчивости системы виноват?

Zenithar
()
Ответ на: комментарий от Zenithar

А у меня пишет и с композитингом и без на «ура», и с любым нужным мне фреймрейтом.

pekmop1024 ★★★★★
()
Ответ на: комментарий от pekmop1024

Для меня он не православный т.к. работает только под Линуксом, а мне нужно, чтобы работало в 3-х системах: Линукс, Мак и Винда. Поэтому православный здесь только VLC ;)

GladAlex ★★★★★
() автор топика
Ответ на: комментарий от Zenithar

Нет я без звука делал, VLC по идее умеет, но я не разбирался. В крайнем случае точно можно накладывать звуковую дорожку: там есть опция.

GladAlex ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.