Originally published at
Развитие личности, лайфхак, личный опыт, проекты и околоайтишные размышления. Персональный блог Станислава Малкина. You can comment here or
there.
Upd. Продолжение -
http://malkin.com.ua/2010/09/psevdostriming-video-i-poleznye-utility/ В частности речь пойдет про Debian Lenny, но это же самое вполне подойдет и для любого Linux, ровно как и для FreeBSD.
Немного предыстории: с самого начала
видеохостинга у меня ffmpeg был просто втупую поставлен через менеджер пакетов - apt-get install ffmpeg .
Однако со временем я пришел к тому, что версия сильно устаревает (например текущая сборка в lenny датируется маем 2009 года - почти год назад), а версию из sid не всегда удается корректно собрать, и с этим надо что-то делать.
А что делать? Да взять и собрать себе ffmpeg из официального svn. Так и поступим.
Подготовка
Для начала рекомендую удалить ffmpeg, если он уже установлен. В случае менеджера пакетов apt:
apt-get
remove ffmpeg
Если собирали из исходников - достаточно удалить сам бинарник, найдя его через whereis ffmpeg.
После этого нам понадобиться скачать себе файлы из svn ffmpeg (предполагаю, что svn уже установлен в системе, если нет - надо сначала поставить):
svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg
ну или же, если используется git:
git clone git://git.ffmpeg.org/ffmpeg/
cd ffmpeg
git clone git://git.ffmpeg.org/libswscale/
Настройка, сборка и установка
Переходим в папку ffmpeg, слитого с репозитория:
cd ffmpeg
Для установки ffmpeg нужно запустить ./configure с нужным набором ключей. У меня, как думаю и у многих, одной из проблем было какие ключи нужны. Методом проб и ошибок я пришел к такой команде:
./configure -prefix=/usr -libdir=/usr/lib -shlibdir=/usr/lib -bindir=/usr/bin -incdir=/usr/include/ffmpeg -enable-libx264 -enable-postproc -enable-libxvid -enable-pthreads -enable-libvorbis -enable-libfaad -enable-gpl -enable-x11grab -enable-shared -enable-libmp3lame -enable-libtheora -enable-libfaac -enable-libfaad -enable-nonfree -enable-libopencore-amrnb -enable-libopencore-amrwb -enable-libgsm -enable-version3 -enable-avfilter -enable-libspeex -enable-zlib -enable-libschroedinger -disable-encoder=libschroedinger -enable-libdc1394 -disable-mmx -disable-stripping -enable-libdirac -disable-decoder=libdirac -disable-altivec -disable-armv5te -disable-armv6 -disable-vis -enable-avfilter-lavf -enable-libopenjpeg -extra-cflags=-Wall -cc=ccache cc -enable-swscale
Однако это еще не все. Чтобы Makefile сделался с таким набором ключей еще прийдется попотеть, а именно доставить все то, что он потребует (если в системе еще нету). Как правило после запуска конфигуратор скажет что-то типа:
FAAD test failed
Это означает, что нужно установить libfaad, что делается довольно просто:
apt-cache
search libfaad
apt-get install libfaad-dev libfaad0
Сообщения могут быть разными, но суть одна и та же - как правило чего-то не хватает (например -dev библиотеки) и это нужно поставить. Большинство проблем решаются с помощью обычного репозитория для lenny и apt-get install.
Но не все ;P
Исключением будут, как правило, ключи:
1. -enable-libopencore-amrnb -enable-libopencore-amrwb
2. -enable-libx264
3. -enable-libtheora
С этими библиотеками так просто не выйдет. Но тоже решаемо. Разберемся с ними:
1. -enable-libopencore-amrnb -enable-libopencore-amrwb
Ранее этих ключей не было, они пришли на замену -enable-libamr-nd -enable-libamr-wb с июля 2009. Информация с официального сайта:
FFmpeg has removed support for libamr as of svn revision 19365. It has been replaced with support for libopencore-amr. Naturally the configure options have changed. The libamr options have been removed and there are two new options to take their place:
* -enable-libopencore-amrnb
* -enable-libopencore-amrwb
The reason for this change is that the libamr license was non-free, while libopencore-amr is licensed under an Apache 2 license. The change was discussed at length on the developer mailing list during May, June, and July. This has several effects:
* You may now distribute FFmpeg builds with support for dynamically loading libopencore-amr
* Support for AMR-WB encoding has been removed since libopencore-amr does not support it
Это означает, что поддержки из свн данной библиотеки нету. И что самое интересное, пакета нет и через установку с помощью apt (вроде есть в sid, но у меня не поставилось из него, куча побитых зависимостей и т.д.), поэтому сделаем иначе - скачаем исходники
отсюда и собираем вручную через:
./configure
make
make install
Я собирал этот исходник на трех машинах, почти одинаковых и вот такие грабли иногда возникали:
1.
configure: error: c++ compiler cannot create executables
Лечиться либо через apt - «apt-get install build-essential», либо через установку g++ любым удобным вам способом.
2.
unable to guess system type
This script, last modified $timestamp, has failed to recognize
the operating system you are using. It is advised that you
download the most up to date version of the config scripts from
http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD and
http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD If the version you run ($0) is already up to date, please
send the following data and any information you think might be
pertinent to in order to provide the needed
information to handle your system.
Лечиться через дополнительный ключ к ./configure (зависит от вашей архитектуры, у меня i686, свою узнать можно через uname -a)
./configure -build=i686
Других проблем мною не было замечено. После установки данной библиотеки ffmpeg будет собираться с поддержкой их (они предназначены для перекодировки видео с мобильных телефонов - 3gp и другие подобные форматы).
2. -enable-libx264
Как правило требуется установить libx264. Но даже если библиотека установлена, всеравно можно получить сообщение, о том, что библиотека довольно старая и требуется версия не ниже 0.83 (которой естественно в ветке lenny нету).
Не стоит отчаиваться, делаем следующее:
mcedit /etc/apt/sources.list
и заменяем строку
deb
http://www.debian-multimedia.org lenny main
на
deb
http://www.debian-multimedia.org sid main
После чего делаем
apt-get
update
и
apt-cache
search libx264
где и увидим нужное:
libx264-83 - x264 video coding library
Все, можно ставить:
apt-get
install libx264-83 libx264-dev
и вопрос с данным ключем на этом тоже решен. После установки библиотеки рекомендую вернуть в souces.list строку в изначальное положение (тоесть вернуть lenny) и выполнить apt-get update, чтобы ставить стабильные версии пакетов.
3. -enable-libtheora
Тут тоже запущенный вариант, т.к. apt-get install libtheora0 тут не поможет, т.к. в менеджере пакетов для lenny лежит очень старая версия библиотеки и даже ее установка не поможет - конфигурационный скрипт будет упорно твердить что «libtheora not found».
Но наша нигде не пропадала, поэтому опять открываем sources.list и меняем строку
deb
http://ftp.ua.debian.org/debian/ lenny main
на
deb
http://ftp.ua.debian.org/debian/ sid main
и делаем apt-get update. После чего apt-cache search libtheora. Если все хорошо, то найдет такое:
libtheora-dbg
- The Theora Video Compression Codec (debug)
libtheora-doc - The Theora Video Compression Codec (documentation)
libtheora-ocaml - OCaml interface to the theora library
libtheora-ocaml-dev - OCaml interface to the theora library
libtheora-dev - The Theora Video Compression Codec (development files)
libtheora0 - The Theora Video Compression Codec
libtheora-bin - The Theora Video Compression Codec (example encoder, decoder)
Ставим выделенное жирным:
apt-get
install libtheora-dev libtheora0 libtheora-bin
После этого конфигурационный скрипт больше не будет матюкаться на libtheora.
Больше по идее проблем с конфигурацией не должно возникать. После этого ./configure с указанными выше ключами должен успешно выполниться (если все библиотеки доставлены), и можно делать
make
Тут иногда возможны варианты. Например не собирается, ругается на что-то. Как правило это связано с изменениями файлов репозитории разработчиками. Например кто-то закоммитил несобираемую версию. Лечиться чаще всего - банальным обновлением до последней ревизии и make distclean (после этого нужно пройти процесс конфигурации заново, запустив ./configure с ключами заново). Если же обновления нет еще или проблема не устраняется - стоит попробовать обновиться до более старой ревизии.
Иногда проскакивают разного рода глюки компиляции, когда выводит какую-то ошибку. У меня такое пару раз бывало - не стоит пугаться, просто стоит набрать еще раз make, повторно, как правило, не выдает, если это не что-то серьезное, по типу несоответствия библиотек и т.д.
Процесс сборки make занимает некоторое продолжительное время, от 10 до 30 минут, в зависимости от мощности машины, где это запущено.
Если все хорошо, можно делать
make install
После этого стоит проверить, все ли хорошо, выполнив команду:
ffmpeg
Если установка успешна, вы должны увидеть что-то подобное моему выводу:
FFmpeg version SVN-r21796, Copyright © 2000-2010 Fabrice Bellard, et al.
built on Feb 21 2010 14:55:21 with gcc 4.3.2
configuration: -prefix=/usr -libdir=/usr/lib -shlibdir=/usr/lib -bindir=/usr/bin -incdir=/usr/include/ffmpeg -enable-libx264 -enable-postproc -enable-libxvid -enable-pthreads -enable-libvorbis -enable-libfaad -enable-gpl -enable-x11grab -enable-shared -enable-libmp3lame -enable-libtheora -enable-libfaac -enable-libfaad -enable-nonfree -enable-libopencore-amrnb -enable-libopencore-amrwb -enable-libgsm -enable-version3 -enable-avfilter -enable-libspeex -enable-zlib -enable-libschroedinger -disable-encoder=libschroedinger -enable-libdc1394 -disable-mmx -disable-stripping -enable-libdirac -disable-decoder=libdirac -disable-altivec -disable-armv5te -disable-armv6 -disable-vis -enable-avfilter-lavf -enable-libopenjpeg -extra-cflags=-Wall -cc=ccache cc -enable-swscale
libavutil 50. 9. 0 / 50. 9. 0 libavcodec 52.54. 0 / 52.54. 0 libavformat 52.52. 0 / 52.52. 0 libavdevice 52. 2. 0 / 52. 2. 0 libavfilter 1.17. 0 / 1.17. 0 libswscale 0.10. 0 / 0.10. 0 libpostproc 51. 2. 0 / 51. 2. 0
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]… {[outfile options] outfile}…
Use -h to get full help or, even better, run ’man ffmpeg’
Ключевые моменты выделены жирным.
Также бывают проблемы на разных архитектурах, когда установка прошла успешно, но ffmpeg выводит не то, что я показал выше, а сообщения по типу:
libavformat.so.52: no version information available (required by ffmpeg)
Пришлось поморочиться, но в итоге я нашел решение.
Дело в том, что процесс установки менеджера пакетов почему-то иногда ставит библиотеки в /usr/lib/i686/cmov , чем перебивает библиотеки из /usr/lib и /usr/local/lib .
Лечится банально - копируем 3 файла из папки, куда установил либы ffmpeg (зависит от конфигурации в ./configure). В моих ключах можно заметить, что библиотеки пошли в /usr/lib/.
Отлично, копируем libavformat.so libavformat.so.52 libavformat.so.52.52.0 из этой папки в папку /usr/lib/i686/cmov/
После этого радуемся жизни с ffmpeg ;P
Вместо заключения
Приятного использования свежей версии ffmpeg!
Мне она помогла устранить пару багов с перекодированными видео, которые оставляла предыдущая версия, установленная через менеджер пакетов.
Есть вопросы? Пишем в комментариях, не стесняемся, помогу, чем смогу.