Differenza tra H.264 e x264 e come giocare


23

Disclaimer : questa non è una vera domanda, ma piuttosto "condividi le tue conoscenze, stile domande e risposte"

Quindi, sto eseguendo Xbmc sul mio Raspberry Pi e ho problemi a capire cosa posso effettivamente giocare con esso e cosa no.

Ho letto l'RPi in grado di riprodurre video con codifica H.264 , ma posso trovare solo video con codifica x264 . Funzionerà anche quello? E se è così, perché alcuni file probabilmente non funzionano?

Risposte:


41

Sembra che ci siano molti fraintendimenti su cosa sia effettivamente H.264 (con un punto). Quindi, citando da Wikipedia :

H.264 / MPEG-4 Part 10 o AVC (Advanced Video Coding) è uno standard per la compressione video ed è attualmente uno dei formati più comunemente [...]

La parte importante da allungare qui è che è solo uno standard . Ciò significa che i video non sono effettivamente codificati con H.264, ma con un codec che soddisfa lo standard H.264. Uno dei più comuni è x264 (x minuscola, nessun punto):

x264 è una libreria di software gratuita per la codifica di flussi video nel formato AVC H.264 / MPEG-4.
[...]
x264 implementa un gran numero di funzionalità rispetto ad altri codificatori H.264.

Quindi, H.264 è una specie di interfaccia e x264 è un'implementazione (con la funzionalità effettiva) di quella interfaccia.

Quindi, il Pi riprodurrà bene i file codificati x264.


Quindi perché alcuni file con codifica x264 non vengono riprodotti correttamente ma si fermano ogni 4-6 secondi (a seconda della quantità di GPU-Ram)?

Il più delle volte, è il suono . Poiché x264 è un codificatore per file video HD, la maggior parte di questi file ha una colonna sonora digitale di alta qualità, che utilizza il codec DTS .

Il Pi (al momento) non è in grado di decodificare hardware la traccia DTS e la sua CPU non è abbastanza potente. C'è una discussione al riguardo sui forum ufficiali che vale la pena esaminare.

Per scoprire se questo è il tuo caso, puoi usare mediainfo-tool (deve essere installato, i nomi dei pacchetti dipendono dalla tua distribuzione):

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

Ora hai due opzioni:

  1. Acquista un ricevitore compatibile con DTS (forse anche la tua TV può farlo?) E abilita il "pass-through" (ultimo punto) in Xbmc (o qualunque lettore tu stia usando).
  2. Converti le tracce DTS in AC3, che possono essere passate (più velocemente) o decodificate dalla CPU.

Per scoprire di cosa è capace il tuo ricevitore (la cosa a cui hai collegato il tuo cavo HDMI), usa tvservice-tool (che non è nel PERCORSO, quindi avrai bisogno del percorso completo):

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

Come puoi vedere, il mio attuale ricevitore è in grado di decodificare PCM e AC3 (non DTS).

La mia soluzione a questo problema è convertire le tracce audio DTS in AC3. Ecco un piccolo one-liner che converte tutti i flussi audio in infile.mkvAC3 e non tocca il video:

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

Nota: il comando precedente imposta anche la velocità in bit per il flusso audio codificato AC3 risultante (che è necessario, a quanto pare). Mentre 256kbps è ragionevolmente buono (la maggior parte dei DVD usa 192kbps), potresti volerlo inserire / ridurre.

Fortunatamente, ciò richiede solo circa 5 minuti (ovviamente a seconda dell'hardware). Come piccolo bonus, il tuo file diventa più piccolo e se non sei un Audiophile , non sentirai la differenza.


Tuttavia, i filmati FullHD 1080p sono balbettanti , lo schermo diventa nero per alcuni secondi senza audio ma la riproduzione del video sembra continuare. Il film è codificato H.264 in un contenitore MKV con tracce AC3. Qual è il problema?

Molto probabilmente, non c'è nulla di sbagliato nel file filmato, ma nelle impostazioni di Xbmc. Nel mio caso, il problema era la "frequenza di aggiornamento" di Xbmc . L'impostazione predefinita è 60Hz. Per 720p e qualsiasi altro piccolo file video, questo non sembra essere un problema per il Pi, ma i file 1080p causano il problema sopra.

Abbassa la frequenza di aggiornamento a qualcosa di meno di 60Hz (almeno 24Hz sono sufficienti per i filmati). Ci sono due opzioni qui:

  1. Global Xbmc (incluso Xbmc stesso): System -> Settings -> System -> Video output -> Refresh rate
  2. Solo film (determinato dal file video): System -> Settings -> Video -> Playback -> Adjust display refresh rate to match video

Dopo aver abbassato la frequenza di aggiornamento, anche i filmati 1080p dovrebbero essere riprodotti correttamente.


7
Molto probabilmente la migliore risposta su RaspberryPi.stackexchange.com.
Vincent P,

Vedo anche che ffmpeg è disponibile anche per l'RPI. sudo apt-get install ffmpeg. Hai provato questo su RPI? Funziona bene?
Vincent P,


1
@Raphael dipende dalla tua distribuzione. In ArchLinux, non vedo questo problema.
Lukas Knuth,

1
@LukasKnuth buona risposta tranne ffmpegnon è depresso. avconvè una forchetta.
Aergistal,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.