Компиляция и установка ffmpeg + скринкастинг и кодинг видео

К сожалению нет пакетов собранных со всеми нужными нам флагами. Для создания качественного скринкаста необходимо собрать ffmpeg самостоятельно.
Прежде всего удалим старые пакеты и установим зависимости для сборки. В убунту это делается так

sudo apt-get remove ffmpeg x264 libx264-dev
sudo apt-get update
sudo apt-get install build-essential subversion git-core checkinstall yasm texi2html libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev libvorbis-dev libvpx-dev libx11-dev libxfixes-dev libxvidcore-dev

Теперь создадим папку для компиляции и войдём в неё:

mkdir src
cd src

Скачаем сорцы ffmpeg и x264 и начнём их собирать. Начнём с x264 т.к. он в зависимостях у ffmpeg (его тоже можно бы было скачать из репов, но там старая версия).
Итак качаем и компилируем x264:

git clone git://git.videolan.org/x264.git
cd x264
./configure
make
sudo make install

Выполнив эти команды можно приступать к сборке ffmpeg. Перейдём в папку src, скачаем и откомпилируем ffmpeg:

svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg
cd ffmpeg
./configure --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab
make
sudo make install

Обратите внимание на то, что сконфигурированный ffmpeg необходимо именно с таким набором флагов (конечно вы можете добавить и свои, если они вам нужны)! Все они понадобятся нам для скринкаста.
Теперь всё готово! Можно приступать к захвату видео.
Для захвата видео воспользуемся такой командой:

ffmpeg -f alsa -ac 2 -i pulse -f x11grab -r 30 -s 1366x768 -i :0.0 -acodec pcm_s16le -vcodec libx264 -vpre lossless_ultrafast -threads 0 output.mkv

С такими параметрами ffmpeg будет захватывать видео с дисплея 0,0 с разрешением 1366×768 в формате x264 и звук с alsa с битрейтом 128 (собсна с вашего микрофона)  и помещает всё это дело в файл output.mkv. При этом ffmpeg сам оприделит количество потоков. Вы получите довольно объёмный файл отличного качества. Теперь необходимо его ужать до нужных размеров.

Перекодируем полученный файл в mp4 в высоком качестве:

ffmpeg -i output.mkv -acodec libfaac -ab 128k -ac 2 -vcodec libx264 -vpre slow -crf 22 -threads 0 final.mp4

Этой командой мы перекодировали файл output.mkv используя кодек x264 и контейнер mp4. За параметры сжатия отвечает флаг -crt N. N — коэффициент сжатия. Чем он меньше тем выше качество но больше размер файла. Обычно используют N в диапазоне от 18 до 28.

Обратите внимание, что ffmpeg определяет тип контейнера по расширению выходного файла.

Для обрезки начала и конца видео можно использовать флаги -ss и -t.
-ss указывает точку начала кодирования видео в формате hh:mm:ss (часы:минуты:секунды)
-t продолжительность кодированного видео в том же формате.
Например:

ffmpeg -ss 00:00:10 -t 00:10:32 -i output.mkv bla bla bla...

Начнёт кодировать видео с позиции 10 секунд и будет продолжать 10 минут 32 секунды после этого.

 

Похожий код:

Фото аватара
Алексей Петров

Программист, разработчик с 5 летним опытом работы. Учусь на разработчика игр на Unity и разработчика VR&AR реальности (виртуальной реальности). Основные языки программирования: C#, C++.

Оцените автора
Бла, бла код
Добавить комментарий