2011-08-19 19 views
11

Estoy intentando codificar un video con ffmpeg en H.264 (a través de la biblioteca libx264) con una velocidad de bits constante. Lo sé, lo sé, a menudo se prefiere VBR, pero para este trabajo específico debo usar CBR (siempre que sea tantos kilobytes por segundo, no tiene que ser un kilobytes exacto por cuadro, afaik) . Mi video muestra que estoy usando para la prueba es de aquí: http://a1408.g.akamai.net/5/1408/1388/2005110403/1a1a1ad948be278cff2d96046ad90768d848b41947aa1986/sample_iTunes.mov.zip (que proviene de http://support.apple.com/kb/HT1425)Codificación de videos H.264 CBR con FFmpeg

puedo obtener una tasa de bits constante al codificar el vídeo con MPEG-4 Video (utilizando los comandos ffmpeg -i sample_iTunes.mov -b 819968 -minrate 819968 -maxrate 819968 out.mov), y el bit la tasa es la esperada. Al leer las especificaciones del video a través del QuickTime Inspector, tiene una velocidad de datos de 844.94 kbit/s. Guay.

Sin embargo, cuando cambio el códec a libx264, parece ignorar por completo mis solicitudes de velocidad de bits. El comando que estoy intentando es "ffmpeg -i sample_iTunes.mov -vcodec libx264 -vpre medium -b 819968 -vb 819968 -minrate 819968 -maxrate 819968 -bufsize 400000 test.mov". Pero cuando reviso las especificaciones del video a través del QuickTime Inspector, tiene una velocidad de datos de 254.74 kbit/s. WTF? ¡Eso ni siquiera está cerca!

He intentado cambiar tantos parámetros y agregar toneladas de cosas diferentes, y he pasado 2 días buscando en Google esto, pero parece que no puedo hacerlo funcionar. Si codifico el video con el codificador MainConcept H.264, puedo obtener una tasa de bits constante, pero necesito que esto funcione con ffmpeg.

Si alguien me puede ayudar a descubrir cómo hacer la codificación CBR H.264 con FFmpeg, ¡te amaré por siempre!

Respuesta

0

Ok, entonces creo que puedo haber encontrado parte del problema. Hacer -bufsize mayor que la velocidad de datos parece haber resuelto el problema. Por supuesto, no sé si está codificando real CBR, pero la velocidad de datos que lee Quick Time Inspector se ve ahora.

5

Yo también he estado tratando de sacar CBR de x264. Encontré este blog post de Dark Shakari bastante interesante.

Esto es lo que tengo para CBR de vídeo de baja latencia a un flujo de tranporte MPEG:

ffmpeg -i sintel_trailer-720p.mp4 -an -tune zerolatency \ 
     -x264opts bitrate=4000:vbv-maxrate=4000:vbv-bufsize=166 \ 
     -vcodec libx264 -f mpegts -muxrate 4000K -y trailer.ts 

Según el blog del desarrollador de x264 se establece:

  • VBV-maxrate = tasa de bits = B = orientar bitrate
  • vbv-bufsize = B/fps (en el caso de este video que es 24 fps)

Finalmente, configure el interruptor ffmpeg para x264 de -tune latencia.

Espero que sea útil. Y, si alguien tiene mejoras en esto, ¡házmelo saber!

+3

Todavía veo una considerable variabilidad con esas opciones. Sin embargo, +1 porque me lleva a la única opción que realmente ayuda en mi situación, '-muxrate'. Esto agrega relleno nulo al flujo de transporte para intentar alcanzar sus objetivos de CBR. No es perfecto, pero me acerca lo suficiente. Por lo que puedo decir, 'ffmpeg' en realidad no admite CBR en absoluto.Min = avg = max tampoco funciona. El relleno nulo es lo más cercano que se puede obtener. –

+0

Puedo acercarme a un CBR usando estas opciones para +1. Cuando se establece en 4000K, obtengo 4000, 3999.9 y 3999.8, por lo que no es exactamente CBR, pero malditamente cercano. – zgr024

3

Especifique -nal-hrd cbr después de -bufsize 400000.

Cuestiones relacionadas