Videos mit FFMPEG für das iPhone konvertieren und streamen

Ich hatte mich eine ganze Weile darüber geärgert, dass ich auf meinem iPhone nicht vernünftig Videos im LAN gestreamed angucken kann. Im Heimkino z.B. mit der PS3 geht das deutlich besser, auch nicht toll, aber besser. Aber man will ja vielleicht auch mal mit dem iPhone auf dem Sofa sitzen und sich die gleichen Videos reinziehen.

Geht erstmal nicht, weil das iPhone ziemlich zickig ist, was Videoformate angeht. Da reicht es nicht, einen DLNA-Server zu betreiben, sondern man muss die Videos auch transcoden, bevor sie funktionieren. Dafür gibt es zwar sowas wie Twonky Media Server und so, aber das sind immer gleich so fette Systeme, die man sich als Purist nur ungern installiert und die sogar manchmal was kosten! Auf dem iPhone gibt es zwar mittlerweile Apps, die DLNA können, aber das funktioniert doch alles nicht und kostet auch schon wieder Geld.

Alles Grund genug, kurz mal selbst was zu basteln: Wir konvertieren unsere Videos unter Windows selbst zu etwas iPhone-Kompatiblem und streamen das dann mit Apache ins LAN.

Dazu besorgen wir uns erstmal aktuelle FFMPEG-Builds für Windows:
http://ffmpeg.zeranoe.com/builds/
Im Normalfall nehmt Ihr da das neueste unter “32-bit Builds (Static)” und wenn Ihr ganz derbe drauf seid “64-bit Builds (Static)”.

Das runtergeladene 7zip-File schön an Eure Wunsch-Location entpacken. Dann habt Ihr im bin-Verzeichnis die ffmpeg.exe liegen. In diesen Ordner legt Ihr dann folgende Batch-Datei:

convert_iphone.bat

:again
if "%~1" == "" goto done
ffmpeg.exe -i "%~1" -r 29.97 -vcodec libx264 -s 480x320 -flags +loop -cmp +chroma -deblockalpha 0 -deblockbeta 0 -b 400k -bufsize 4M -bt 256k -refs 1 -coder 0 -me_range 16 -subq 4 -partitions +parti4x4+parti8x8+partp8x8 -g 250 -keyint_min 25 -level 30 -qmin 10 -qmax 51 -qcomp 0.6 -trellis 2 -sc_threshold 40 -i_qfactor 0.71 -acodec aac -ab 80k -ar 48000 -ac 2 -strict experimental -y "%~1".mp4
shift
goto again
:done
exit

Von dieser Batch-Datei legt Ihr eine Verknüpfung auf dem Desktop an.

Jetzt könnt Ihr eine oder mehrere Video-Dateien auf diese Verknüpfung ziehen und alles wird kompromisslos zu iPhone-kompatiblem MPEG4 konvertiert. Dabei wird dem Originaldateinamen einfach ein “.mp4″ hinten rangehängt und die neue Datei im gleichen Ordner abgelegt.

Wie kommen jetzt die Videos aufs iPhone, wenn man nicht das unendlich lästige iTunes verwenden möchte und sie vor allem automatisch streamen will, ohne dass man noch einen Handschlag tun muss?

Dazu installieren wir auf unserer Windows-Kiste XAMPP. Ich werde die Installation hier nicht näher erklären, das machen die Apache Friends schon ziemlich gut hier. Ein bisschen Know-how in der Richtung setze ich jetzt einfach mal voraus, das schafft Ihr schon! Genau genommen brauchen wir von XAMPP nur den Apache und PHP. Das restliche Geraffel ist nicht unbedingt vonnöten.

Wir biegen dann die DocumentRoot vom Apache um auf das Verzeichnis, in dem die Videos immer liegen sollen. In dieses Verzeichnis legen wir dann diese PHP-Datei:

movies.php

<?php
chdir(dirname($_SERVER["SCRIPT_FILENAME"]));
if ($handle = opendir(".")) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != ".." && substr(strtolower($file), -4) == ".mp4") {
            echo "<a href="$file">$file</a><br/>";
        }
    }
    closedir($handle);
}
?>

Das Skript listet einfach nur alle “.mp4″-Dateien im aktuellen Verzeichnis auf und verlinkt sie. Das kann man sicher noch schöner machen mit Größenangaben und Thumbnails und so. Aber wir machen hier ja Technik und keine Kosmetikerausbildung ;)

Wenn der Apache jetzt läuft und die Verzeichnisse richtig eingestellt sind, könnt Ihr einfach auf http://localhost/movies.php gehen und müsstet eine Dateiliste bekommen, sofern Ihr MP4-Dateien dort liegen habt.

Jetzt fehlt nicht mehr viel. Ihr braucht jetzt noch die interne IP-Adresse im LAN von Eurem Windows-Rechner. Das Skript muss dann auch unter http://INTERNE_IP_ADRESSE/movies.php funktionieren.

Schwingt Euch aufs Sofa und ruft im iPhone die URL auf, sofern sich das iPhone im gleichen LAN/WLAN befindet wie der Windows-Recher. Ihr müsstet im Safari dann die gleiche Liste zu sehen bekommen. Wenn Ihr einen Film anklickt, wird der Player gestartet und dank HTTP-Progressive-Download kann man dann auch im Stream rumspringen.

Ich finde die Lösung recht übersichtlich und einigermaßen einfach. Es nervt natürlich, dass man neue Videos immer erst manuell konvertieren muss. Dazu könnte man im nächsten Schritt etwas coden, das einen Video-Ordner beobachtet und auf neue Dateien checkt und dann das Konvertieren triggert. Ich hab sowas auch mal in Delphi programmiert, aber das würde den Rahmen hier sprengen.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>