Linux -- это интересно

Установка последних версий FFmpeg и x264 (на примере Ubuntu)


Рубрика: Дополнительные материалы -> Аудио и видео ПО
Метки: | | |
Просмотров: 46592

ffmpeg и x264

FFmpeg - это универсальный инструмент для кодирования и декодирования множества видео и аудио форматов, хотя FFmpeg и x264 есть в официальных репозитариях различных дистрибутивов, иногда возникает необходимость собирать эти пакеты самостоятельно. Дело в том, что FFmpeg из Ubuntu не имеет некоторых кодеков, декодеров и не поддерживает некоторые форматы. К тому же, сами вы соберёте более свежую версию, где будут доступны последние наработки программистов.

Данная инструкция подразумевает, что у вас Ubuntu LTS (10.04) или 10.10.

Подготовительный этап

Для начала потребуется удалить некоторые установленные пакеты и установить необходимые зависимости.

Первым делом удаляем x264, libx264-dev и ffmpeg, если таковые установлены:

sudo apt-get remove ffmpeg x264 libx264-dev

Затем, устанавливаем необходимые для последующей сборки зависимости. Репозитарии universe и multiverse должны быть подключены!

sudo apt-get update
sudo apt-get install build-essential subversion git-core checkinstall yasm texi2html \
 libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev \
 libtheora-dev libvorbis-dev libvpx-dev libx11-dev libxfixes-dev libxvidcore-dev lib1g-dev

Установка x264

Создаём в домашней директории каталог src:

mkdir ~/src

И выполняем следующее:

cd ~/src
git clone git://git.videolan.org/x264.git
cd x264
./configure
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

После этих действий будет собран и установлен пакет x264, который можно будет удалить/обновить в будущем.

Установка FFmpeg

Получив исходные коды FFmpeg команда "./configure --help" позволит увидеть опции, которые можно включить или выключить. Итак, собираем и устанавливаем пакет:

cd ~/src
svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg
cd ffmpeg
./configure --enable-gpl --enable-version3 --enable-nonfree --enable-postproc \
 --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb \
 --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis \
 --enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab
make
sudo checkinstall --pkgname=ffmpeg --pkgversion "4:SVN-r`LANG=C svn info | \
 grep Revision | awk '{ print $NF }'`" --backup=no --deldoc=yes --fstrans=no --default
hash x264 ffmpeg ffplay

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

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

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 (640x480):

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

Обновление FFmpeg и x264

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

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

Источник: ubuntuforums.org

Комментариев: 23 RSS

Хотя мне эта тема не нужна на данный момент, и я не пробовал в деле вашу инструкцию. Я говорю вам спасибо, и если бы мог поставил кучу пятёрок как оценки пятибалльной шкалы, то я бы их поставил бы. Статья написано очень достойно, очень хорошо. Особенно радует в конце пункт: "Отмена всех изменений, проделанных по данной инструкции" Ибо мало кто включает такой нужный пункт в статью.

Автор вы молодец, продолжайте в том же духе.

Я конечно надеюсь и принял на веру, что в инструкции этой нет ошибок.

rm -rf ~/src

Осторожно - убедитесь, что там нет других исходников!!

Правильно было бы

rm -rf ~/src/x264 ~/src/ffmpeg

при загрузке исходников по указанным ссылкам возникли проблемы...

При выполнении ./configure для ffmpeg возникает ошибка ERROR: libx264 not found. Как её устранить?

Так же, на Ubuntu Server 11.04 на первом же шаге, не найден пакет lib1g-dev

Что именно "так же"?

Выше не находилось libx264 (как такое могло произойти, я не знаю). Вы же пишете про lib1g-dev. А это совсем не одно и тоже.

$ aptitude search lib1g-dev
i   zlib1g-dev

11.04 - всё есть.

Может кто-нить в курсе, почему у меня при вещание такой дефект образовался? Будто последние строки в кадре повторяются. Вот две картинки - по rtsp (h264) и (flv, swf). FFmpeg запущен строкой:

ffmpeg -s 704x576 -i rtsp://89.105.154.248:5554 http://localhost:8090/feed.ffm.

