Установка и настройка 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
Формат [urlspan]NTSC[/urlspan]:
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. [urlspan]Многопроходное кодирование[/urlspan] с помощью 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