Différence entre H.264 et x264 et comment y jouer

23

Avertissement : Ce n'est pas une question réelle, mais plutôt "partagez vos connaissances, style Q & A"

Donc, je lance Xbmc sur mon Raspberry Pi et j'ai du mal à comprendre ce que je peux réellement jouer avec et non.

J'ai lu que le RPi peut lire des vidéos encodées H.264 , mais je ne peux trouver que des vidéos encodées x264 . Est-ce que cela fonctionnera aussi? Et si oui, pourquoi certains fichiers ne fonctionneront-ils probablement pas?

Lukas Knuth
la source

Réponses:

41

Il semble y avoir beaucoup de malentendus sur ce qu'est réellement le H.264 (avec un point). Donc, en citant Wikipédia :

H.264 / MPEG-4 Part 10 ou AVC (Advanced Video Coding) est une norme pour la compression vidéo , et est actuellement l'un des formats les plus couramment utilisés [...]

La partie importante à étirer ici est que ce n'est qu'une norme . Cela signifie que les vidéos ne sont pas réellement encodées avec H.264, mais avec un codec qui répond à la norme H.264. L'un des plus courants est x264 (minuscule x, pas de point):

x264 est une bibliothèque de logiciels gratuite pour l'encodage de flux vidéo au format AVC H.264 / MPEG-4.
[...]
x264 implémente un grand nombre de fonctionnalités par rapport aux autres encodeurs H.264.

Ainsi, H.264 est une sorte d'interface et x264 est une implémentation (avec les fonctionnalités réelles) de cette interface.

Ainsi, le Pi jouera très bien les fichiers encodés x264.


Alors pourquoi certains fichiers encodés x264 ne sont-ils pas lus correctement mais s'arrêtent-ils toutes les 4 à 6 secondes (selon la quantité de GPU-Ram)?

La plupart du temps, c'est le son . Étant donné que x264 est un encodeur pour les fichiers vidéo HD, la plupart de ces fichiers sont livrés avec une piste sonore numérique de haute qualité, qui utilise le codec DTS .

Le Pi n'est pas (pour le moment) capable de décoder matériellement la piste DTS et son processeur n'est pas assez puissant. Il y a une discussion à ce sujet sur les forums officiels qui mérite d'être examinée.

Pour savoir si c'est le cas pour vous, vous pouvez utiliser l' mediainfooutil -t (doit être installé, les noms de packages dépendent de votre distribution):

[tv@raspberry]$ mediainfo some_random_movie.mkv 
# Shortened output!
Audio #2
ID                                       : 3
Format                                   : DTS
Format/Info                              : Digital Theater Systems
Codec ID                                 : A_DTS

Vous avez maintenant deux options:

  1. Achetez un récepteur compatible DTS (peut-être que votre téléviseur peut le faire aussi?) Et activez le "pass-through" (dernier point) dans Xbmc (ou quel que soit le lecteur que vous utilisez).
  2. Convertissez les pistes DTS en AC3, qui peuvent être transmises (plus rapidement) ou décodées par le processeur.

Pour savoir de quoi est capable votre récepteur (ce que vous avez branché votre câble HDMI), utilisez l' tvserviceoutil -t (qui n'est pas dans le CHEMIN, vous aurez donc besoin du chemin complet):

[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.

Comme vous pouvez le voir, mon récepteur actuel est capable de décoder PCM et AC3 (pas DTS).

Ma solution à ce problème est de convertir les pistes audio qui sont DTS en AC3. Voici un petit one-liner qui convertit tous les flux audio en infile.mkvAC3 et ne touche pas la vidéo:

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

Remarque: La commande ci-dessus définit également le débit binaire pour le flux audio codé AC3 résultant (ce qui est nécessaire, semble-t-il). Bien que 256 kbps soit raisonnablement bon (la plupart des DVD utilisent 192 kbps), vous voudrez peut-être l'in / diminuer.

Heureusement, cela ne prend que 5 minutes environ (en fonction de votre matériel, bien sûr). En prime, votre fichier devient plus petit et si vous n'êtes pas un audiophile , vous n'entendrez pas de différence.


Pourtant, les films FullHD 1080p sont saccadés , l'écran devient noir pendant quelques secondes sans son, mais la lecture vidéo semble continuer. Le film est codé H.264 dans un conteneur MKV avec des pistes AC3. Quel est le problème?

Très probablement, il n'y a rien de mal avec le fichier vidéo, mais avec vos paramètres Xbmc. Dans mon cas, le problème était le "taux de rafraîchissement" de Xbmc . Il est réglé sur 60 Hz par défaut. Pour 720p et tout autre petit fichier vidéo, cela ne semble pas être un problème pour le Pi, mais les fichiers 1080p entraînent le problème ci-dessus.

Réduisez le taux de rafraîchissement à quelque chose de moins de 60 Hz (au moins 24 Hz suffisent pour les films). Il y a deux options ici:

  1. Global Xbmc (y compris Xbmc lui-même): System -> Settings -> System -> Video output -> Refresh rate
  2. Films uniquement (déterminé par le fichier vidéo): System -> Settings -> Video -> Playback -> Adjust display refresh rate to match video

Après avoir abaissé le taux de rafraîchissement, les films 1080p devraient également très bien jouer.

Lukas Knuth
la source
7
Très probablement la meilleure réponse sur RaspberryPi.stackexchange.com.
Vincent P
Oh aussi je vois que ffmpeg est même disponible pour le RPI. sudo apt-get install ffmpeg. Avez-vous essayé cela sur le RPI? Ça marche bien?
Vincent P
3
@Raphael non, ce n'est pas: stackoverflow.com/a/9477756/717341
Lukas Knuth
1
@Raphael cela dépend de votre distribution. Dans ArchLinux, je ne vois pas ce problème.
Lukas Knuth
1
@LukasKnuth bonne réponse sauf qu'elle ffmpegn'est pas dépréciée. avconvest une fourchette.
aergistal