четверг, 24 ноября 2011 г.

Установка последнего FFmpeg на Gentoo

Понадобилось установить последнюю версию ffmpeg c поддержкой h264 для конвертирования видео.
В данной заметке расскажу, как поставить их из исходников


Кратко опишу процесс установки:
Считаем, что у нас в системе нет ffmpeg и мы ставим с нуля.
Могут быть не точности, т.к. описывал процесс уже после установки..
Если будут найдены неточности - просьба сообщить
Получаем необходимые исходники

mkdir /usr/local/src_prog
cd /usr/local/src_prog
git clone git://github.com/yasm/yasm.git yasm
git clone http://git.chromium.org/webm/libvpx.git libvpx
git clone git://git.videolan.org/ffmpeg.git ffmpeg
git clone git://git.videolan.org/x264.git libx264
wget http://downloads.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz
wget http://sourceforge.net/projects/faac/files/faac-src/faac-1.28/faac-1.28.tar.gz
wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.4.tar.gz
wget http://downloads.xiph.org/releases/theora/libtheora-1.1.1.tar.gz
wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz
Распакуем:

tar -xvf faad2-2.7.tar.gz
tar -xvf faac-1.28.tar.gz
tar -xvf lame-3.99.4.tar.gz
tar -xvf libtheora-1.1.1.tar.gz
tar -xvf libvorbis-1.3.3.tar.gz
Ну и начинаем собирать. Необходимая билиотека для libx264

cd yasm
./autogen.sh && make && make install
Добавим библиотеки для работы со звуком:

cd ../faad2-2.7
./configure --with-mp4v2
make clean && make && make install
cd ../faac-1.28
./configure --with-mp4v2
vi common/mp4v2/mpeg4ip.h
#comment line 126
#:126
#/*char *strcasestr(const char *haystack, const char *needle);*/
make clean && make && make install
cd ../lame-3.99.4
./configure
make clean && make && make install

cd ../libvorbis-1.3.3
./configure
make clean && make && make install

cd ../libtheora-1.1.1
./configure
make clean && make && make install
Библиотеки для Видео

cd ../libvpx
./configure --target=x86_64-linux-gcc  --enable-pic --enable-vp8 --enable-shared
make clean && make && make install

cd ../libx264/
./configure --enable-shared --enable-static --prefix=/usr
make clean && make && make install
Устанавливаем поддержку rtmp. Опция ffmpeg --enable-librtmp

emerge rtmpdump
Устанавливаем сам ffmpeg

cd ../ffmpeg/
./configure --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --mandir=/usr/share/man --enable-shared --cc=x86_64-pc-linux-gnu-gcc --disable-static --enable-gpl --enable-postproc --enable-avfilter --disable-stripping --disable-debug --disable-doc --disable-vaapi --disable-ffplay --disable-vdpau --enable-libmp3lame --enable-libx264 --enable-libfaac --enable-nonfree --disable-indev=alsa --disable-indev=oss --disable-indev=jack --disable-outdev=alsa --disable-outdev=oss --enable-pthreads --enable-librtmp --disable-altivec --disable-avx --enable-hardcoded-tables
make clean && make && make install
Обновляем список библиотек:

ldconfig -v
По идее после всех шагов у вас должна быть установлена последняя версия рабочего ffmpeg-а:
Примеры Конвертирования:
OGV 
ffmpeg -i test.avi -acodec libvorbis -ab 192k -ac 2 -ar 44100 -b 1500k -s 1280x720 test.cvt.ogv
WebM
ffmpeg -i test.avi  -acodec libvorbis -ab 192k -ac 2 -ar 44100 -b 1500k -s 1280x720 test.cvt.webm
MP4
ffmpeg -i test.avi -ab 192k -ac 2 -ar 44100 -b 1500k -s 1280x720 -level 21 -refs 2 -bt 1500k test.cvt.mp4
Кодирование файлов из формата Apple
ffmpeg -i "./src.mov" -vcodec libx264 -acodec libfaac "./dst.mp4"

Более подробно про конвертирование можно почитать в моей статье - Кодирование аудио/видео при помощи ffmpeg

Решил упростить установку, написал скрипт, который автоматически все ставит (только должны быть установлены утилиты для сборки из исходников (make, gcc, g++)).
Скрипт тестировался на CentOS 5 и Gentoo
Скачать его можно отсюда, а также приведу его листинг здесь

#!/bin/bash
if [ -n `whereis yum|awk '{print $2}'` ];                                                                                                                
then                                                                                                                                                     
    pkg="yum install"
