Установка и настройка ffmpeg + x264 + MP3 + AAC + Xvid + AMR on Ubuntu 12.04

Опубликовано:

Установка ffmpeg с поддержкой кодека x264 из исходных кодов

— Удаляем пакеты x264, libx264-dev, и ffmpeg если они были установлены:

Код:
$ sudo apt-get purge ffmpeg x264 libx264-dev libmp3lame-dev

— Если включено автообновление пакетов в системе, запрещаем обновлять пакет ffmpeg:
Если файл «/etc/apt/apt.conf.d/50unattended-upgrades» существует то прописываем в секцию «Package-Blacklist» пакет ffmpeg, если файла нет, создаем его:

Код:
$ sudo echo -e "Unattended-Upgrade::Package-Blacklist {n "ffmpeg";n};" > /etc/apt/apt.conf.d/50unattended-upgrades

 

Для сборки  x264  необходима последняя версия yasm. Проверим какая версия установленна:

Код:

$ yasm --version
yasm 1.2.0
Compiled on Nov 20 2013.

Если версии совпадают то попускаем следующий шаг

Код:

$ apt-get remove yasm
$ wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
$ tar xvfz yasm-1.2.0.tar.gz
$ cd yasm-1.2.0
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
$ yasm --version
   yasm 1.2.0
Compiled on Nov 20 2013.

 

— Получаем зависимые пакеты необходимые для установки ffmpeg и x264:

Код:
$ sudo apt-get update
$ sudo apt-get install build-essential subversion texi2html libfaac-dev libfaad-dev libmp3lame-dev libtheora-dev quilt libsdl1.2-dev libogg-dev libvorbis-dev liba52-dev libdts-dev libimlib2-dev libraw1394-dev libdc1394-22-dev libtheora-dev libgsm1-dev  libfaac-dev libfaad-dev git-core checkinstall yasm libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libx11-dev  libxfixes-dev zlib1g-dev nasm python-chardet gstreamer1.0-libav gstreamer0.10-ffmpeg

Если в процессе установки получили ошибку на зависимости пакета gstreamer0.10-ffmpeg

добавим новый репозиторий и обновим индексы

sudo add-apt-repository ppa:mc3man/trusty-media
sudo apt-get update

после чего повторяем процесс установки пакетов

 

— Устанавливаем x264 из исходников

