02.01.2011

Создание скринкастов в Linux

1. Немного теории

Cкринкаст (screencast) — цифровая видео- и аудиозапись, производимая непосредственно с экрана компьютера, так же известная как video screen capture (досл. видеозахват экрана).

Скринка́стинг (англ. screen — экран и англ. broadcasting — передача, вещание) — жанр подкастинга, смысл которого состоит в трансляции для широкой аудитории видеопотока с записью происходящего на экране компьютера автора. Дополнительно накладываются аудиокомментарии и текстовые блоки с пояснением происходящего. Эффект от просмотра скринкастинга аналогичен тому, как если бы зритель находился бы рядом с автором и тот показывал бы действия на своем реальном компьютере и при этом давал бы комментарии.


Наибольшее распространение в современных дистрибутивах получили три приложения для захвата изображения с экрана:
RecordMyDesktop, Istanbul, XVidCap.
Кроме перечисленной троицы, есть мертвый проект (не обновлялся с 2007 года) ScreenKast.
Есть и два развивающихся на launchpad.net проекта: Tibesti и Kazam. Через некоторое время они составят серезную конкуренцию существующей троице.
Для записи в "web" форматы, в частности flash существуют проекты Wink и vnc2flv. Wink распространяется в виде бинарных сборок под Linux Windows платформы, к сожалению не работает в Ubuntu 10.10 из-за проблем с библиотеками.
Кроме непосредственно программ захвата видео с экрана для создания качественного скринкаста понадобяться и вспомогательные инструментальные средства. К ним можно отнести инструментарий, позволяющий отображать на экране в режиме реального времени:
- сочетания клавиш на клавиатуре;
- нажатия кнопки мыши.
К таким программам можно отнести Screencast your keys - позволяет отображать набираемый текст и сочетания клавишь, однако пока бесполезен, так как не поддерживает кирилицу (видимо из за того, что работает на низком уровне) и Keyboard Status Monitor (Key-Mon). Keyboard Status Monitor - отображает в специально отведенной и перемещаемой области экрана сочетания клавищь и нажатые кнопки мыши.

Теперь подробнее.

RecordMyDesktop, Istanbul, XVidCap
Эту троицу можно найти в репозитарии любого дистрибутива Linux.
Из них, по моему скромному мнению, наиболее гибкой и многофункциональной является RecordMyDesktop. Так как он позволяет записывать действия не только в полноэкранном режиме, но и позволяет выбрать окно нужного приложения. Это очень важно, если используется монитор с большой диагональю, а воспроизводить видео нужно на мониторе с меньшей диагональю. При запуске из командной строки можно так же указать область экрана, с которой будет производиться запись. Процесс записи и последующее кодирование разделены, что позволяет работать с приложением даже на слабых машинах.


2. RecordMyDesktop

RecordMyDesktop — бесплатная утилита командной строки с открытым исходным кодом для записи скринкастов. Используется для записи действий пользователя. Результат сохраняется в контейнере ogv. Существует графическая надстройка gtk-recordMyDesktop.
Для установки в Ubuntu:
~$ sudo apt-get install gtk-recordmydesktop
RecordMyDesktop - позволяет захватывать только выбранное окно в GUI режиме, но при запуске из командной строки будет захватывать весь экран:

~$ recordmydesktop
запишет все действия в файл out.ogv
~$ recordmydesktop foo.ogv
запишет все действия в файл foo.ogv
~$ recordmydesktop -x X_pos -y Y_pos -width WIDTH -height HEIGHT -o foo.ogv
где X_pos и Y_pos определяют позицию верхнего левого угла области захвата, WIDTH и HEIGHT размер области захвата (в пикселях), параметр -o и последующее имя указывают файл, в который будет производиться запись.

Для остановки записи используется сочетание ctl-c

На сайте разработчиков RecordMyDesktop приведены все опции для запуска в консоли.
При запуске в графическом режиме (Приложения, Аудио Видео, RecordMyDesktop) появляется окно с возможностью выбора предварительных настроек:
По умолчанию в настройках выставлен захват 15 кадров в секунду, что вполне достаточно для нормального отображения полученного видео. Кроме того, отключена опция кодирования на лету, что позволяет использовать программу даже на очень слабом железе (захватывает окно MS Word запущенного в Wine на нетбуке с процессором Atom 1.6 Ггц, при этом никаких рывков и артефактов в выходном файле нет). После завершения записи включается кодирование записи в свободный контейнер OGV - для видео используется кодек theora, для аудио кодек vorbis. Как ни странно, оказалось, что ogv не воспроизводиться по неизвестным причинам даже при установленном пакете Klite-codek-pack в Windows XP. Поэтому если нужна кросплатформенность, видео лучше перегнать в mp4.
Перегнать видео из ogv в avi можно следующими способами:
mencoder
mencoder your.recorded.file.ogv -ovc xvid -oac mp3lame -xvidencopts
-vf scale=1024:768 -o your.recorded.file.avi
ffmpeg2theora
ffmpeg2theora --videoquality 10 --audioquality 10 -optimize -x 1024 -y 768
your.recorded.file.ogv -o your.recorded.file.avi
ffmpeg
ffmpeg -threads 2 -i
your.recorded.file.ogv -f avi -r 29.97 -vcodec libxvid -vtag XVID -s
1024x768 -aspect 4:3 -maxrate 1800kb -b 1500kb -qmin 3 -qmax 5
-bufsize 4096 -mbd 2 -bf 2 -flags +4mv -trellis -aic -cmp 2 -subcmp 2
-g 300 -acodec libmp3lame -ar 48000 -ab 128kb -ac 2
your.recorded.file.avi

