ZenWay - Linux сегодня!
  • Главная
  • Форум
  • Контакты
  • Архив
  • Гостевая книга
×
Поиск по сайту
ГлавнаяАудио и видео ПОИзучаем LinuxДополнительные материалыСкринкастинг в Linux (FFmpeg)

Скринкастинг в Linux (FFmpeg)

Дополнительные материалы, Изучаем Linux, Аудио и видео ПОПросмотров: 46050Комментарии: 430 октября 2010 г.
Console / FFmpeg / Screencast / Конвертер / Приятные мелочи / Учебные материалы
Скринкастинг в Linux (FFmpeg)

К сожалению, имеющиеся в Linux инструменты для screencasting'а (recordmydesktop, xvidcap, istanbul, wink) делают свою работу не лучшим образом. Качество видео и аудио потоков оставляет желать лучшего. К тому же, нередко имеет место рассинхронизация видео и звука.

Подготовка

Чтобы сделать скринкаст хорошего качества, можно воспользоваться FFmpeg. Единственное только что, FFmpeg придётся самим собирать. На самом деле, это очень просто. Пересборка нужна затем чтобы включить опцию "--enable-x11grab" и ряд кодеков. К тому же, у вас в системе будет самая свежая версия кодеков, что уже очень хорошо. Ведь, как известно, FFmpeg - это вечная альфа.

Screencasting:

Мы будем делать screencasting в два этапа:

  • Захват видео и звука без потерь.
  • Кодирование в более приемлемый для хранения формат, ибо результирующий файл из предыдущего пункта будет достаточно объёмный.

Зачем нужно разбивать процесс на два этапа? Дело в том что процесс сжатия видео потребляет много ресурсов компьютера. И делать это "на лету" (захватывать видео и тут же сжимать его) способен далеко не любой компьютер. То есть, в противном случае мы и будем иметь рассинхронизацию аудио и видео потоков, частичную потерю видео-потока и т.п. "сладости". Если мы хотим получить качественный скринкаст, придётся это делать в два этапа.

1. Захват потока

Синтаксис использования FFmpeg таков:

ffmpeg [input options] -i [input file] [output options] [output file]

А вот рабочий пример:

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

После введения этой команды начнётся захват видео и аудио потоков на вашем компьютере. Для завершения процесса необходимо нажать клавишу "q".

В приведённом примере мы захватываем аудио-поток поступающий с сервера pulseaudio и кодируем его в сырой PCM (два каната, то есть, стерео). Видео-поток мы захватываем с частотой 30 кадров в секунду и разрешением 1280x1024 с дисплея :0.0 и кодируем его без потерь в h264 используя libx264. Если использовать, как в примере, "-threads 0", FFmpeg сам определяет количество потоков. Результат помещается в контейнер Matroska (.mkv). Результирующий файл "output.mkv" будет сохранен в текущем каталоге. Ничего сложного.

Захватывать можно не весь экран, а какую-то определённую область. Для этого необходимо добавить +X,Y после :0.0, то есть чтобы получилось что-то вроде:

-s 800x600 -i :0.0+200,100

Это значит, что мы будем захватывать прямоугольник размером 800x600 пикселей со смешением по X в 200 и по Y 100 пикселей соответственно.

Так же, можно изменить частоту кадров на желаемую.

2. Кодирование

После того как мы получили огромный файл со скринкастом, нам нужно его сжать. А выбор метода сжатия нужно выбирать в зависимости от нужд.

Пример 1:

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. Результатом будет файл our-final-product.mp4 помещённый в контейнер MP4. FFmpeg определяет тип контейнера автоматически по расширению. То есть, если указать расширение результирующего файла .mkv, то будет использован контейнер "Матрёшка".

Пример 2:

ffmpeg -i output.mkv -acodec libvorbis -ab 128k -ac 2 -vcodec libtheora -b 1000k our-final-product.ogg

Тем, кто предпочитает полностью свободные форматы, как раз будет по душе этот пример. Аудио-поток кодируется используя vorbis, а видео - theora. Для видео указан битрейд 1000k и контейнер .ogg. Качество звука в данном случае будет на высоте, а вот видео... К сожалению, vorbis во всех отношениях уступает распространённым кодекам.

Пример 3:

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 секунды потока.

Так же, в данном примере используются вместе Vorbis/H.264/Matroska - оптимальное сочетание качества!

Пример 4:

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

В итоге мы получаем типичный AVI с XviD и MP3. Параметр -qscale подобен описанному ранее CRF. То есть, точно так же, чем он ниже, тем выше качество, дольше кодирование, больше файл. Сами выбираем, что нам нужно. Используется avi-контейнер.

Источник: ubuntuforums.org

Автор: vovans
Еще записи по теме
gst123
gst123
StreamStudio
StreamStudio
XMMS
XMMS
Aeolus
Aeolus
energyXT
energyXT
Foobnix
Foobnix

Комментариев: 4 RSS

1mishuk18-11-2010 00:02

Спасибо за толковую статью!

Опечатка

и кодируем его в сырой PCM (два каната, то есть, стерео)
.

2dimas08-02-2011 21:19

а как бороться с шумом звука?

3Zenitur05-03-2011 13:05

Нашёл проблему с перекодированием видео с цифрового фотоаппарата. Помогло добавление изменение "-ab 64k -ac 1" на "-ab 64k -ar 44100 -ac 1".

4vovans08-12-2011 16:49

Звук проще всего добавить, дописал что-то вроде этого:

-f alsa -i pulse

И стандартными средствами в Ubuntu можно выбрать источник записи. Ну, или тот же pavucontrol установить.

Либо, можно использовать alsa напрямую:

-f alsa -ac 2 -i hw:0,0
-f alsa -i plughw:1

