FFmpeg kompilieren (Linux)

Ein FFmpeg-update wird benötigt und wieder mal keiner da, der FFmpeg aktualisieren (kompilieren)  kann – außer meiner Wenigkeit. Immer wieder kommt dieses Thema bei uns auf: FFmpeg und FFmpeg-PHP müssen aktualisiert werden – sei es um bekanntgewordene Bugs zu beseitigen, die Performanz zu erhöhen oder aber neue Codecs zu unterstützen.

Jedes Mal wenn dies der Fall ist und man ein „altes“ HowTo auspackt, dass man erst vor 6 Monaten geschrieben hat, merkt man, daß sich die  soeben aus dem SVN ausgecheckte Version von FFmpeg nicht mit den vorhandenen Versionen der benötigten Bibliotheken kompilieren lassen möchte.

Ich möchte euch mit den folgenden Informationen die lange Suche nach der richtigen Kombination von Bibliotheken verschonen. Verwendet wurden, zum Zeitpunkt der Erstellung dieses HowTo’s aktuelle und auf Kompatibilität getestete Versionen der jeweiligen Bibliotheken.

Da ich CentOS 5.3 einsetze, sind ggf. einige Schritte für andere nicht ganz so interessant, wer aber FFmpeg selber kompilieren möchte, der wird auch die passenden „Befehl-Übersetzungen“ für sein Linuxderivat wissen.


Schritt 1
RPM-Paket hinzufügen und yum update durchführen

1
2
rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
yum -y update

Schritt 2
Die folgenden Pakete herunterladen (hier mit wget)

Achtung: Vielleicht findest du neuere Versionen der Libs. Wenn sich FFmpeg mit diesen ebenfalls einwandfrei kompilieren lässt, dann schreib doch netterweise einen Kommentar. Dann kann ich die Aktualisierung direkt vornehmen.

1
2
mkdir /tmp/ffmpeg-latest
cd /tmp/ffmpeg-latest

MPLAYERHQ essential-codec-pack:

1
wget http://www3.mplayerhq.hu/MPlayer/releases/codecs/essential-20071007.tar.bz2

FLVTOOL2 1.0.6 final

1
wget http://rubyforge.org/frs/download.php/17497/flvtool2-1.0.6.tgz

LIBOGG 1.1.4

1
wget http://downloads.xiph.org/releases/ogg/libogg-1.1.4.tar.gz

LIBVORBIS 1.2.3

1
wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.2.3.tar.gz

libA52 (latest 0.7.4)

1
wget http://liba52.sourceforge.net/files/a52dec-0.7.4.tar.gz

FAAD2 2-2.7

1
wget http://downloads.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz

FAAC2 1.28

1
wget http://downloads.sourceforge.net/project/faac/faac-src/faac-1.28/faac-1.28.tar.gz

LAME 3.98.2

1
wget http://downloads.sourceforge.net/project/lame/lame/3.98.2/lame-398-2.tar.gz

YASM 0.8.0

1
wget http://www.tortall.net/projects/yasm/releases/yasm-0.8.0.tar.gz

x264 20090803-2245

1
wget ftp://ftp.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20090803-2245.tar.bz2

XVID 1.2.2

1
wget http://downloads.xvid.org/downloads/xvidcore-1.2.2.tar.gz

libraw1394

1
wget https://launchpad.net/ubuntu/hardy/+source/libraw1394/1.3.0-2/+files/libraw1394_1.3.0.orig.tar.gz

ffmpeg-php 0.6.0

1
wget http://downloads.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0.6.0/ffmpeg-php-0.6.0.tbz2


Schritt 3
Installieren von subversion, ruby, ncurses, git, vlc, mplayer, libtheora, libdc1394

Installiere die folgenden Tools:

1
yum install subversion

– (benötigt für ffmpeg)

1
yum install ruby

– (benötigt für flvtool2)

1
2
yum install ncurses-devel
yum install git

– (git wird benötigt für x264 vlc)

1
2
3
yum install libdc1394 libdc1394-devel
yum install libtheora libtheora-devel
yum install vlc mplayer

Schritt 4
Extrahieren der Quelldateien

