Чтобы ffmpeg мог
записывать происходящее на экране он
должен быть собран с опцией
`--enable-x11grab`. Как оказалось в моем случае,
идущая из репозитария Ubuntu версия пакета
ffmpeg было собрана с этой опцией.
Пример захвата
потока
#: ffmpeg -f alsa -ac 2 -i
pulse -f x11grab -r 30 -s 1280x1024 -i :0.0 -acodec pcm_s16le -vcodec
libx264 -vpre lossless_ultrafast -threads 0 output.mkv
Или такой же
вариант но без записи аудио сигнала,
только видео:
#: ffmpeg
-f x11grab -r 30 -s 1280x1024 -i :0.0 -vcodec libx264 -vpre
lossless_ultrafast -threads 0 output3.mkv
После запуска
команды (если не появятся сообщения об
ошибках) в консоль будет выводится
информация о текущем состоянии записи.
Остановить процесс записи скринкаста
можно с помощью комбинации [Ctrl+C].
Аудио-поток
поступает с сервера pulseaudio и кодируется
его в PCM (стерео).
Видео-поток в
примере захватывается с частотой 30
кадров в секунду и разрешением 1280x1024 с
дисплея :0.0 и кодируем его без потерь в
h264 используя libx264. Если использовать,
как в примере, "-threads 0", FFmpeg сам
определяет количество потоков. Результат
помещается в контейнер Matroska (.mkv). FFmpeg
определяет тип контейнера автоматически
по расширению. Результирующий файл
"output.mkv" будет сохранен в текущем
каталоге.
Чтобы в скринкаст
попал не весь экран а только его фрагмент
можно указать желаемую область и
геометрию. Для этого необходимо добавить
+X,Y после :0.0, то есть чтобы получилось
что-то вроде:
-s 800x600 -i :0.0+200,100
Это значит, что
мы будем захватывать прямоугольник
размером 800x600 пикселей со смешением по
X в 200 и по Y 100 пикселей соответственно.
Примечание: Если
вы получите сообщение вида `Unrecognized
option ‘preset’` то вам необходимо до установить
пакеты связанные с кодеком x264:
- libavcodec-extra-53
- libx264-123
- libx264-dev
как на скриншоте.
![]() |
Кодирование
Полученный файл
скринкаста необходимо сжать.
| Высокое качество видео| кодек H.264 | Видео среднего качества| кодек Theora |
| #: ffmpeg -i output.mkv -acodec libfaac -ab 128k -ac 2 -vcodec libx264 -vpre slow -crf 22
-threads 0 our-final-product.mp4
Аудио кодируется с помощью кодека AAC с битрейтом 128k на канал. Видео-поток кодируется с помощью кодека H.264 используя параметр "slow" и CRF равен 22 -м (Чем меньше CRF, тем выше качество, но больше результирующий файл и время кодирования. Разумный диапазон значений от 18 до 28). |
#: ffmpeg -i output.mkv -acodec libvorbis -ab 128k -ac 2 -vcodec libtheora -b 1000k our-final-product.ogg Аудио-поток кодируется используя vorbis, а видео - theora. Для видео указан битрейт 1000k и контейнер .ogg. |
Удаление из
скринкаста не нужных фрагментов
#: ffmpeg -ss 00:00:10 -t
00:07:22 -i output.mkv -acodec libvorbis -ab 128k -ac 2 -vcodec
libx264
-vpre slow -crf 22
-threads 0 our-final-product.mkv
С помощью опций
-ss и -t можно указать отрезок времени
который необходимо оставить в видео
файле. В примере кодирование начинается
спустя 10 секунд и кодируются последующие
7 минут 22 секунды потока.
Кодирование
скринкаста в Avi c XVID и mp3
#: 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
Параметр -qscale
подобен описанному ранее CRF. То есть,
точно так же, чем он ниже, тем выше
качество, дольше кодирование, больше
файл.