цифры можно посмотреть в выводе arecord -l. Пример моего выхлопа:

$ arecord -l
**** Список CAPTURE устройств ****
карта 0: DG [Xonar DG], устройство 0: Multichannel [Multichannel]
Подустройства: 1/1
Подустройство №0: subdevice #0
карта 2: Camera [USB Camera], устройство 0: USB Audio [USB Audio]
Подустройства: 1/1
Подустройство №0: subdevice #0

Разрешение экрана можно автоматически ставить используя регулярку:

-f x11grab -r 30 -s $(xwininfo -root | awk '/geometry/ {print $2}') -i :0.0

Итого, для примера, вот:

fmpeg -f alsa -i pulse -f x11grab -r 30 -s $(xwininfo -root | awk '/geometry/ {print $2}') -i :0.0 -acodec pcm_s16le -vcodec libx264 -vpre lossless_ultrafast -threads 0 -y screencast.mov
Оставьте комментарий!

Используйте нормальные имена.

Вы можете войти под своим логином или зарегистрироваться на сайте.

(обязательно)

Рубрики
  • Hовости
  • Изучаем Linux
  • Обзоры Linux ПО
    • Hужное/полезное
    • Аудио и видео ПО
    • Графика
    • Офисное ПО
    • Интернет ПО
    • Образовательные
    • Игры
    • Администрирование
    • Системные утилиты
    • Прочие
    • Shareware / Demo
  • Дистрибутивы
  • Дополнительные материалы
Последние комментарии
Profanity
  • zon » проше научится свой клиент написать чем разобратся куда что клацать для отправки получения месаг.
  • vovans » Тут не нужно ничего "клацать". Достаточно пару раз на хоткеи посмотреть.
noteshrink
  • Аноним » Теперь есть плюсовая (не пайтон) версия: //github. com/ ImageProcessing - ElectronicPublications /noteshrink-c/ releases
Page dewarp
  • Аноним » Теперь есть плюсовая (не пайтон) версия: //github. com/ ImageProcessing - ElectronicPublications /pagedewarp/ releases
Strawberry Music Player
  • Rododendron » А как добавить радиостанции в плеер? Нигде найти не могу.
Runtu LITE
  • Бубликус » Прикольно.
Полифон (Polyphone)
  • Игорь » Возможно ли ознакомиться с Руководством по обращению с Polyphone на русском языке ?
NEdit (Nirvana Editor)
  • uxer » Nedit не поддерживает кириллицу и вообще юникод.У меня вместо буков азбуки отображает вот такое:здар ова, а...
DeaDBeeF
  • algri14 » Есть ещё плеер mpz — mpz-player.org , там же ссылка на подключение репо автора.
iMule (невидимый Mule)
  • Сергей » Мусьё не читатель, мусьё писатель? Написано же:I2P маршрутизатор должен быть установленВот его и ставим, запускаем...
Форум
[18/11/2022 11:54:52]
vscode and c/c++
[31/08/2022 12:25:53]
Tor Browser
[26/08/2022 07:57:14]
Музыкальный калейдоскоп
[22/05/2022 15:45:40]
Стратегии RTS
[30/03/2022 09:05:20]
Заметки с синхронизацией
[01/03/2022 20:15:05]
Говорильня (дискуссионный клуб)
[13/02/2022 11:44:28]
[РЕШЕНО] права на запись в примонтированный образ диска (raw.img)
[07/02/2022 13:22:01]
Конвертировать текст набаранный в неправильной раскладке
[04/02/2022 20:35:22]
Редактор тегов
Облако меток
2D338 3D241 ALSA68 ASCII120 Android1 Arch Linux38 Audio416 Backup80 Benchmark78 Bluetooth2 C++969 CD48 Console1318 DJ-система17 DVD47 Debian28 DjVu22 Enlightenment19 FFmpeg191 FLTK29 FPS40 FREE155 FTP18 FVWM21 Fluxbox40 GIMP24 GNU26 GPS22 GTK1302 GUI801 Gambas11 Games686 Gentoo3 Gnome349 Gstreamer133 HDD122 HDR7 HTML62 Hex-редактор14 ICQ17 IP-сети25 IP-телефон22 IRC31 ISO39 IceWM22 ImageMagick56 JACK99 Jabber35 Java308 JavaScript115 KDE209 LAN29 LXDE37 LaTeX66 Live-CD70 Live-DVD55 Live-USB53 Lua61 MATE32 MEncoder31 MIDI91 MMORPG12 Mail42 Markdown53 Mono53 Mplayer75 MySQL2 OSS9 Open Source14 OpenGL301 Openbox89 P2P51 PDF133 PHP12 Pascal17 Perl102 Phonon27 PulseAudio17 Python759 QT894 RAW34 RPG101 RSS53 RTS42 Roguelike70 Ruby19 Rust15 SDL312 SVG39 Screencast32 Screenshot61 Script78 Slackware66 TOR17 TOX3 Tk39 Torrent67 Ubuntu69 VLC16 Vala64 Web629 WebKit72 WebUI34 WiFi47 Window Maker16 Wine8 XMPP35 Xfce70 Xine14 YouTube80 video4linux27 wxWidgets108 Автоматизация31 Администрирование335 Анонимная сеть47 Антивирус14 Апплет120 Аркада235 Архиватор11 Астрономия36 Аудио конвертер70 Аудио редактор50 Аудиоплеер184 Безопасность243 Бизнес-приложение4 Браузер87 Бродилка203 Бухгалтерия11 Веб-камера36 Видео148
© Zen Way, 2023. Работает на MaxSite CMS | Время: 0.1197 | SQL: 15 | Память: 8.75MB | Вход