Videos für den Western Digital TV HD Live Media Player kodieren

Diese kleine Wunderkiste spielt schon eine ganze Menge Videos ab, aber bei einigen Codecs bzw. Containern kommt sie dann doch nicht mehr mit, daher habe ich mit ffmpeg ein wenig getestet, wie man Videos am besten kodieren kann, damit sie abspielbar sind.
Falls einer der nachfolgenden Befehle nicht funktioniert, liegt es womöglich an der Version von ffmpeg oder an den (nicht) installierten Codecs. Ich habe ffmpeg nach dieser Anleitung installiert: HOWTO: Install and use the latest FFmpeg and x264


Mein Media Player ist ein WD TV Live HD Media Player (WDBAAP0000NBK aka [Live]) und spielt Formate ab, wie sie auf List of compatible media file types for all WD TV and WD Elements Play Products gelistet sind.
Beim Zielformat habe ich mich für den H.264 Codec in einem AVI Container entschieden, üblicher ist als Container MKV und der WDTV sollte das eigentlich auch abspielen, tut meiner aber nicht, mit AVI klappt es aber.


Zum konvertieren nutze ich folgenden Befehl (der Befehl besteht nur aus einer Zeile):
Befehl: ffmpeg -i file -pass 1 -vcodec libx264 -preset ultrafast -b:v 4096k -f h264 -an -y /dev/null && ffmpeg -i file -pass 2 -vcodec libx264 -preset ultrafast -b:v 4096k -acodec libmp3lame -ab 192k -ac 2 -y file.avi
Erklärungen:
-i file #die Eingabedatei
-pass 1#zur Verbesserung der Qualität wird die Datei im ersten Durchgang analysiert und erst im zweiten Durchgang neu codiert
-vcodec libx264 #der Videocodec für die neue Datei, hier H.265
-preset ultrafast #legt die Geschwindigkeit der Codierung fest, je schneller, desto größer die Datei, aber auch besser die Qualität, weitere mögliche Parameter sind fast und slow
-b:v 4096k #die Bitrate (Qualität), mit der das Video codiert wird, mit diesem Wert kann man ein wenig rumspielen, für mich sind die 4094k ein guter Wert
-f h264 #Festlegung des Codecs auf H.264
-an #die Audiospur ignorieren, da im ersten Schritt nur die Videospur analysiert wird
-y #bestehende Dateien werden ohne Nachfrage überschrieben (kann man weglassen, ohne was am Ergebnis zu ändern, nur muss man das überschreiben bestätigen)
/dev/null #das Video wird im ersten Schritt nur analysiert, deshalb wird die Ausgabe nicht gespeichert (zumindest nicht als Video, eine Logdatei wird erstellt)
&& #der zweite Befehl wird ausgeführt, sobald der erste fertig ist
-pass 2 #der zweite Durchgang, hier wird jetzt die Datei auch ausgegeben
-acodec libmp3lame #als Audiocodec wird mp3 verwendet
-ab 192k #Bitrate für Audio
-ac 2 #2 Audiokanäle (Stereo), mehr Kanäle kann der Media Player nicht ausgeben, dafür braucht man ein extra Gerät
file.avi #die fertig kodierte Datei


Um nicht immer alles abtippen zu müssen, habe ich mir ein Script geschrieben, das als Eingabe den Dateinamen erwartet.

Code Highlight von http://quickhighlighter.com

#!/bin/bash
read -p "file name: " file
ffmpeg -i $file -pass 1 -vcodec libx264 -preset ultrafast -b:v 4096k -f h264 -an -y /dev/null
    && ffmpeg -i $file -pass 2 -vcodec libx264 -preset ultrafast -b:v 4096k -acodec libmp3lame
    -ab 192k -ac 2 -y $file.avi

Das Script kann heruntergeladen werden: convert_video.sh


Noch ein Tipp, wenn auf dem System Tab-Vervollständigung aktiviert ist, kann man sich Schreibarbeit sparen mit:
echo Dateiname | ./convert_video.sh


Das obige Script funktioniert bei den meisten Videodateien, allerdings keine Regel ohne Ausnahme: Ist die Tonspur des Ausgangsvideos mit AAC codiert, so kann der WDTV die resultierende Datei nicht abspielen, trotz Umwandlung des Audiostreams in mp3. Zum Glück kann der WDTV AAC jedoch nativ abspielen, so dass das Script nur leicht geändert werden muss:
Ersetze -acodec libmp3lame -ab 192k -ac 2 durch -acodec copy, dadurch wird die bestehende Audiospur einfach in das neue Video kopiert.

ffmpeg für MP3s und WD TV Live HD Media Player

Der WD TV Live HD Media Player ist ein kleiner schwarzer Kasten (ich nenne ihn gerne Blackbox) von Western Digital, der Medien (Bilder, Musik, Videos) über das Netzwerk oder ein angeschlossenes USB-Medium abspielt.
Bisher hatte ich selten Probleme damit, doch seit ich Videos eher mit höherer Auflösung herunterlade (z. B. bei You Tube oder www.onlinetvrecorder.com) kommt es ab und an vor, dass die Blackbox ein Video nicht abspielen kann, das liegt dann meistens an den verwendeten Codecs für das Video, oder der Kombination aus Codec und Containerformat, z. B. kann meine Blackbox Videos, deren Videospur mit H.264 und Audiospur mit AAC codiert sind, nicht abspielen.
Es sollte theoretisch funktioneren (siehe List of compatible media file types for all WD TV and WD Elements Play Products), tut es aber nicht. Kann vorkommen, nervt aber.


Deshalb habe ich mich mit ffmpeg beschäftigt, eine Toolsammlung für die Konsole, um allerhand Konvertierungen mit allerhand Mediendateien durchzuführen. Geholfen haben mir dabei folgende Webseiten, aus denen die weiter unten stehenden Befehle hervorgegangen sind: