Diferencia entre H.264 y x264 y cómo jugarlo


23

Descargo de responsabilidad : esta no es una pregunta real, sino más bien "comparte tu conocimiento, estilo de preguntas y respuestas"

Entonces, estoy ejecutando Xbmc en mi Raspberry Pi y tengo problemas para entender qué puedo jugar con él y qué no.

Leí que el RPi puede reproducir videos codificados H.264 , pero solo puedo encontrar videos codificados x264 . ¿Funcionará eso también? Y si es así, ¿por qué algunos archivos no funcionarán probablemente?

Respuestas:


41

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 mediainfoherramienta -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:

  1. 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).
  2. 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 tvserviceherramienta (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.mkvAC3 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:

  1. Global Xbmc (incluido el propio Xbmc): System -> Settings -> System -> Video output -> Refresh rate
  2. 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.


77
Muy posiblemente la mejor respuesta en RaspberryPi.stackexchange.com.
Vincent P

Ah, también veo que ffmpeg está incluso disponible para el RPI. sudo apt-get install ffmpeg. ¿Has probado esto en el RPI? ¿Funciona bien?
Vincent P


1
@Raphael depende de tu distribución. En ArchLinux, no veo este problema.
Lukas Knuth

1
@LukasKnuth buena respuesta, excepto ffmpegque no está en desuso. avconvEs un tenedor.
aergistal
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.