Extrahiere jetzt alle heruntergeladenen Pakete mit den folgenden Befehlen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
bunzip2 essential-20071007.tar.bz2; tar xvf essential-20071007.tar
tar zxvf flvtool2-1.0.6.tgz
tar zxvf libogg-1.1.4.tar.gz
tar zxvf libvorbis-1.2.3.tar.gz
tar -zxf a52dec-0.7.4.tar.gz
tar zxf faad2-2.7.tar.gz
tar zxfv faac-1.28.tar.gz
tar zxfv lame-398-2.tar.gz
tar zfvx yasm-0.8.0.tar.gz
bunzip2 < x264-snapshot-20090803-2245.tar.bz2 | tar -xf -
tar zxfv xvidcore-1.2.2.tar.gz
mv /tmp/ffmpeg-latest/libraw1394_1.3.0.orig.tar.gz /
/tmp/ffmpeg-latest/libraw1394_1.3.0.tar.gz; tar zxfv libraw1394-1.3.0.tar.gz
bunzip2 ffmpeg-php-0.6.0.tbz2; tar xvf ffmpeg-php-0.6.0.tar

Schritt 5
Kopieren der Codecs

Erstelle (wenn nicht schon vorhanden) das codecs-Verzeichnis und verschiebe die Codecs dorthin.

1
2
3
mkdir /usr/local/lib/codecs/
mv essential-20071007/* /usr/local/lib/codecs/
chmod -R 755 /usr/local/lib/codecs/

Schritt 6
Kompilieren + installieren

Jetzt beginnen wir die damit die Libs zu kompilieren und zu installieren:

Lame

1
2
3
4
5
6
cd lame-3.98b8
export LD_LIBRARY_PATH=/usr/local/lib
./configure
make
make install
cd ..

libOGG

1
2
3
4
5
cd libogg-1.1.3
./configure
make
make install
cd ..

libVorbis

1
2
3
4
5
cd libvorbis-1.1.2
./configure
make
make install
cd ..

flvtool2

1
2
3
4
5
cd flvtool2_1.0.6
ruby setup.rb config
ruby setup.rb setup
ruby setup.rb install
cd ..

a52

1
2
3
4
5
cd a52dec-0.7.4
./configure --enable-shared=PKGS
make
make install
cd ..

FAAD2

1
2
3
4
5
6
cd faad2
autoreconf -vif
./configure --disable-drm --disable-mpeg4ip
make
make install
cd ..

FAAC

1
2
3
4
5
6
cd faac
./bootstrap
./configure --disable-mp4v2
make
make install
cd ..

yasm

1
2
3
4
5
cd yasm-0.8.0
./configure
make
make install
cd ..

x264

1
2
3
4
5
cd x264-snapshot-20090803-2245
./configure --enable-shared
make
make install
cd ..

Xvid

1
2
3
4
5
cd xvidcore-1.2.2/build/generic
./configure
make
make install
cd ../../..

ffmpeg

1
2
3
4
5
6
7
8
9
10
11
12
13
svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
cd ffmpeg
./configure /
--enable-gpl --enable-postproc --enable-nonfree --enable-postproc /
--enable-libfaad --enable-avfilter --enable-pthreads --enable-libxvid /
--enable-libx264 --enable-libmp3lame --enable-liba52 --enable-libfaac /
--disable-ffserver --disable-ffplay --enable-libtheora --enable-libvorbis /
--enable-shared

make
make install
export LD_LIBRARY_PATH=/usr/local/lib
cd ..

Schritt 7
Bugfix und kompilieren von ffmpeg-php

1
2
cd ffmpeg-php-0.6.0
phpize

BUGFIX für ffmpeg-php
In Version 0.6.0 von ffmpeg-php muss die Quelldatei ffmpeg_frame.c leicht angepasst werden, damit diese kompiliert werden kann. Dafür müssen nach dem öffnen der Datei alle Vorkommen von PIX_FMT_RGBA32 with PIX_FMT_RGB32 ersetzt werden. Mit Vi(m) funktioniert dies wie folgt:

1
2
3
vi ffmpeg_frame.c
:%s/PIX_FMT_RGBA32/PIX_FMT_RGB32
:w :q!

Jetzt muss ffmpeg-php nur noch kompiliert werden …

1
2
3
./configure
make
make install

… und fertig ist die neue FFmpeg-Version. Viel Erfolg beim kompilieren…

Tweet about this on TwitterShare on LinkedInShare on FacebookShare on Google+Email this to someone

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.