В конфиге все стандартно.

http://nemezida.su/files/input_video.png
http://nemezida.su/files/output_video.png

Не работает.

Пишет:

libx264 not found

когда делаешь ./configure для ffmpeg

Ну, как-то сложно что-то понять с двух слов.

Всё делали по инструкции? Пакет libx264-dev точно установлен?

Да, делал точно по инструкции. Ubuntu 10.04

Мне помогла эта ссылка

http://ubuntuforums.org/showpost.php?p=9868359&postcount=1289

по ней сделал и все установилось

Это и есть перевод той самой ссылки. Всё проверенно, всё собирается и ставится. Ну не могло оно не находить libx264, если бы был установлен пакет libx264-dev

Валентин15 2012-04-04 в 17:28:39

При выполнении команды:

sudo checkinstall --pkgname=ffmpeg --pkgversion "4:SVN-r`LANG=C svn info | \

grep Revision | awk '{ print $NF }'`" --backup=no --deldoc=yes --fstrans=no --default

hash x264 ffmpeg ffplay

Выдает ошибку:

dpkg-deb: ошибка: parsing file '/var/tmp/tmp.K5VBSaIYSt/package/DEBIAN/control' near line 7 package 'ffmpeg':

ошибка в строке Version «4:SVN-r26402-1»: номер версии начинается не с цифры

~

~

~

~

~

~

~

~

~

~

~

~

~

~

~

~

~

~

(END)

Как с этим бороться??????????

Ну а что непонятно? Номер версии начинается не с цифры. Значит надо сделать так, чтобы он начинатся с цифры.

Номер версии задаётся тут:

--pkgversion "4:SVN-r`LANG=C svn info | \
grep Revision | awk '{ print $NF }'`"

Соответственно, надо указать правильный номер версии. Попробуйте выполнить:

LANG=C svn info | grep Revision | awk '{ print $NF }'

в директории с исходными текстами. Что оно выдаст? И вообще попробуйте просто удалить "SVN-r":

sudo checkinstall --pkgname=ffmpeg --pkgversion "4:`LANG=C svn info | \
     grep Revision | awk '{ print $NF }'`" --backup=no --deldoc=yes --fstrans=no --default
Tranquillity17 2013-07-28 в 23:10:23

Делаю некоторые замечания по данной инструкции. Дело в том, что в Ubuntu и ffmpeg и x264 работают очень даже отлично. Все это проделывать имеет смысл только в случае, если необходимо установить 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
Tranquillity18 2013-07-28 в 23:25:58

Да еще одно замечание: Перед сборкой и установкой кодека x264 с динамической библиотекой кодирования libx264.so.*** необходимо снести страрую библиотеку (удалить из системы пакет libx264) иначе команда checkinstall выдаст ошибку и откажется заменять данную билиотеку.

Под Linux, как всегда, заморочки не из чего.

такая простыня инструкций, что бы просто стоял кодировщик))))))))

Чтобы просто стоял кодировщик, разве не проще его просто поставить? Зачем следовать ингструкции для тех, кто в этом понимает? Это явно не для новичков. А в Ubuntu и так должно всё кодировать нормально без простыней. Если же чего-то нет в стандартной поставке, должен быть ppa c нужными пакетами.

Дмитрий22 2014-07-26 в 22:04:46

добрый день-мне срочно надо установить эти кодеки-нужные файлы загрузил все думаю-у меня мак 10.5.8 просто не работал в терминале до этого-незнаю надо ли руби устанавливать или все так прописывается в терминале?Буду очень благодарен если можно связаться с вами по телефону-сам перезвоню или через агент или скайп-вот мой телефон 8-964-778-91-17

Спасибо. Нашел подобную статью со зборкой ffmpeg-a под Ubuntu 12.04, где добавлено поддержку всех возможных (поддерживаемых) аудио и видео форматов (в том чесле webm, ogv, arm,ogg) - http://sysadm.pp.ua/linux/video-streaming/ffmpeg-build.html . Может пригодиться.

Оставьте комментарий!
Используйте нормальные имена.Войти через loginza
Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email.
(При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д.)



 
(обязательно)