Unterschied zwischen H.264 und x264 und wie man es spielt

23

Haftungsausschluss : Dies ist keine eigentliche Frage, sondern "Teilen Sie Ihr Wissen, Q & A-Stil"

Also starte ich Xbmc auf meinem Raspberry Pi und habe Probleme zu verstehen, was ich damit wirklich spielen kann und was nicht.

Ich habe gelesen, dass das RPi H.264- codierte Videos abspielen kann , aber ich kann nur x264- codierte Videos finden. Wird das auch funktionieren? Und wenn ja, warum funktionieren einige Dateien wahrscheinlich nicht?

Lukas Knuth
quelle

Antworten:

41

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:

  1. 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).
  2. Konvertieren Sie die DTS-Tracks in AC3, die durch (schneller) oder CPU-decodiert werden können.

Um herauszufinden, wozu Ihr Receiver (das tvserviceGerä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.mkvAC3 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:

  1. Globales Xbmc (einschließlich Xbmc selbst): System -> Settings -> System -> Video output -> Refresh rate
  2. 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.

Lukas Knuth
quelle
7
Sehr wahrscheinlich die beste Antwort auf RaspberryPi.stackexchange.com.
Vincent P
Oh, auch ich sehe, dass ffmpeg sogar für das RPI verfügbar ist. sudo apt-get install ffmpeg. Haben Sie dies auf dem RPI versucht? Funktioniert es gut
Vincent P
3
@ Raphael Nein, es ist nicht: stackoverflow.com/a/9477756/717341
Lukas Knuth
1
@Raphael es kommt auf deine Distribution an. In ArchLinux sehe ich dieses Problem nicht.
Lukas Knuth
1
@ LukasKnuth gute Antwort, außer ffmpegwird nicht abgewertet. avconvist eine Gabel.
Aergistal