else                                                                                                                                                     
    if [ -n `whereis emerge|awk '{print $2}'` ];                                                                                                       
    then                                                                                                                                               
        echo "emerge git";                                                                                                                           
 pkg="yum install"
    fi                                                                                                                                                 
fi                                                                                                                                                       

if [ -z `whereis git|awk '{print $2}'` ];                                                                                                                    
then                                                                                                                                                         
    echo "Git - not installed!!!"                                                                                                                            
    `$pkg git`
fi           
                                                                                      
mkdir /usr/local/src_prog
cd /usr/local/src_prog
git clone git://github.com/yasm/yasm.git yasm
git clone http://git.chromium.org/webm/libvpx.git libvpx
git clone git://git.videolan.org/ffmpeg.git ffmpeg
git clone git://git.videolan.org/x264.git libx264
wget http://downloads.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz
wget http://sourceforge.net/projects/faac/files/faac-src/faac-1.28/faac-1.28.tar.gz
wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.4.tar.gz
wget http://downloads.xiph.org/releases/theora/libtheora-1.1.1.tar.gz
wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz
tar -xvf faad2-2.7.tar.gz
tar -xvf faac-1.28.tar.gz
tar -xvf lame-3.99.4.tar.gz
tar -xvf libtheora-1.1.1.tar.gz
tar -xvf libvorbis-1.3.3.tar.gz
cd yasm
./autogen.sh && make && make install
cd ../faad2-2.7
./configure --with-mp4v2
make clean && make && make install
cd ../faac-1.28
./configure --with-mp4v2

echo '126c126
< char *strcasestr(const char *haystack, const char *needle);
---
> #/*char *strcasestr(const char *haystack, const char *needle);*/' | patch ./common/mp4v2/mpeg4ip.h  -i -

make clean && make && make install
cd ../lame-3.99.4
./configure
make clean && make && make install
cd ../libvorbis-1.3.3
./configure
make clean && make && make install
cd ../libtheora-1.1.1
./configure
make clean && make && make install
cd ../libvpx
./configure --target=x86_64-linux-gcc  --enable-pic --enable-vp8 --enable-shared
make clean && make && make install
cd ../libx264/
./configure --enable-shared --enable-static --prefix=/usr
make clean && make && make install
emerge rtmpdump
cd ../ffmpeg/ 
./configure --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --mandir=/usr/share/man --enable-shared --cc=x86_64-pc-linux-gnu-gcc --disable-static --enable-gpl --enable-postproc --enable-avfilter --disable-stripping --disable-debug --disable-doc --disable-vaapi --disable-ffplay --disable-vdpau --enable-libmp3lame --enable-libx264 --enable-libfaac --enable-nonfree --disable-indev=alsa --disable-indev=oss --disable-indev=jack --disable-outdev=alsa --disable-outdev=oss --enable-pthreads --enable-librtmp --disable-altivec --disable-avx --enable-hardcoded-tables
make clean && make && make install
ldconfig -v


cd /usr/local/src_prog/ffmpeg/ ;./configure --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --mandir=/usr/share/man --enable-shared --cc=x86_64-pc-linux-gnu-gcc --disable-static --enable-gpl --enable-postproc --enable-avfilter --disable-stripping --disable-debug --disable-doc --disable-vaapi --disable-ffplay --disable-vdpau --enable-libmp3lame --enable-libx264 --enable-libfaac --enable-nonfree --disable-indev=alsa --disable-indev=oss --disable-indev=jack --disable-outdev=alsa --disable-outdev=oss --enable-pthreads --enable-librtmp --disable-altivec --disable-avx --enable-hardcoded-tables ; make clean && make && make install; ldconfig -v


Ссылки:
Сборка ffmpeg на CentOS 6.0 x64 для Web видео mp4, webm, ogv 
http://ffmpeg.org 
HOWTO: Install and use the latest FFmpeg and x264 (Ubuntu)
Самостоятельная установка последних FFmpeg и x264 на примере Ubuntu

3 комментария:

  1. Что-ж оно будет после мейк-инстал .. Почему не опакетили ?

    ОтветитьУдалить
  2. Конечно лучше использовать emerge, но бывают случаи когда необходимо поставить свежайшую версию доступную только в исходниках

    ОтветитьУдалить
  3. Спасибо. У меня тоже есть что почитать про FFMPEG: http://plutov.by/post/html5_ffmpeg

    ОтветитьУдалить