К сожалению, имеющиеся в 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



отсюда

работающие рецепты



https://ru.wikipedia.org/wiki/Разрешение_экрана_монитора
https://help.ubuntu.ru/wiki/ffmpeg#запись_видео_с_экрана_монитора_средствами_ffmpeg
https://www.linux.org.ru/forum/multimedia/8736436

xwininfo | grep -e Width -e Height -e Absolute
xwininfo -root |grep 'geometry' | awk '{print $2;}'
arecord -l
ls /usr/share/ffmpeg/
ffmpeg -formats 2> /dev/null | egrep '(x11grab|qtrle)'



https://ubuntuforums.org/showthread.php?t=1392026


https://geekkies.in.ua/linux/screencasting-v-linux-ispolzuya-ffmpeg-ili-avconv.html
ffmpeg — это само приложение;
-f x11grab — этим мы указываем, что для захвата видеосигнала мы используем вывод графической подсистемы;
-s 1280x1024 — область захвата видео. В данном случае это разрешение моего экрана;
-r 15 — фреймрейт (количество кадров в секунду). Для записи экрана 15 кадров вполне достаточно;
-i :0.0 — монитор;
-vcodec qtrle — используемый видеокодек;
screencast.mov — это имя выходного файла;



доработать

https://coderoad.ru/10180323/ffmpeg-для-захвата-экрана
Запись экрана:


Запись окна:


https://masterpro.ws/forum/22-multimedia/4550-skript-dlya-sozdaniya-skrinkastov


https://forum.sc2tv.ru/threads/9628-Стрим-с-линукса(Linux)/page2


Добавление звука с микрофона к существующему видео



http://bbb-solutions.blogspot.com/2017/02/how-to-record-skype-session-in-ubuntu.html
SimpleScreenRecorder
pactl load-module module-loopback

Profile

uzverss: (Default)
uzverss

December 2024

S M T W T F S
12345 67
891011121314
15161718192021
22232425262728
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 18th, 2025 08:24 am
Powered by Dreamwidth Studios