Parece haber muchos malentendidos acerca de lo que H.264 (con un punto) es en realidad. Entonces, citando de Wikipedia :
H.264 / MPEG-4 Parte 10 o AVC (Advanced Video Coding) es un estándar para la compresión de video , y actualmente es uno de los formatos más utilizados [...]
La parte importante para estirar aquí es que es solo un estándar . Eso significa que los videos no están realmente codificados con H.264, sino con un códec que cumple con el estándar H.264. Uno de los más comunes es x264 (minúscula x, sin punto):
x264 es una biblioteca de software gratuita para codificar transmisiones de video en el formato AVC H.264 / MPEG-4.
[...]
x264 implementa una gran cantidad de características en comparación con otros codificadores H.264.
Entonces, H.264 es una especie de interfaz y x264 es una implementación (con la funcionalidad real) de esa interfaz.
Por lo tanto, el Pi reproducirá archivos codificados x264 muy bien.
Entonces, ¿por qué algunos archivos codificados x264 no se reproducen sin problemas pero se detienen cada 4-6 segundos (dependiendo de la cantidad de GPU-Ram)?
La mayoría de las veces, es el sonido . Dado que x264 es un codificador para archivos de video HD, la mayoría de esos archivos vienen con una pista de sonido digital de alta calidad, que utiliza el códec DTS .
El Pi (por el momento) no puede decodificar por hardware la pista DTS y su CPU no es lo suficientemente potente. Hay una discusión sobre esto en los foros oficiales que vale la pena analizar.
Para saber si este es el caso para usted, puede usar la mediainfo
herramienta -tool (debe estar instalado, los nombres de los paquetes dependen de su distribución):
[tv@raspberry]$ mediainfo some_random_movie.mkv
# Shortened output!
Audio #2
ID : 3
Format : DTS
Format/Info : Digital Theater Systems
Codec ID : A_DTS
Ahora tiene dos opciones:
- Compre un receptor compatible con DTS (¿tal vez su televisor también puede hacerlo?) Y habilite el "paso" (último punto) en Xbmc (o cualquier reproductor que esté usando).
- Convierta las pistas DTS a AC3, que se pueden pasar (más rápido) o decodificar por CPU.
Para saber de qué es capaz su receptor (lo que conectó su cable HDMI), use la tvservice
herramienta (que no está en la RUTA, por lo que necesitará la ruta completa):
[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.
Como puede ver, mi receptor actual es capaz de decodificar PCM y AC3 (no DTS).
Mi solución a este problema es convertir las pistas de audio que son DTS a AC3. Aquí hay una pequeña línea que convierte todas las transmisiones de audio en infile.mkv
AC3 y no toca el 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: El comando anterior también establece la velocidad de bits para la secuencia de audio codificada AC3 resultante (que parece ser necesario). Si bien 256 kbps es razonablemente bueno (la mayoría de los DVD usan 192 kbps), es posible que desee aumentarlo / disminuirlo.
Afortunadamente, esto toma solo alrededor de 5 minutos (dependiendo de su hardware, por supuesto). Como un pequeño bono, su archivo se vuelve más pequeño y si no es un Audiophile , no escuchará la diferencia.
Aún así, las películas FullHD de 1080p tartamudean , la pantalla se oscurece durante unos segundos sin sonido, pero la reproducción de video parece continuar. La película está codificada en H.264 en un contenedor MKV con pistas AC3. ¿Cuál es el problema?
Lo más probable es que no haya nada malo con el archivo de película, sino con la configuración de Xbmc. En mi caso, el problema era la "frecuencia de actualización" de Xbmc . Esto está configurado a 60Hz por defecto. Para 720p y cualquier otro archivo de video pequeño, esto parece no ser un problema para el Pi, pero los archivos de 1080p resultan en el problema anterior.
Baje la frecuencia de actualización a algo menos de 60Hz (al menos 24Hz son suficientes para películas). Aquí hay dos opciones:
- Global Xbmc (incluido el propio Xbmc):
System -> Settings -> System -> Video output -> Refresh rate
- Solo películas (determinado por archivo de video):
System -> Settings -> Video -> Playback -> Adjust display refresh rate to match video
Después de reducir la frecuencia de actualización, las películas de 1080p también deberían reproducirse bien.