Для преобразования различных видео и аудио форматов в Linux есть набор утилит и библиотек под названием FFmpeg. Как и полагается в лучших традициях Linux в FFmpeg все преобразования и обработку можно делать из командной строки, поэтому он очень удобен для написания различного рода скриптов.
1. Вступление
FFmpeg для CentOS 6 есть в репозитории RPM Fusion, установка его как всегда проста и прозаична:
[root@msr01 ~]# rpm -ihv http://download1.rpmfusion.org/free/el/updates/6/i386/rpmfusion-free-release-6-1.noarch.rpm [root@msr01 ~]# 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 и сразу поставить все необходимые пакеты:
[root@msr04 ~]# rpm -ihv http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm [root@msr04 ~]# yum install git autoconf automake gcc gcc-c++ libtool make yasm pkgconfig
Скачиваем последнюю версию исходников из git-репозитория, и переходим в директорию с ними:
[root@msr04 ~]# git clone git://git.videolan.org/x264.git [root@msr04 ~]# cd x264
Конфигурируем, собираем и устанавливаем:
[root@msr04 x264]# ./configure --prefix=/usr --bindir=/usr/bin --libdir=/usr/lib64 --disable-asm --enable-shared [root@msr04 x264]# make && make install [root@msr04 x264]# cd ~
3. Собираем libfdk-aac
Библиотека libdfk-aac используется для кодирования звукового потока в формате AAC, она считается лучшим кодером в этом формате для FFmpeg. Забираем из git-репозитория исходники:
[root@msr04 ~]# git clone https://github.com/mstorsjo/fdk-aac.git [root@msr04 ~]# cd fdk-aac
Запускаем autoreconf для создания скрипта configure, затем конифгурируем, собираем и устанавливаем:
[root@msr04 fdk-aac]# autoreconf -i [root@msr04 fdk-aac]# ./configure --prefix=/usr --bindir=/usr/bin --libdir=/usr/lib64 --disable-shared [root@msr04 fdk-aac]# make && make install [root@msr04 fdk-aac]# cd ~
4. Сборка FFmpeg
Скачиваем исходники и переходим в директорию с ними:
[root@msr04 ~]# git clone git://source.ffmpeg.org/ffmpeg.git [root@msr04 ~]# cd ffmpeg
Конфигурируем, собираем и устанавливаем:
[root@msr04 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 [root@msr04 ffmpeg]# make && make install [root@msr04 ffmpeg]# cd ~
В принципе, в сборке нет ничего сложного, сначала по стандартной схеме собираем кодеки (библиотеки), потом по такой же схеме собираем ffmpeg с указанием на существование этих библиотек. Точно так же можно собрать ffmpeg с другим набором библиотек, например добавив туда MP3-кодер libmp3lame.
5. Использование FFmpeg
Конвертируем видео запись с заданным разрешением и битрейтом:
[root@msr04 ~]# 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, ..
Делаем скриншот от первой секунды видео:
[root@msr04 ~]# 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 намного шире нежели чем описанный в этой статье, я привожу лишь ту часть которая мне понадобилась для решения непосредственно моей задачи.
Один комментарий : “Сборка FFmpeg для CentOS 6”
Спасибо!
Единственная инструкция, которая помогла.
До этого 4 другие испробовал и запинался на одном из шагов.
Теперь конвертирую на сервере и не мучаю свой ноут