FFmpeg für Ubuntu – Und gleichzeitig mein erster Blogeintrag
April 1st, 2009Das ist also mein erster Blogbeitrag…
Aber jetzt zu dem Thema, wegen dem Ihr wohl eher hier seit:
FFmpeg für [Ku|Xu|Edu|Go|Medi|U]buntu selbst kompilieren und zwar mit – fast – allem Drum und Dran, denn das mit den Standardrepositories von Ubuntu mitgelieferte ist nicht allzu ergiebig und gibt bei mp3-Unterstützung schon den Geist auf.
Aber genug der Vorrede, jetzt gehts los!
Ein Hinweis vorweg: Dieses How-To habe ich versucht so gewissenhaft wie möglich zu erstellen, aber natürlich kann es sein, dass es Fehler enthält, oder gewisse Situationen nicht bedenkt. Falls es zu Schwierigkeiten kommt hinterlasse bitte einfach einen Kommentar.
Natürlich beschränkt sich dieses How-To nicht nur auf Ubuntu und Derivate, sondern kann auch auf anderen Distributionen wie Fedora, OpenSUSE, etc angewendet werden, aber dort heißen die Befehle und Pakete teilweise anders, weshalb nur geübte Nutzer das ausprobieren sollten.
Als erstes müssen wir erst einmal die Grundlagen installieren um überhaupt ordentlich Programme selbst kompilieren zu können. Einfach das Terminal bzw. die Konsole öffnen und folgendes abtippen oder reinkopieren:
1 | sudo apt-get install subversion build-essential checkinstall |
Subversion wird benötigt, um den aktuellen Quelltext des Programms herunterzuladen, build-essential enthält die zum Kompilieren benötigten Programme und mit checkinstall erstellen wir uns am Ende ein .deb-Paket, vergleichbar mit einer Windows .msi-Datei.
Diese drei Programme könnt ihr ruhig auf eurem PC lassen, sie werden ständig benötigt, wenn ihr etwas selbst bauen müsst oder wollt.
Jetzt kommen die ganzen Develop-Pakete, die nur zum Kompilieren von FFmpeg benötigt werden. Keine Sorge, die Liste ist zwar lang, aber das kann alles am Ende wieder deinstalliert werden, müllt also die Festplatte nicht zu:
1 | sudo apt-get install libsdl1.2-dev yasm libgsm1-dev libdc1394-22-dev libfaad-dev libfaac-dev libmp3lame-dev libopenjpeg-dev libschroedinger-dev libspeex-dev libtheora-dev libvorbis-dev libx264-dev libxvidcore-dev |
Am besten kopiert Ihr einfach die Zeile raus (Dreifachklick auf die Zeile und Strg+C), geht dann ins Terminal und fügt sie mit einem “Rechtsklick -> Einfügen” ein (Strg+V funktioniert hier – zumindest bei mir – nicht).
Nun sind wir dazu bereit an FFmpeg selbst heranzugehen. Um es kompilieren zu können benötigen wir natürlich erst mal den Quelltext. Damit der nicht deine Ordner zumüllt wechsele am besten mit “cd ~” in deinen home-Ordner, lege einen neuen Order z. B. mit dem Namen “srcs” (für Quellen) an, wechsele in das Verzeichnis und lade da hinein den Quelltext runter. Und so gehts (Achtung: das sind zwei einzelne Zeilen):
1 2 | cd ~ && mkdir srcs && cd srcs svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg |
Mit der ersten Zeile erstellen wir den Ordner “srcs” in deinem Homeverzeichnis und betreten ihn, dann laden wir mittels Subversion den brandneuesten Quelltext von FFmpeg aus dem Internet.
Jetzt nur noch ins richtige Verzeichnis wechseln und alles zum Kompilieren vorbereiten:
1 | cd ffmpeg && mkdir build && cd build |
Der Quelltext ist jetzt aber noch nicht direkt dazu bereit kompiliert zu werden, sondern wir müssen erst konfigurieren was wir alles an Features haben wollen. Nach dem Motto mehr ist besser habe ich folgenden Befehl vorbereitet, der FFmpeg mit relativ vielen Features konfiguriert. Wer mehr will wird sicherlich wissen wie es geht und diesen Blogeintrag garnicht erst lesen müssen:
1 | ../configure --enable-gpl --enable-ffplay --enable-postproc --enable-avfilter --enable-avfilter-lavf --enable-libgsm --enable-libdc1394 --disable-shared --enable-static --enable-pthreads --enable-x11grab --enable-libfaac --enable-libfaad --enable-libmp3lame --enable-libopenjpeg --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-zlib --enable-bzlib --prefix=/usr |
Achte darauf, dass du alles als eine einzige Zeile kopierst.
Wenn bisher alles ohne Fehler funktioniert hat (was ich doch schwer hoffe) kanns jetzt ans Eingemachte gehen.
Wir starten jetzt endlich die eigentliche Kompilierung des Programms (Achtung, das kann ein wenig dauern, in der Zwischenzeit einfach nen Kaffee trinken oder was anderes machen, nur nicht das Terminalfenster schließen):
1 | make |
Wieder da? Hat der obige Befehl ohne irgendwelche Fehler abgeschlossen (bei mir endet er normalerweise mit der Ausgabe “strip ffserver”)? Dann kanns weitergehen!
Wir haben das Programm jetzt kompiliert und könnten es aus dem Verzeichnis in dem wir uns im Moment befinden heraus benutzen, aber da es sehr unpraktisch wäre immer erst in dieses Verzeichnis wechseln zu müssen installieren wir das Programm noch ordentlich auf dem System. Dazu packen wir die ganzen Dateien, die der “make”-Befehl eben erstellt hat zu einer Datei mit der Endung .deb zusammen, die man die wie eine .msi auf einem Windowssystem installieren kann. Der folgende Befehl erstellt das Paket nicht nur, sondern installiert es gleichzeitig:
1 | sudo checkinstall --type=debian --default --pkgversion=3:0.svn`date +%Y%m%d` --provides=ffmpeg,ffserver,ffplay --pkgname=ffmpeg --strip=yes --stripso=yes --install=yes --pkglicense=GPL |
Auch das hat ohne Fehler geklappt? Herzlichen Glückwunsch, FFmpeg ist jetzt bereit zur Benutzung!
Willst du zum Beispiel eine der .mp4-Videodateien von Youtube (Stichwort: keepvid) in eine mp3 umwandeln mit einer Audiorate von 44.100 Hz und 192kB/s ist dieser Befehl gut:
1 | ffmpeg -i dateivonyoutube.mp4 -vn -acodec libmp3lame -ar 44100 -ab 192k diefrischerstelltemp3.mp3 |
-vn sagt ffmpeg, dass das Videomaterial verworfen werden soll, -ar steht für “Audiorate” -ab steht für “Audiobitrate” -acodec für “Audiocodec” und -i für “Input”.
Natürlich kann FFmpeg noch viel mehr, aber das soll vielleicht mal Inhalt eines anderen Blogbeitrags sein.
Aber jetzt kommen wir zum sauberen Abschluss der ganzen Sache. Hast du nicht vor FFmpeg in den nächsten Tagen noch einmal zu kompilieren und immer zu wenig Platz auf der Festplatte? Dann entferne die (bis zur nächsten Kompilierung) nicht mehr benötigten Pakete (~33,7MB):
1 | sudo apt-get remove libsdl1.2-dev yasm libgsm1-dev libdc1394-22-dev libfaad-dev libfaac-dev libmp3lame-dev libopenjpeg-dev libschroedinger-dev libspeex-dev libtheora-dev libvorbis-dev libx264-dev libxvidcore-dev && sudo apt-get autoremove |
Und falls du willst, dass dein frisch kompiliertes High-End FFmpeg nicht mit einer vielleicht in der Zukunft von Ubuntu bereitgestellten neueren, aber eingeschränkteren Version überschrieben werden soll, dann führe noch diese Zeile aus:
1 | sudo echo -e "Package: ffmpeg\nPin: version 0.svn"`date +%Y%m%d`"\nPin-Priority: 1000" | sudo tee -a /etc/apt/preferences |
Sie schreibt in die Datei /etc/apt/preferences die Zeilen
Package: ffmpeg
Pin: version 0.svnXXXXXXXX
Pin-Priority: 1000
und verhindert somit ein Update dieser FFmpeg-Version. Falls du die “Updatesperre” wieder entfernen möchtest, entferne einfach diese drei Zeilen aus der Datei.
Viel Spaß und hoffentlich war dieser Eintrag hilfreich!
PS: Zum Entfernen des selbstkompilierten FFmpeg einfach
1 | sudo dpkg -r ffmpeg |
ausführen.