3. XVidCap

XVidCap тоже позволяет указывать область захвата, при этом видео кодируется в mpeg, который 100% воспроизведется на любой машине, но естественно качество немного хуже, а объем файла значительно больше.
Установка:
~$ sudo apt-get install xvidcap
После установки появиться в меню: Приложения, Аудио Видео, XVidCap

4. Istanbul

Istanbul - по функционалу практически идентичен recordmydesktop: пишет видео в формате Ogg Theora.
Установка:
~$ sudo apt-get install istanbul
После установки появиться в меню: Приложения, Аудио Видео, Istanbul
Запускать можно и из командной строки:
~$ istanbul –record-sound –record-mousepointer -r test.ogg
параметр –record-sound указывает, что нужно захватывать звук, параметр –record-mousepointer включает захват указателя мышки, test.ogg - имя файла скринкаста.

5. vnc2flv

Есть приложение для записи сессии VNC - vnc2flv, на выходе, соответственно позволяет получить файл формата Flash Video (FLV), что очень удобно, если учебный материал необходимо разместить на веб странице и воспроизводить его без предварительного сохранения на жесткий диск (в принципе если в Firefox установлен плагин для mplayer, то воспроизводить можно любые форматы, поддерживаемые mplayer, но в новом окне, что не совсем удобно).
Пример скринкаста созданного разработчиками vnc2flv.
Недостатком vnc2flv, является то, что для работы необходимо запускать VNC сервер. Кроме того захват производиться всей рабочей области экрана, что нежелательно, если необходимо, что бы видео воспроизводилось на старых 17" мониторах, к тому же возрастает объем файла.

6. ffmpeg

Конечно же скринкасты можно создавать используя коммандную строку и универсальный видеокомбайн ffmpeg.
Как создать скринкаст, используя только ffmpeg можно узнать из руководства How to do Proper Screencasts on Linux Using FFmpeg (англ. яз).
Например:
~$ ffmpeg -f alsa -ac 2 -i pulse -f x11grab -r 30 -s 1024x768 -i :0.0 -acodec pcm_s16le -vcodec libx264 -vpre lossless_ultrafast -threads 0 output.mkv
В примере выше производиться захват аудио из pulseaudio sound server - опция pulse и кодирование без потери lossless raw PCM в 2 аудио канала (stereo) - опция -ac 2, если микрофон один, то для уменьшения размера следует для этой опции установить 1 .
Далее для захвата видео с x11 с частотой 30 кадров в секунду и размером области захвата 1024×768 с монитора :0.0 с последующим кодированием в h264 используя библиотеку libx264. Опция -threads 0 означает автоматический выбор количества потоков. output.mkv - файл с результатом работы.
Для записи в контейнер avi и кодирования звука с помощью libmp3lame в mp3, а видеопотока с помощью xvid:
~$ ffmpeg -i output.mkv -acodec libmp3lame -ab 128k -ac 2 -vcodec libxvid -qscale 8 -me_method full -mbd rd -flags +gmc+qpel+mv4 -trellis 1 -threads 0 our-final-product.avi

Вспомогательные инструментальные средства

Для создания качественного скринкаста понадобяться и вспомогательные инструментальные средства. К ним можно отнести инструментарий, позволяющий отображать на экране в режиме реального времени.
К таким программам можно отнести Screencast your keys - позволяет отображать набираемый текст и сочетания клавишь, однако пока бесполезен, так как не поддерживает кирилицу (видимо из за того, что работает на низком уровне). Посмотреть демонстрацию работы программы можно здесь и здесь. К сожалению отображает только латиницу.

Keyboard Status Monitor (Key-Mon). Keyboard Status Monitor - отображает в специально отведенной и перемещаемой области экрана сочетания клавищь и нажатые кнопки мыши.
Так выглядит индикатор (масштаб, внешний вид, положение можно настроить):