Dieser Artikel wurde am 23.12.2006 in meinem Blog veröffentlicht und 2009 in dieses Wiki übertragen.
Es sollte ja nur mal eben ein Video ins flv (Flash Video) Format umgewandelt werden. An sich keine Hexerei sollte man meinen. Zu früh gefreut, denn beim Abspielen der erzeugten flv Dateien war kein Ton zu hören. Zunächst glaubte ich an einen Fehler beim Konvertieren und versuchte die diversesten ffmpeg Parameter. Es führte aber immer zum gleichen Ergebnis, ein Flash Video ohne Ton.
Einen Fehler im Media-Player konnte ich ausschliessen, da er andere Flash Videos problemlos wiedergab. Nach einer kurzen Pause und wiedererlangter Muse für weitere Experimente sah ich mir dann die Ausgabe von ffmpeg mal genauer an und entdeckte dort den magischen Begriff: MP3. Mir fiel es wie Schuppen von den Augen, wegen der MP3 Patente sind bei Ubuntu in der Standardinstallation keine MP3 De- bzw. Encoder dabei. Bisher hatte ich daran keinen Gedanken verschwendet da ich den „VLC Media Player“ installiert habe. Dieser hat bis jetzt, im Gegensatz zu totem, noch alle Musik- und Videoformate wiedergegeben hat, die mir untergekommen sind. Das half nur in diesem Fall rein gar nichts und es musste ein Weg gefunden werden, dass FFmpeg auch mit mp3 umgehen kann. Da unter den Ubuntu Paketen kein FFmpeg zu finden war, das MP3 Encoding kann führt kein Weg daran vorbei selbst den Compiler anzuwerfen. Um das System nicht mit „fremden“ Bibliotheken zu belasten wählte einen Weg FFmpeg möglichst konform zur Ubuntu/Debian Paketverwaltung zu modifizieren. Das bedeutet zwar immer noch, dass man einen Gutteil der Programme und Bibliotheken selbst kompiliert, benutzt werden aber die Quelldateien aus dem Ubuntu Repository.
Nachtrag: Das im folgenden beschriebene Vorgehen kann auch mit Ubuntu 7.04 Feisty Fawn Beta angewendet werden, lediglich einige Versionummern unterscheiden sich. Siehe dazu den Blog Artikel “Feisty Fawn (Beta) + ffmpeg + mp3“.
Das hier beschriebene Vorgehen wurde auf einer Xubuntu 6.10 Installation durchgeführt, sollte aber für alle übrigen Edgy Eft Varianten ebenso gelten. Wie die meisten fortgeschrittenen Installationsaufgaben findet diese in einem Terminal statt und es wird davon ausgegangen, dass der Umgang mit dem Editor vi bekannt ist (oder zumindest wie man statt vi einen anderen Editor aufruft
).
sudo su
apt-get --purge remove ffmpeg
universe und multiverse Repositories in /etc/apt/sources.list aktivieren und apt-get update nicht vergessen
apt-get install build-essential dpkg-dev quilt fakeroot
apt-get install libimlib2-dev texi2html lame liblame-dev libfaad2-dev libmp4v2-dev \ libfaac-dev libxvidcore4-dev debhelper libogg-dev libvorbis-dev liba52-dev libdts-dev \ libsdl1.2-dev libraw1394-dev libdc1394-13-dev libtheora-dev libgsm1-dev
(die genaue Bezeichnung bzw. Version kann variieren!)
cd /usr/src apt-get source ffmpeg cd ffmpeg-0.cvs20060823
Im Netz existieren Anleitungen die eine Anpassung der Datei debian/build vorsehen, dies ist aber nicht zwingend notwendig, wenn man die Variable DEB_BUILD_OPTIONS=„risky“ setzt.
DEB_BUILD_OPTIONS="risky" dpkg-buildpackage
cd .. dpkg -i ffmpeg_0.cvs20060823-3.1ubuntu1_i386.deb
An diesem Punkt versagt leider mein Wissen um die Debian/Ubuntu Paketverwaltung. Bisher ging ich davon aus, dass bei der Installation von Debian Quellpaketen immer auch die dabei erzeugten Bibiliotheken automatisch installiert werden. Das Symptom bei mir war jedenfalls, dass ich trotz selbst kompliliertem FFmpeg immer noch kein MP3-Encoding möglich war. Daher habe ich die Debian Pakete im Verzeichnis /usr/src, die im Zuge der Kompilierung (1.3) erzeugt wurden, manuell installiert.
dpkg -i libavcodec0d_0.cvs20060823-3.1ubuntu1_i386.deb dpkg -i libavformat0d_0.cvs20060823-3.1ubuntu1_i386.deb dpkg -i libpostproc0d_0.cvs20060823-3.1ubuntu1_i386.deb
Da die selbst erzeugten Programme im Falle einer neuen Version wieder durch die Originale ohne MP3 Fahigkeiten ersetzt würde ist es notwendig die aktuell installierten Versionen „festzupinnen“. Dafür ist die Datei /etc/apt/preferences zuständig, diese mit einem Editor öffnen (vi /etc/apt/preferences) und folgendes hinzufügen:
Package: ffmpeg Pin: version 0.cvs20060823-3.1ubuntu1 Pin-Priority: 1001 Package: libavcodec0d Pin: version 0.cvs20060823-3.1ubuntu1 Pin-Priority: 1001 Package: libavformat0d Pin: version 0.cvs20060823-3.1ubuntu1 Pin-Priority: 1001 Package: libpostproc0d Pin: version 0.cvs20060823-3.1ubuntu1 Pin-Priority: 1001
Der Befehl
ffmpeg -i video.avi video.flv
sollte jetzt aus der Quelldatei video.avi eine Flash Video Datei mit dem Namen video.flv erzeugen bei der auch die Tonspur vorhanden und hörbar ist. Um das Flash Video auf dem lokalen Rechner zu betrachten eignet sich der o.g. VLC Media Player (apt-get install vlc). Sofern man das Flash Video in eine Website einbinden will benötigt man einen Flash Video Player wie er z.B. youtube oder Google Video zum Einsatz kommt. Die besten Erfahrungen habe ich mit dem Flash Video Player von Jeroen Wijering und dem FlowPlayer gemacht.
Kleine Notiz am Rande, entgegen landläufiger Meinung ist es nicht zwingend notwendig einen Flash Streaming Server zu verwenden, das Flash Video kann auch von einem „normalen“ HTTP Server (z.B. apache) heruntergeladen werden. In diesem Zusammenhang lohnt sich ein Blick auf flvtool2, mit dem es möglich ist die Meta Daten von Flash Videos zu bearbeiten. Diese Metadaten sind u.a. notwendig für die Fortschrittsanzeige und das Vor- bzw. Zurückspulen im Video Player.