Видео и аудио транскодинг. Сборка ffmpeg

ffmpeg-logoХотел бы поделиться своим маленьким опытом по работе с видеостримингом и обраткой видео/аудио. В предыдущих статьях шла речь о установке wowza для стриминга живых трансляций, но многим клиентам нужна трансляция видео файлов (VOD) в различных битрейтах с различным резолюшеном, чтобы можно было проигрывать видео/аудио на различных устройства в хорошем качестве. Для этого нужно настроить транскодирование видео/аудио файлов в различные форматы. Удобным инструментом в данной ситуации будет ffmpeg с поддержкой целого ряда библиотек, о чем и пойдет речь в данной статье.

Если установить ffmpeg из репозиторий, то у нас не буде поддержки многих форматов, к примеру *.webm, *.vob, *.ogv. По этому буде собирать из исходников. Будем собирать последний, на данный момент, ffmpeg-2.4 пакет на 64-разрядной Ubuntu 12.04. Для начала установим пакеты разработчика

root@ubuntu:~# apt-get install build-essential checkinstall

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

На данный момент это самые последние версии тарболов. Мы будем собирать из них *.deb пакеты, которые можно будет потом установить на любой другой системе, не мучаясь со сборкой. Для этого будем использовать checkinstall. Все бинарники пакетов будем ложить в папку deb.

Линки на нужные пакеты можете найти здесь:

Имя пакета

Сайт

Прямая ссылка

yasm-1.3.0.tar.gz ссылка ссылка
faad2-2.7.tar.gz ссылка ссылка
faac-1.28.tar.gz ссылка ссылка
lame-3.99.5.tar.gz ссылка ссылка
libvorbis-1.3.4.tar.gz ссылка ссылка
libtheora-1.1.1.tar.bz2 ссылка ссылка
libvpx-master.zip ссылка ссылка
last_x264.tar.bz2 ссылка ссылка
opencore-amr-0.1.3.tar.gz ссылка ссылка
xvidcore_1.3.3.orig.tar.gz ссылка ссылка
ffmpeg-2.4.tar.bz2 ссылка ссылка

Начнем с первого. Качаем yasm и делаем сборку пакета. Yasm нам нужен для компиляции x264 библиотеки.

root@ubuntu:~# wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
root@ubuntu:~# tar xzvf yasm-1.3.0.tar.gz
root@ubuntu:~# cd yasm-1.3.0/
root@ubuntu:~/yasm-1.3.0# ./configure
root@ubuntu:~/yasm-1.3.0# make
root@ubuntu:~/yasm-1.3.0# checkinstall --pkgname="yasm" --pkgversion=1.3.0 --deldoc="yes" --type="debian" --install="no" --default --pakdir="../deb/"

Теперь у нас в папке deb лежит первый пакет, который нужен для сборки ffmpeg-а в целом.

root@ubuntu:~/yasm-1.3.0# ls ../deb/
yasm_1.3.0-1_amd64.deb

Далее таким же образом устанавливаем faad2 и faac. AAC энкодер FAAC и декодер FAAD2 для аудио файлов.

root@ubuntu:~/yasm-1.3.0#  cd ..
root@ubuntu:~# wget http://downloads.sourceforge.net/faac/faad2-2.7.tar.gz
root@ubuntu:~# tar xzfv faad2-2.7.tar.gz
root@ubuntu:~# cd faad2-2.7/
root@ubuntu:~/faad2-2.7# ./configure --with-mp4v2
root@ubuntu:~/faad2-2.7# make
root@ubuntu:~/faad2-2.7# checkinstall --pkgname="faad" --pkgversion=2.7 --deldoc="yes" --type="debian" --install="no" --default --pakdir="../deb/"

Теперь качаем и собираем faac.

root@ubuntu:~# wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
root@ubuntu:~# tar xzvf faac-1.28.tar.gz
root@ubuntu:~# cd faac-1.28/
root@ubuntu:~/faac-1.28# ./configure --with-mp4v2
root@ubuntu:~/faac-1.28# make

При сборке данного пакета будет ошибка типа

mpeg4ip.h:126:58: error: new declaration ‘char* strcasestr(const char*, const char*)’
/usr/include/string.h:369:28: error: ambiguates old declaration ‘const char* strcasestr(const char*, const char*)’
make[3]: *** [3gp.o] Error 1
make[3]: Leaving directory `/home/alex/faac-1.28/common/mp4v2'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/alex/faac-1.28/common'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/alex/faac-1.28'
make: *** [all] Error 2

Чтобы исправить эту ошибку, нужно подправить код в файле common/mp4v2/mpeg4ip.h в 126 строке. Вы можете ее убрать вообще или же подправить так:

root@ubuntu:~/faac-1.28# vim common/mp4v2/mpeg4ip.h
…
#ifdef __cplusplus
extern “C” {
#endif
#ifndef _STRING_H
//char *strcasestr(const char *haystack, const char *needle);
#endif
#ifdef __cplusplus
}
#endif
…

Теперь чистим собранные бинарники и запускаем еще раз сборку.

root@ubuntu:~/faac-1.28# make clean
root@ubuntu:~/faac-1.28# ./configure --with-mp4v2
root@ubuntu:~/faac-1.28# make
root@ubuntu:~/faac-1.28# checkinstall --pkgname="faac" --pkgversion=1.28 --deldoc="yes" --type="debian" --install="no" --default --pakdir="../deb/"

Далее собираем lame. Это бесплатный кодек (free software), который используется для кодирование/декодирования MP3 аудио файлов.

root@ubuntu:~# wget http://switch.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
root@ubuntu:~# tar xzfv lame-3.99.5.tar.gz
root@ubuntu:~# cd lame-3.99.5/
root@ubuntu:~/lame-3.99.5# ./configure
root@ubuntu:~/lame-3.99.5# make
root@ubuntu:~/lame-3.99.5# checkinstall --pkgname="lame" --pkgversion=3.99.5 --deldoc="yes" --type="debian" --install="no" --default --pakdir="../deb/"

На подходе libvorbis. Этот пакет нужен для vorbis аудио форматов (свободный формат сжатия звука с потерями ). Служит для сжатия звука на средних и высоких битрейтах (16-500 (кбит/c)/канал)

root@ubuntu:~# wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.4.tar.gz
root@ubuntu:~# tar xzvf libvorbis-1.3.4.tar.gz
root@ubuntu:~# cd libvorbis-1.3.4/
root@ubuntu:~/libvorbis-1.3.4# ./configure

Мы получим ошибку:

checking for Ogg... no
*** Could not run Ogg test program, checking why...
*** The test program failed to compile or link. See the file config.log for the
*** exact error that occured. This usually means Ogg was incorrectly installed
*** or that you have moved Ogg since it was installed.
configure: error: must have Ogg installed!

Чтобы её исправить, нужно установить дополнительный пакет и продолжить сборку пакета.

root@ubuntu:~/libvorbis-1.3.4# apt-get install libogg-dev
root@ubuntu:~/libvorbis-1.3.4# ./configure
root@ubuntu:~/libvorbis-1.3.4# make
root@ubuntu:~/libvorbis-1.3.4# checkinstall --pkgname="libvorbis" --pkgversion=1.3.4 --deldoc="yes" --type="debian" --install="no" --default --pakdir="../deb/"

Беремся за libtheora. Это видеокодек, для поддержки Theora форматов сжатия видео (*.ogv, *.ogg)

root@ubuntu:~# wget http://downloads.xiph.org/releases/theora/libtheora-1.1.1.tar.bz2
root@ubuntu:~# tar xjvf libtheora-1.1.1.tar.bz2
root@ubuntu:~# cd libtheora-1.1.1/
root@ubuntu:~/libtheora-1.1.1# ./configure
root@ubuntu:~/libtheora-1.1.1# make
root@ubuntu:~/libtheora-1.1.1# checkinstall --pkgname="libtheora" --pkgversion=1.1.1 --deldoc="yes" --type="debian" --install="no" --default --pakdir="../deb/"

Далее ставим libvpx для поддержки Googl-овского формата видео — *.webm, основанном на открытом видеокодеке VP8, аудиокодеке Vorbis.

root@ubuntu:~# wget https://github.com/webmproject/libvpx/archive/master.zip
root@ubuntu:~# unzip master.zip
root@ubuntu:~# cd libvpx-master/
root@ubuntu:~/libvpx-master# ./configure --enable-pic --enable-vp8 --enable-shared
root@ubuntu:~/libvpx-master# make
root@ubuntu:~/libvpx-master# checkinstall --pkgname="libvpx" --pkgversion=2.1.0 --deldoc="yes" --type="debian" --install="no" --default --pakdir="../deb/"

Теперь устанавливаем x264. Свободная библиотека программных компонентов для кодирования видеопотоков H.264 (лицензируемый стандарт сжатия видео, предназначенный для достижения высокой степени сжатия видеопотока при сохранении высокого качества).

root@ubuntu:~# wget ftp://ftp.videolan.org/pub/x264/snapshots/last_x264.tar.bz2
root@ubuntu:~# tar xjvf last_x264.tar.bz2
root@ubuntu:~# cd x264-snapshot-20140920-2245/
root@ubuntu:~/x264-snapshot-20140920-2245# ./configure --enable-shared --enable-static
root@ubuntu:~/x264-snapshot-20140920-2245# make
root@ubuntu:~/x264-snapshot-20140920-2245# ./version.sh
#define X264_VERSION ""
#define X264_POINTVER "0.142.x"
root@ubuntu:~/x264-snapshot-20140920-2245# checkinstall --pkgname="x264" --pkgversion=0.142 --deldoc="yes" --type="debian" --install="no" --default --pakdir="../deb/"

Далее ставим opencore-amr. Аудиокодек для адаптивного кодирования с переменной скоростью. Это стандарт кодирования звуковых файлов, специально предназначенный для сжатия сигнала в речевом диапазоне частот. Формат звуковых файлов *.arm

root@ubuntu:~# wget http://garr.dl.sourceforge.net/project/opencore-amr/opencore-amr/opencore-amr-0.1.3.tar.gz
root@ubuntu:~# tar -xzvf opencore-amr-0.1.3.tar.gz
root@ubuntu:~# cd opencore-amr-0.1.3/
root@ubuntu:~/opencore-amr-0.1.3# ./configure
root@ubuntu:~/opencore-amr-0.1.3# make
root@ubuntu:~/opencore-amr-0.1.3# checkinstall --pkgversion=0.1.3 --deldoc="yes" --type="debian" --install="no" --default --pakdir="../deb/"

Далее ставим xvidcore (библиотека сжатия видео стандарта MPEG-4 Part 2).

root@ubuntu:~# wget http://ftp.br.debian.org/debian-multimedia/pool/main/x/xvidcore/xvidcore_1.3.3.orig.tar.gz
root@ubuntu:~# tar xzvf xvidcore_1.3.3.orig.tar.gz
root@ubuntu:~# cd xvidcore-1.3.3/build/generic/
root@ubuntu:~/xvidcore-1.3.3/build/generic# ./configure
root@ubuntu:~/xvidcore-1.3.3/build/generic# make
root@ubuntu:~/xvidcore-1.3.3/build/generic# checkinstall --pkgname="xvidcore" --pkgversion=1.3.3 --deldoc="yes" --type="debian" --install="no" --default --pakdir="~/deb/"

Теперь остался последний, главный пакет, ради которого мы это все делали – ffmpeg. Эго нужно собрать с поддержкой всех либ и кодеков, которые мы собирали до этого.

root@ubuntu:~# wget http://ffmpeg.org/releases/ffmpeg-2.4.tar.bz2
root@ubuntu:~# tar xjvf ffmpeg-2.4.tar.bz2
root@ubuntu:~# cd ffmpeg-2.4/
root@ubuntu:~/ffmpeg-2.4# ./configure --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libvpx --enable-libxvid --enable-x11grab

Мы получим ошибку.

root@ubuntu:~/ffmpeg-2.4# ./configure --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libvpx --enable-libxvid --enable-x11grab

ERROR: Xext not found

Для фикса нужно установить libxext-dev пакет и снова запустить сборку

root@ubuntu:~/ffmpeg-2.4# apt-get install libxext-dev
root@ubuntu:~/ffmpeg-2.4# ./configure --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libvpx --enable-libxvid --enable-x11grab

ERROR: Xfixes not found

Как видим мы получили еще одну ошибку. Чтобы ее исправить нужно установить еще один пакет libxfixes и запустить еще раз сборку.

root@ubuntu:~/ffmpeg-2.4# apt-get install libxfixes-dev
root@ubuntu:~/ffmpeg-2.4# ./configure --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libvpx --enable-libxvid --enable-x11grab
root@ubuntu:~/ffmpeg-2.4# make
root@ubuntu:~/ffmpeg-2.4# checkinstall --pkgname="ffmpeg" --pkgversion=2.4 --deldoc="yes" --type="debian" --install="no" --default --pakdir="../deb/"

Теперь устанавливаем все собранные пакеты.

root@ubuntu:~# ls -1 deb/
faac_1.28-1_amd64.deb
faad_2.7-1_amd64.deb
ffmpeg_2.4-1_amd64.deb
lame_3.99.5-1_amd64.deb
libtheora_1.1.1-1_amd64.deb
libvorbis_1.3.4-1_amd64.deb
libvpx_2.1.0-1_amd64.deb
opencore-amr_0.1.3-1_amd64.deb
x264_0.142.x-1_amd64.deb
xvidcore_1.3.3-1_amd64.deb
yasm_1.3.0-1_amd64.deb

root@ubuntu:~# ls -1 deb/ | grep -v ffmpeg | xargs -i dpkg -i deb/{}
Selecting previously unselected package faac.
(Reading database ... 58191 files and directories currently installed.)
Unpacking faac (from deb/faac_1.28-1_amd64.deb) ...
Setting up faac (1.28-1) ...
Processing triggers for man-db ...
Selecting previously unselected package faad.
(Reading database ... 58219 files and directories currently installed.)
Unpacking faad (from deb/faad_2.7-1_amd64.deb) ...
Setting up faad (2.7-1) ...
Processing triggers for man-db ...
Selecting previously unselected package lame.
(Reading database ... 58244 files and directories currently installed.)
Unpacking lame (from deb/lame_3.99.5-1_amd64.deb) ...
Setting up lame (3.99.5-1) ...
Processing triggers for man-db ...
Selecting previously unselected package libtheora.
(Reading database ... 58307 files and directories currently installed.)
Unpacking libtheora (from .../libtheora_1.1.1-1_amd64.deb) ...
Setting up libtheora (1.1.1-1) ...
Selecting previously unselected package libvorbis.
(Reading database ... 58529 files and directories currently installed.)
Unpacking libvorbis (from .../libvorbis_1.3.4-1_amd64.deb) ...
Setting up libvorbis (1.3.4-1) ...
Selecting previously unselected package libvpx.
(Reading database ... 58896 files and directories currently installed.)
Unpacking libvpx (from deb/libvpx_2.1.0-1_amd64.deb) ...
Setting up libvpx (2.1.0-1) ...
Selecting previously unselected package opencore-amr.
(Reading database ... 58921 files and directories currently installed.)
Unpacking opencore-amr (from .../opencore-amr_0.1.3-1_amd64.deb) ...
Setting up opencore-amr (0.1.3-1) ...
Selecting previously unselected package x264.
(Reading database ... 58947 files and directories currently installed.)
Unpacking x264 (from deb/x264_0.142.x-1_amd64.deb) ...
Setting up x264 (0.142.x-1) ...
Selecting previously unselected package xvidcore.
(Reading database ... 58963 files and directories currently installed.)
Unpacking xvidcore (from deb/xvidcore_1.3.3-1_amd64.deb) ...
Setting up xvidcore (1.3.3-1) ...
Selecting previously unselected package yasm.
(Reading database ... 58968 files and directories currently installed.)
Unpacking yasm (from deb/yasm_1.3.0-1_amd64.deb) ...
Setting up yasm (1.3.0-1) ...
Processing triggers for man-db ...

Теперь ставим ffmpeg.

root@ubuntu:~# dpkg -i deb/ffmpeg_2.4-1_amd64.deb
Selecting previously unselected package ffmpeg.
(Reading database ... 59016 files and directories currently installed.)
Unpacking ffmpeg (from deb/ffmpeg_2.4-1_amd64.deb) ...
Setting up ffmpeg (2.4-1) ...
Processing triggers for man-db ...

Все готово. В следующий раз будем тестировать собранный ffmpeg и поговорим об опциях транскодинга.

Автор: admin, 22 октября 2014
Рубрики: Видеопотоки
Метки:
3 комментария к сообщению: “Видео и аудио транскодинг. Сборка ffmpeg”
  1. Кирилл:

    После команды

    ~/ffmpeg-2.4 $ ./configure —enable-gpl —enable-version3 —enable-nonfree —enable-postproc —enable-libfaac —enable-libmp3lame —enable-libopencore-amrnb —enable-libopencore-amrwb —enable-libvorbis —enable-libx264 —enable-libvpx —enable-libxvid —enable-x11grab

    Пишет это:

    License: nonfree and unredistributable
    Creating config.mak, config.h, and doc/config.texi…
    config.h is unchanged
    config.asm is unchanged
    libavutil/avconfig.h is unchanged

    и deb-файл с ffmpeg не создается. К чему бы это?

    • Ну все гуд — создался файл конфигураций. Теперь нужно запустить make для компиляции модулей и checkinstall для создания deb-пакета, как написано в инструкции.

      • Кирилл:

        Спасибо за ответ. Сделал, но в конце снова повылазили ошибки. Кинул эт дело, и скачал из репозиториев готовую сборку.

Написать комментарий

Последние статьи

Яндекс.Метрика
?>