Сборка FFmpeg для CentOS 6

Alex

Administrator
Команда форума
Сообщения
102
Баллы
16
Для преобразования различных видео и аудио форматов в Linux есть набор утилит и библиотек под названием FFmpeg. Как и полагается в лучших традициях Linux в FFmpeg все преобразования и обработку можно делать из командной строки, поэтому он очень удобен для написания различного рода скриптов.

1. Вступление
FFmpeg для CentOS 6 есть в репозитории RPM Fusion, установка его как всегда проста и прозаична:

Код:
[[email protected] ~]# rpm -ihv http://download1.rpmfusion.org/free/el/updates/6/i386/rpmfusion-free-release-6-1.noarch.rpm
[[email protected] ~]# yum install ffmpeg
Однако в этой сборке по-умочанию отсутствует кодек умеющий обрабатывать аудио в формате AAC (Advanced Audio Coding), как вариант можно забрать с RPM Fusion исходники в формате SRPM и пересобрать их при помощи rpmbuild с параметром _with_faac, тем более что такая возможность в SPEC предусмотрена. Сделано все это из-за того что кодек faac имеет не совместимую с GPL лицензию, поэтому собранные версии идут без этого кодека, а пользователи потом уже могут пересобрать как им захочется.

Я лично отдаю предпочтение FDK AAC, на мой взгляд он более фукционален, поэтому раз из коробки работать не хочет, то эффективнее собрать ручками, причем именно то что нужно.

Что бы было более понятно, немного опишу свои задачи, мне нужно в автоматичеком режиме переконвертировать кучу видео записей в формате MP4(h264/aac), при этом на выходе должны получиться три видео с разными разрешениями, скриншот в формате jpeg, и файл .slim для jw player. Делается это все для того что бы в jw player можно было выбирать видео с разным качеством в зависимости от ширины канала.

В статье используется CentOS 6.3 x86_64.

2. Собираем libx264
Libx264 – это свободно распространяемая библиотека для кодирования видеопотока в формате H.264/MPEG-4 AVC. Перед началом сборочного процесса нужно добавить репозиторий RPMForge и сразу поставить все необходимые пакеты:

Код:
[[email protected] ~]# rpm -ihv http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
[[email protected] ~]# yum install git autoconf automake gcc gcc-c++ libtool make yasm pkgconfig
Скачиваем последнюю версию исходников из git-репозитория, и переходим в директорию с ними:

Код:
[[email protected] ~]# git clone git://git.videolan.org/x264.git
[[email protected] ~]# cd x264
Конфигурируем, собираем и устанавливаем:

Код:
[[email protected] x264]# ./configure --prefix=/usr --bindir=/usr/bin --libdir=/usr/lib64 --disable-asm --enable-shared
[[email protected] x264]# make && make install
[[email protected] x264]# cd ~
3. Собираем libfdk-aac
Библиотека libdfk-aac используется для кодирования звукового потока в формате AAC, она считается лучшим кодером в этом формате для FFmpeg. Забираем из git-репозитория исходники:

Код:
[[email protected] ~]# git clone https://github.com/mstorsjo/fdk-aac.git
[[email protected] ~]# cd fdk-aac
Запускаем autoreconf для создания скрипта configure, затем конифгурируем, собираем и устанавливаем:

Код:
[[email protected] fdk-aac]# autoreconf -i
[[email protected] fdk-aac]# ./configure --prefix=/usr --bindir=/usr/bin --libdir=/usr/lib64 --disable-shared
[[email protected] fdk-aac]# make && make install
[[email protected] fdk-aac]# cd ~
4. Сборка FFmpeg
Скачиваем исходники и переходим в директорию с ними:

Код:
[[email protected] ~]# git clone git://source.ffmpeg.org/ffmpeg.git
[[email protected] ~]# cd ffmpeg
Конфигурируем, собираем и устанавливаем:

[[email protected] ffmpeg]# ./configure --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --enable-nonfree --enable-libfdk-aac --enable-gpl --enable-libx264
[[email protected] ffmpeg]# make && make install
[[email protected] ffmpeg]# cd ~
В принципе, в сборке нет ничего сложного, сначала по стандартной схеме собираем кодеки (библиотеки), потом по такой же схеме собираем ffmpeg с указанием на существование этих библиотек. Точно так же можно собрать ffmpeg с другим набором библиотек, например добавив туда MP3-кодер libmp3lame.

5. Использование FFmpeg
Конвертируем видео запись с заданным разрешением и битрейтом:

Код:
[[email protected] ~]# ffmpeg -i /mnt/00000.mp4 -vcodec libx264 -b:v 200k -s 320x180 -acodec libfdk_aac -vbr 1 00000l.mp4
Параметры:
-i имя конвертируемого файла
-vcodec библиотека для кодирования видео-потока
-b:v битрейт выходного видео-потока
-s размеры выходного видео
-acodec библиотека для кодирования аудио-потока
-vbr кодируем аудио с переменным битрейтом 1 - 32kbps, 2 - 40kbps, ..
Делаем скриншот от первой секунды видео:
Код:
[[email protected] ~]# ffmpeg -i /mnt/00000.mp4 -an -ss 00:00:01 -vframes 1 -s 640x360 -f mjpeg 00000.jpg
-i исходный видео-файл
-an не кодировать звук
-ss время для скриншота от начала видео-записи
-vframes количество кадров, для нашего случая 1
-f формат выходного файла
Функционал ffmpeg намного шире нежели чем описанный в этой статье, я привожу лишь ту часть которая мне понадобилась для решения непосредственно моей задачи.
 
Сверху