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:
- 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).
- 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.mkv
AC3 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:
- Global Xbmc (incluso Xbmc stesso):
System -> Settings -> System -> Video output -> Refresh rate
- 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.