Тема: Запись видео скринкастов с экрана n900
Предлагаю тут обсуждать способы и подробности создания видеоскринкастов с N900.
Кто не понял, это что-то вроде скриншота экрана, только в видео )))
Можно, конечно, просто камеру поднести к телефону и снимать, но это далеко не лучший выход - и качество не то, и пользование тачскрином закрывает экран и тд.
Чисто теоретически есть два выхода:
а) записывать прямо на зверьке.
б) записывать вывод с экрана куда нибудь на другом устройстве.
Вариант а) хорош тем, что для него ничего не нужно кроме самого n900. Но я очень сомневаюсь, что он потянет запись экрана с более-менее приличной частотой кадров, при этом не очень сильно нагружая систему. Вобщем-то, я этот вариант даже не копал, и не знаю, работает ли он. Знаю как делать такое на обычном десктопе, поэтому если будет время, попробую.
Вариант б) - направлять вывод экрана куда нибудь - например, через видеовыход на видеовход тюнера, или - что гораздо изящнее - выступить в виде vnc-сервера и записывать на стационарном компьютере вывод, подсоединившись vnc-клиентом.
Опишу именно этот метод, хотя он и не дает достаточно удовлетворительной скорости записи - но надеюсь, все возможно и это вопрос оптимизации способа.
Итак, ставим на n900 программу X11VNC:
apt-get install x11vnc
На компьютере ставим xvncviewer(есть разные вьюверы, выбираете на свой вкус - xvncviewer, xvnc4viewer, tightvncviewer, vinager, etc):
(если у вас Debian/Ubuntu):
apt-get install xvncviewer
Теперь, нужно чтобы компьютеры видели друг друга по сети. Если между ними есть стабильный WI-FI - хорошо, можно пользовать его(правда рекомендуют на n900 для этого соединения отключить режим сохранения энергии), но как вариант - пользовать USB-соединение (и программу mad-developer, которая назначит адреса и выдаст по dhcp адрес компьютеру). Я пользовал последнее.
На n900 запускаем:
x11vnc
(только не пишите опцию -ncache 10 - она выдает буферы экрана на вывод vnc тоже)
На компьютере:
xvnc4viewer 192.168.2.15
(где 192.168.2.15 - IP адресс N900)
можно использовать опцию -ViewOnly=1 - чтобы запретить ввод мышкой и клавиатурой.
Появившееся окно с экраном N900 рекомендую сделать "Always on top".
Дальше самое интересное. Для начала нам нужен будет ffmpeg, причем желательно самый свежий - для Ubuntu, рекомендую взять из репозитория Medibuntu. Теперь нам нужно будет а) получить координаты окна, б) приказать ффмпегу записывать именно этот участок окна(соответственно двигать окно нельзя будет и перекрывать другими окнами - иначе запишется на видео).
Запускаем:
xwininfo | grep geometry
и выбираем окно vnc-вьера. Команда вернет нам координаты окна. Их мы вписываем в следующую команду:
ffmpeg -f x11grab -r 15 -s 800x480 -i :0.0+x,y -vcodec libx264 -vpre lossless_ultrafast -threads 0 -y n900_screencast_$(date +%H_%M_%S).mkv
где, x,y - соотвественно координаты окна.
Чтобы не мучатся, можно это дело автоматизировать и засунуть в скрипт:
vim n900_screengrab.sh
:set paste
#!/bin/bash
# Select window with xvncviewer
echo "Please, select window with vncviewer opened"
WINGEOM=$(xwininfo | grep geometry | tr ' ' '+')
OFFSET=$(echo $WINGEOM | cut -d'+' -f5,6 | tr '+' ',' | sed 's:^:+:')
ffmpeg -f x11grab -r 15 -s 800x480 -i :0.0$OFFSET -vcodec libx264 -vpre lossless_ultrafast -threads 0 -y n900_screencast_$(date +%H_%M_%S).mkv
exit 0
:wq
Если у вас ffmpeg ругается на кодек(по умолчанию, например, в Убунте, эти кодеки не стоят), то можно попробовать писать в mpeg2:
ffmpeg -f x11grab -r 25 -s 800x480 -i :0.0$OFFSET -sameq n900_screencast_$(date +%H_%M_%S).mpg
Вот пример получившегося видео этим методом (музыка была наложена позже в youtube с помощью AudioSwap):
Качество картинки ниже оригинального - не знаю точно почему, вряд ли изза скорости, и точно не изза сжатия видео - так оно видно и в vnc-клиенте. Видимо x11vnc рендерит вот так. Ну и скорость и плавность анимаций тут не оценишь, увы. Но так, чтобы показать последовательность действий, что запускать и куда что писать - вполне сойдет )
Быть мрачным и непонятным очень просто. Охрененно трудно быть добрым и ясным. (с) Стивен Содеберг.