Es scheint eine Menge Missverständnisse darüber zu geben, was H.264 (mit einem Punkt) eigentlich ist. Zitat aus Wikipedia :
H.264 / MPEG-4 Part 10 oder AVC (Advanced Video Coding) ist ein Standard für die Videokomprimierung und derzeit eines der am häufigsten verwendeten Formate [...]
Der wichtige Teil, der hier zu strecken ist, ist, dass es nur ein Standard ist . Das heißt, Videos werden nicht wirklich mit H.264 codiert, sondern mit einem Codec, der den H.264-Standard erfüllt. Eine der häufigsten ist x264 (x in Kleinbuchstaben, kein Punkt):
x264 ist eine kostenlose Softwarebibliothek zum Codieren von Videostreams in das H.264 / MPEG-4 AVC-Format.
[...]
x264 implementiert im Vergleich zu anderen H.264-Encodern eine Vielzahl von Funktionen.
H.264 ist also eine Art Schnittstelle, und x264 ist eine Implementierung (mit der tatsächlichen Funktionalität) dieser Schnittstelle.
Der Pi spielt also x264-codierte Dateien einwandfrei ab.
Dann warum spielen einige x264 kodierte Dateien nicht glatt , sondern alle 4-6 Sekunden stoppen (abhängig von der Menge des GPU-Ram)?
Meistens ist es der Klang . Da es sich bei x264 um einen Encoder für HD-Videodateien handelt, werden die meisten dieser Dateien mit einer digitalen, hochwertigen Tonspur geliefert, die den DTS-Codec verwendet .
Der Pi ist (im Moment) nicht in der Lage, die DTS-Spur per Hardware zu dekodieren, und seine CPU ist nicht leistungsfähig genug. Es gibt eine Diskussion darüber in den offiziellen Foren, die einen Blick wert ist.
Um herauszufinden, ob dies bei Ihnen der Fall ist, können Sie das mediainfo
-tool verwenden (muss installiert sein, Paketnamen hängen von Ihrer Distribution ab):
[tv@raspberry]$ mediainfo some_random_movie.mkv
# Shortened output!
Audio #2
ID : 3
Format : DTS
Format/Info : Digital Theater Systems
Codec ID : A_DTS
Sie haben jetzt zwei Möglichkeiten:
- Kaufen Sie einen DTS-fähigen Receiver (vielleicht kann Ihr Fernseher das auch?) Und aktivieren Sie "Pass-Through" (letzter Punkt) in Xbmc (oder einem anderen von Ihnen verwendeten Player).
- Konvertieren Sie die DTS-Tracks in AC3, die durch (schneller) oder CPU-decodiert werden können.
Um herauszufinden, wozu Ihr Receiver (das tvservice
Gerät, an das Sie Ihr HDMI-Kabel angeschlossen haben) in der Lage ist, verwenden Sie das Tool (das sich nicht im PATH befindet, Sie benötigen also den vollständigen Pfad):
[tv@raspberry ~]$ /opt/vc/bin/tvservice -a
PCM supported: Max channels: 2, Max samplerate: 48kHz, Max samplesize 24 bits.
AC3 supported: Max channels: 6, Max samplerate: 48kHz, Max rate 640 kb/s.
Wie Sie sehen, kann mein aktueller Receiver PCM und AC3 (nicht DTS) dekodieren.
Meine Lösung für dieses Problem besteht darin, die Audio-Tracks, die DTS sind, in AC3 umzuwandeln. Hier ist ein kleiner Einzeiler, der alle Audio-Streams in infile.mkv
AC3 konvertiert und das Video nicht berührt:
ffmpeg :
ffmpeg -i infile.mkv -map 0 -codec:v copy -codec:s copy -codec:a ac3 outfile.mkv
avconv :
avconv -i infile.mkv -map 0 -vcodec copy -acodec ac3 -ab 256k outfile.mkv
Hinweis: Mit dem obigen Befehl wird auch die Bitrate für den resultierenden AC3-codierten Audiostream festgelegt (was anscheinend erforderlich ist). 256 kbit / s sind einigermaßen gut (die meisten DVDs verwenden 192 kbit / s).
Zum Glück dauert dies nur ca. 5 Minuten (natürlich abhängig von Ihrer Hardware). Als kleiner Bonus wird Ihre Datei kleiner und wenn Sie kein Audiophiler sind , werden Sie keinen Unterschied hören.
Trotzdem ruckeln 1080p FullHD-Filme , der Bildschirm wird einige Sekunden lang schwarz, ohne Ton, aber die Videowiedergabe scheint fortzufahren. Der Film ist H.264-codiert in einem MKV-Container mit AC3-Spuren. Was ist das Problem?
Höchstwahrscheinlich stimmt nichts mit der Filmdatei, sondern mit Ihren Xbmc-Einstellungen. In meinem Fall war das Problem die "Bildwiederholfrequenz" von Xbmc . Dies ist standardmäßig auf 60 Hz eingestellt. Für 720p und andere kleine Videodateien scheint dies kein Problem für den Pi zu sein, aber 1080p-Dateien führen zu dem obigen Problem.
Verringern Sie die Bildwiederholfrequenz auf weniger als 60 Hz (mindestens 24 Hz sind für Filme ausreichend). Hier gibt es zwei Möglichkeiten:
- Globales Xbmc (einschließlich Xbmc selbst):
System -> Settings -> System -> Video output -> Refresh rate
- Nur Filme (bestimmt durch Videodatei):
System -> Settings -> Video -> Playback -> Adjust display refresh rate to match video
Nach dem Verringern der Bildwiederholfrequenz sollten 1080p-Filme ebenfalls einwandfrei wiedergegeben werden können.