Код:
$ mkdir ~/src; cd ~/src
$ git clone git://git.videolan.org/x264.git
$ cd ./x264/
$ ./configure --prefix=/usr/local --enable-shared
$ make
$ sudo checkinstall --pkgname=x264 --pkgversion "2:0.`grep X264_BUILD x264.h -m1 | 
 cut -d' ' -f3`.`git rev-list HEAD | wc -l`+git`git rev-list HEAD -n 1 | 
 head -c 7`" --backup=no --deldoc=yes --fstrans=no --default
sudo checkinstall --pkgname=x264 --pkgversion "2:0.`grep X264_BUILD x264.h -m1 | cut -d' ' -f3`.`git rev-list HEAD | wc -l`+git`git rev-list HEAD -n 1 | head -c 7`" --backup=no --default
$ sudo make install-lib-dev && sudo cp libx264.a /usr/local/lib/

 

— Устанавливаем x264_b10 из исходников

Код:
$ mkdir ~/src; cd ~/src
$ git clone git://git.videolan.org/x264.git
$ cd ./x264/
$ ./configure --prefix=/usr/local --enable-shared --bit-depth=10
$ make
$ sudo checkinstall --pkgname=x264_b10 --pkgversion "2:0.`grep X264_BUILD x264.h -m1 | 
 cut -d' ' -f3`.`git rev-list HEAD | wc -l`+git`git rev-list HEAD -n 1 | 
 head -c 7`" --backup=no --deldoc=yes --fstrans=no --default
$ sudo make install-lib-dev
$ sudo cp libx264.a /usr/local/lib/

Проверим какая версия  lame установленна:

Код:

$lame -h
LAME 64bits version 3.99.5 (http://lame.sf.net)

Если  получили ответ  что версия старше 3.99 то пропускаем следующий шаг

— Устанавливает поддержку кодека lame

Код:
$cd ~/src
$ sudo mkdir -p /usr/local/share/doc/lame
$ wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
$ tar xzvf lame-3.99.5.tar.gz
$ cd lame-3.99.5
$ ./configure --enable-nasm --disable-shared
$ make
$ sudo checkinstall --pkgname=lame-ffmpeg --pkgversion="3.99.5" --backup=no --default --deldoc=yes

— Устанавливаем [urlspan]libxvid[/urlspan] из исходников

Код:
$ cd ~/src
$ wget http://downloads.xvid.org/downloads/xvidcore-1.3.3.tar.gz
$ tar xzvf xvidcore-1.3.3.tar.gz
$ cd ./xvidcore/build/generic
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
apt-get install libopencore-amrnb-dev libopencore-amrwb-dev libgsm1-dev libfaac-dev libtheora-dev libvorbis-dev libx264-dev libdc1394-22-dev libxext-dev libxfixes-dev

— Устанавливаем ffmpeg с поддержкой кодека x264:

Код:
$ cd ~/src
$ git clone git://git.videolan.org/ffmpeg.git
$ cd ffmpeg/
$ ./configure --prefix=/usr/local --enable-gpl --enable-postproc --enable-swscale --enable-pthreads --enable-x11grab --enable-libdc1394 --enable-libfaac --enable-libgsm --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-nonfree --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb  --enable-shared
$ make
$ sudo checkinstall --pkgname=ffmpeg --pkgversion="7:$(date +%Y%m%d%H%M)-git" --backup=no --deldoc=yes --fstrans=no --default
$ hash x264 ffmpeg ffplay ffprobe
$ldconfig -v
  • устанавливаем необходимые утилиты кодирования
Код:
$ sudo apt-get install mkvtoolnix gpac mencoder  dvdrip avidemux

Проверим установку

Код:
$ which ffmpeg
/usr/local/bin/ffmpeg

$ ffmpeg -encoders|grep -E «mp3|xvid|aac|gsm|amr|x264|theora|vorbis»
ffmpeg version N-55691-gca7f637 Copyright © 2000—2013 the FFmpeg developers
built on Aug 21 2013 15:44:17 with gcc 4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5)
configuration: --prefix=/usr/local --enable-gpl --enable-version3 --enable-nonfree --enable-shared --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libfaac --enable-libgsm --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid
libavutil      52. 42.100 / 52. 42.100
libavcodec     55. 29.100 / 55. 29.100
libavformat    55. 14.100 / 55. 14.100
libavdevice    55.  3.100 / 55.  3.100
libavfilter     3. 82.100 /  3. 82.100
libswscale      2.  5.100 /  2.  5.100
libswresample   0. 17.103 /  0. 17.103
libpostproc    52.  3.100 / 52.  3.100
V... libx264              libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (codec h264)
V... libx264rgb           libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 RGB (codec h264)
V... libxvid              libxvidcore MPEG-4 part 2 (codec mpeg4)
V... libtheora            libtheora Theora (codec theora)
A...X... aac                  AAC (Advanced Audio Coding)
A... libfaac              libfaac AAC (Advanced Audio Coding) (codec aac)
A... libopencore_amrnb    OpenCORE AMR-NB (Adaptive Multi-Rate Narrow-Band) (codec amr_nb)
A... libgsm               libgsm GSM (codec gsm)
A... libgsm_ms            libgsm GSM Microsoft variant (codec gsm_ms)
A... libmp3lame           libmp3lame MP3 (MPEG audio layer 3) (codec mp3)
A...X... vorbis               Vorbis
A... libvorbis            libvorbis (codec vorbis)

Примеры использования

Кодирование в один проход:

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

Чем ниже параметр -crf, тем выше качество, но больше файл. Разумными являются значения от 18 до 28.

Двухпроходное кодирование:

ffmpeg -i input.avi -pass 1 -vcodec libx264 -vpre fast_firstpass -b 512k -bt 512k
 -threads 0 -f rawvideo -an -y /dev/null && ffmpeg -i input.avi -pass 2 -acodec libfaac
 -ab 128k -ac 2 -vcodec libx264 -vpre fast -b 512k -bt 512k -threads 0 output.mp4

Перекодирование для iPod (640×480):

ffmpeg -i input.avi -acodec libfaac -aq 100 -ac 2 -vcodec libx264 -vpre slow
 -vpre ipod640 -crf 26 -map_meta_data 0:0 -vf scale=640:-1 -threads 0 output.mp4

1. Получение информации о видеофайле

ffmpeg -i video.avi

2. Превратить набор картинок в видео

ffmpeg -f image2 -i image%d.jpg video.mpg
Эта команда преобразует все картинки из текущей директории (названные image1.jpg, image2.jpg и т.д.) в видеофайл video.mpg
(примечание переводчика: мне больше нравится такой формат:
ffmpeg -r 12 -y -i <span class="string">"image_%010d.png"</span> output.mpg

здесь задаётся frame rate (12) для видео, формат «image_%010d.png» означает, что картинки будут искаться в виде image_0000000001.png, image_0000000002.png и тд, то есть, в формате printf)

3. Порезать видео на картинки

ffmpeg -i video.mpg image%d.jpg

Эта команда создаст файлы image1.jpg, image2.jpg и т.д., поддерживаются так же форматы PGM, PPM, PAM, PGMYUV, JPEG, GIF, PNG, TIFF, SGI.

4. Конвертировать видео в формат iPod/iPhone

ffmpeg -i source_video.avi input -acodec aac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320x180 -title X final_video.mp4

Пояснения:

  • Источник: source_video.avi
  • Аудио кодек: aac
  • Битрейт аудио: 128kb/s
  • Видео кодек: mpeg4
  • Битрейт видео: 1200kb/s
  • Размер видео: 320 на 180 пикселей
  • Полученное видео: final_video.mp4

5. Конвертировать видео в формат PSP

ffmpeg -i source_video.avi -b 300 -s 320x240 -vcodec xvid -ab 32 -ar 24000 -acodec aac final_video.mp4

Пояснения:

  • Источник: source_video.avi
  • Аудио кодек: aac
  • Битрейт аудио: 32kb/s
  • Видео кодек: xvid
  • Битрейт видео: 1200kb/s
  • Размер видео: 320 на 180 пикселей
  • Полученное видео: final_video.mp4

6. Извлечь звуковую дорожку из видео и сохранить в mp3

ffmpeg -i source_video.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 sound.mp3

Пояснения:

  • Источник: source_video.avi
  • Битрейт аудио: 192kb/s
  • Выходной формат: mp3
  • Полученный аудиофайл: sound.mp3

7. Конвертировать wav в mp3

ffmpeg -i son_origine.wav -vn -ar 44100 -ac 2 -ab 192 -f mp3 son_final.mp3</code><span style="line-height: 1.5;"> </span></pre>
<h3>8. Конвертировать .avi в .mpg</h3>
<pre><code class="bash">ffmpeg -i video_origine.avi video_finale.mpg</code><span style="line-height: 1.5;"> </span></pre>
<h3>9. Конвертировать .mpg в .avi</h3>
<pre><code class="bash">ffmpeg -i video_origine.mpg video_finale.avi

10. Конвертировать .avi в .gif (без сжатия)

ffmpeg -i video_origine.avi gif_anime.gif

11. Добавить звук к видео

ffmpeg -i son.wav -i video_origine.avi video_finale.mpg

12. Конвертировать .avi в .flv

ffmpeg -i video_origine.avi -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv video_finale.flv

13. Конвертировать .avi в .dv

ffmpeg -i video_origine.avi -s pal -r pal -aspect 4:3 -ar 48000 -ac 2 video_finale.dv

или

ffmpeg -i video_origine.avi -target pal-dv video_finale.dv

14. Конвертировать .avi в mpeg для DVD-плееров

ffmpeg -i source_video.avi -target pal-dvd -ps 2000000000 -aspect 16:9 finale_video.mpeg

Пояснения:

  • Выходной формат: pal-dvd
  • Максимальный размер для выходного файла: 2000000000 (2 Gb)
  • Широкоэкранный формат: 16:9

15. Сжать .avi в DivX

ffmpeg -i video_origine.avi -s 320x240 -vcodec msmpeg4v2 video_finale.avi

16. Сжать [urlspan]OGG Theora[/urlspan] в mpeg DVD

ffmpeg -i film_sortie_cinelerra.ogm -s 720x576 -vcodec mpeg2video -acodec mp3 film_termin.mpg

17. Сжать .avi в [urlspan]SVCD[/urlspan] mpeg2

Формат NTSC:

ffmpeg -i video_origine.avi -target ntsc-svcd video_finale.mpg

Формат [urlspan]PAL[/urlspan]:

ffmpeg -i video_origine.avi -target pal-svcd video_finale.mpg

18. Сжать .avi в [urlspan]VCD[/urlspan] mpeg2

Формат NTSC:

ffmpeg -i video_origine.avi -target ntsc-vcd video_finale.mpg

Формат PAL:

ffmpeg -i video_origine.avi -target pal-vcd video_finale.mpg

19. Многопроходное кодирование с помощью ffmpeg

ffmpeg -i fichierentree -pass 2 -passlogfile ffmpeg2pass fichiersortie-2

20. Конвертировать .m4b в .mp3

ffmpeg -i filename.m4b -acodec libmp3lame -ar 22050 filename.mp3
или
find -iname '*.m4b' -print0 | xargs -0 -I {} ffmpeg -i {} -acodec libmp3lame -ar 22050 {}.mp3

 Обновление

Удаляем ранее установленные пакеты:

sudo apt-get remove ffmpeg x264 libx264-dev

Обновляем x264:

cd ~/src/x264
make distclean
git pull

Обновляем FFmpeg:

cd ~/src/ffmpeg
make distclean
svn update

В обоих случаях повторяем процедуру установки FFmpeg и x264, как было описано ранее, только с места «./configure ля-ля-ля...»

Отмена всех изменений, проделанных по данной инструкции

sudo apt-get remove x264 ffmpeg build-essential subversion git-core
 checkinstall yasm texi2html libfaac-dev libmp3lame-dev libsdl1.2-dev libtheora-dev
 libvorbis-dev libvpx-dev libx11-dev libxfixes-dev libxvidcore-dev zlib1g-dev
rm -rf ~/src/x264 ~/src/ffmpeg

 

Дополнение

если необходимо установить x264 для работы с видео в 10 бит. Тогда да. Стоит все это проделывать. Теперь по поводу библиотеке libx264. ffmpeg в убунту работает не с кодеком x264 а непосредственно с библиотекой кодирования libx264.so.123 она расположена в директории с архитектурно зависимыми библиотеками. Вопервых для нормальной конфигурации x264 к работе в связке с ffmpeg (получения видео потока для кодирования от ffmpeg) перед началом конфигурации x264 необходимо установить следующие пакеты: libavformat-dev, libffms2-dev, libgpac-dev, libswscale-dev. После установки этих пакетов выполнив ./configure мы увидим следующее:

/scr/x264$ ./configure
fatal: Not a git repository (or any of the parent directories): .git
platform: X86_64
system: LINUX
cli: yes
libx264: internal внутренняя библиотека кодирования libx264
shared: no — системная билиотека libx264.so.*** собираться не будет. а именно ее использует ffmpeg для кодирования и обработки видео.
static: no
asm: yes — сборка, оптимизированная для процессора, установленного на компе
interlaced: yes — включена поддерка работы с черестрочным видео
avs: no — отключена поддержка работы с avisync на линуксе его нету
lavf: yes — включена поддержка входных файлов всех форматов, которые понимает ffmpeg
ffms: yes — тоже включение поддержки ffmpeg что конкретно — неведаю. Вроде поддержка форматов, которые ffmpeg может обрабатывать некорректро или что-то вроде того.
gpac: yes
gpl: yes
thread: posix
filters: resize crop select_every
debug: no
gprof: no
strip: no
PIC: no
visualize: no
bit depth: 8 кодирование в видео файлы с глубиной цвета только 8 бит
chroma format: all

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

--prefix=/usr — все компилированные файлы будут располагаться в программной директории /usr
— bindir=/usr/bin — поместит кодек x264 в программную папку /usr/bin а не в папку собранных локально программ /usr/local/bin установленной по умолчаню.
— libdir=/usr/lib/x86_64-linux-gnu — поместит библиотеку кодирования libx264.so.*** в директорию архитектурно зависимых библиотек (обращаю ваше внимание, что у меня 64 разрядная система и соответственно используется директория «x86_64-linux-gnu» для других архитектур следует использовать и друкую директорию)
— enable-shared — включает создание динамической библиотеки кодирования libx264.so.*** которую и будет искать ffmpeg при конфигурации с включенной поддержкой кодека x264 (насколько я знаю ее надо включать ключем конфигурации а там кто его знает я еще не пробовал компилить сам ffmpeg возможно для связки ffmpeg c libx264.so.*** придется включать еще какие нибудь ключи конфигурации)
— enable-static — включает создание статических библиотек libx264.so (примечание ffmpeg работает с динамической а не статической библиотекой. У динамической библиотеки в названии файла в конце стоит еще и номер версии. Именно поэтому после установки новой версии кодека x264 для обеспечения работы с ним ffmpeg его(ffmpeg) каждый раз приходиться пересобирать поновой.
— bit-depth=10 — включается конфигурация кодека для сборки только 10 битного видео (в том числе и библиотеки. Воспроизводиться будет как 8-ми битное видео, так и 10-битное, а вот создаваться этим кодеком будет только 10 битное видео. если эта опция не нужна — тогда не ставьте ее и будет собран кодек, который будет создавать только 8-ми битное видео.

Вот, что мы получим при конфигурации кодека с данными ключами:

/scr/x264$ ./configure --prefix=/usr --bindir=/usr/bin --libdir=/usr/lib/x86_64-linux-gnu --enable-shared --enable-static --bit-depth=10
fatal: Not a git repository (or any of the parent directories): .git
platform: X86_64
system: LINUX
cli: yes — работа в командной строке
libx264: internal — создание внутренних библиотек
shared: yes — создание динамических библиотек
static: yes — создание статических библиотек
asm: yes — оптимизация для процессора (перед сборкой нужно установить yasm
interlaced: yes — работа с черезстрочным видео
avs: no — avisync побоку
lavf: yes — поддержка форматов ffmpeg
ffms: yes — поддержка друких форматов
gpac: yes — оптимизация работы с OpenSourse Multimedia
gpl: yes
thread: posix
filters: resize crop select_every
debug: no
gprof: no
strip: no
PIC: yes
visualize: no
bit depth: 10 — Создание токлько 10 битного видео (профили кодирования High10, High422 и High444
chroma format: all

Более подробную информацию о ключах конфигурации кодека x264 можно просмотреть набрав в директории с исходными кодами x264 команду ./configure -h

в принципе вот вам ее содержание:

/scr/x264$ ./configure -h
Usage: ./configure [options]
Help:
— h, --help print this message
Standard options:
— prefix=PREFIX install architecture-independent files in PREFIX
[/usr/local]
— exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[PREFIX]
— bindir=DIR install binaries in DIR [EPREFIX/bin]
— libdir=DIR install libs in DIR [EPREFIX/lib]
— includedir=DIR install includes in DIR [PREFIX/include]
— extra-asflags=EASFLAGS add EASFLAGS to ASFLAGS
— extra-cflags=ECFLAGS add ECFLAGS to CFLAGS
— extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS
Configuration options:
— disable-cli disable cli
— system-libx264 use system libx264 instead of internal
— enable-shared build shared library
— enable-static build static library
— disable-gpl disable GPL-only features
— disable-thread disable multithreaded encoding
— enable-win32thread use win32threads (windows only)
— disable-interlaced disable interlaced encoding support
— enable-visualize enable visualization (X11 only)
— bit-depth=BIT_DEPTH set output bit depth (8-10) [8]
— chroma-format=FORMAT output chroma format (420, 422, 444, all) [all]
Advanced options:
— disable-asm disable platform-specific assembly optimizations
— enable-debug add -g
— enable-gprof add -pg
— enable-strip add -s
— enable-pic build position-independent code
Cross-compilation:
— host=HOST build programs to run on HOST
— cross-prefix=PREFIX use PREFIX for compilation tools
— sysroot=SYSROOT root of cross-build tree
External library support:
— disable-avs disable avisynth support (windows only)
— disable-swscale disable swscale support
— disable-lavf disable libavformat support
— disable-ffms disable ffmpegsource support
— disable-gpac disable gpac support

Понравилась статья, расскажи о ней друзьям, нажми кнопку!