Cómo considerar bitrate, -maxrate y -bufsize de un video para web

13

Estoy usando ffmpeg para codificar mis videos para subirlos a la web. Vi esta publicación sobre el uso de ffmpeg, pero no entendí cómo considerar los valores.

Supongamos que tengo un video de 70 MB con una duración de 4 minutos. ¿Cómo iba a considerar el valor de estas banderas: -b:v, -maxratey -bufsizepara este comando?

ffmpeg -i input -codec:v libx264 -profile:v main -preset slow -b:v ? -maxrate ? -bufsize ? -vf "scale=720:trunc(ow/a/2)*2" -threads 0 -codec:a libfdk_aac -movflags +faststart output

¿O hay algún valor normal, como para los crfvalores son 19-24? Realmente agradecería su ayuda y orientación.

Robin
fuente
La codificación de video es un arte, y hay cientos de parámetros para dominar. Tenga en cuenta que la codificación de dos pasos ofrecerá (mucha) mejor calidad y compresión en la mayoría de los escenarios que jugar con bitrates. Usualmente, el tamaño final y la tasa de bits de video depende principalmente del tamaño de salida de video. ffmpeg es usualmente lo suficientemente inteligente como para elegir maxrate y bitrate si le dice que mantenga la misma calidad de video. Tenga en cuenta también que crear un video de 480px de ancho es lo suficientemente bueno en la mayoría de los escenarios, y eso ahorrará mucho más ancho de banda que jugar con bitrates.
earizon
1
@earizon Estoy de acuerdo, la codificación de video es un arte y 480 suele ser lo suficientemente bueno. Sin embargo, también me gusta tener resoluciones más altas disponibles porque ya no uso un CRT a 640x480. Definitivamente es una mejor manera de reducir tamaños que jugar con bitrates, pero nuevamente, me gustan las opciones.
Wyatt8740

Respuestas:

20

Realmente depende de tu velocidad de carga.

bufsizedeterminará cuán religioso se trata de mantener constante tu tasa de bits. Si establece un valor bufsizede 64k, según FFmpeg Wiki: Limitando la tasa de bits de salida , calculará su tasa de bits actual cada 64 kilobytes y se ajustará en consecuencia. Los tamaños más pequeños bufsizepueden ser perjudiciales para la calidad, ya que no permiten suficiente espacio entre las comprobaciones para x264 para realizar cambios repentinos: obtendrá bloqueo.

Si su maxratees 640kbps, y su bufsizees 64k, entonces cada décima de segundo x264 comprobaría. Esto es subóptimo: FFmpeg Wiki: la codificación para sitios de transmisión recomienda ejecutarlo cada 1 o 2 segundos. Si esto no tiene sentido, considérelo como maxrate/ bufsize= frecuencia de las verificaciones. Mantenga esta frecuencia entre 1 y 2 segundos como regla general.

Si configura ambos maxratey bufsize, debe:

  • configurado maxratea la velocidad de carga más baja que sea probable (en el ejemplo de wiki de ffmpeg , esto es el 80% de la velocidad de carga total, pero su kilometraje puede variar).
  • establecer bufsizeen algún lugar entre lo mismo que su maxrate(un segundo) y dos veces de su maxrate(2 segundos). Si todavía no es lo suficientemente bajo, baje su valor maxratey luego vuelva a configurarlo en bufsizeconsecuencia.

Entonces, tendrás que jugar un poco, pero como tienes que comenzar en algún lugar, comenzaría en maxratealrededor de 600k, que generalmente fue lo suficientemente satisfactorio para mí antes de que lo usara crfpara todo.

Si lo desea, puede probar valores más bajos para bufsize, como cada tres o cuatro segundos, solo para ver cómo el valor cambia la apariencia de su salida. Luego, puede determinar cuánto debe preocuparse por su video.

En realidad, no hay un valor normal: lo que crfhace es optimizar la salida en función de lo que cree que es el mejor tamaño de búfer para mantener la velocidad establecida. Trata de mantener un tamaño de archivo tan bajo mientras mantiene cierta calidad, a costa de picos ocasionales.

Wyatt8740
fuente
1
No debería "establecer bufsize en algún lugar entre lo mismo que su maxrate (un segundo) y la mitad de su maxrate (2 segundos)" be "establecer bufsize en algún lugar entre lo mismo que su maxrate (un segundo) y el doble de su maxrate (2 segundos)" ?
Ely
@Ely, creo que tienes razón. El mío lo haría cada medio segundo. ¡Lo arreglaré!
Wyatt8740
@ Wyatt8740 Lo siento, estaba muy ocupado. Sin embargo, solo una pregunta. Si uso crf, entonces no necesito especificar bitrate, buffsizey maxrate? Y si es así, ¿cuál es más eficiente (usar crfo bitrate, buffsizey maxrate)?
Robin
@Robin Puedes usar bufsize y maxrate con crf. Recuerde, crf ajustará la tasa de bits sobre la marcha para que coincida con una determinada calidad, y si partes del video son muy complejas, la tasa de bits se disparará a gran altura y probablemente no quiera eso, así que mejor "ponga un candado" con tamaño de bufs y maxrate (pero no demasiado estricto, ¡o tu video se verá como una mierda! :))
Ely
@Robin correcto, no deberías necesitar usar crf con los demás. Sin embargo, puedes hacerlo si quieres restringirlo. crf intenta mantener una calidad constante: puede forzarlo a hacerlo dentro de los límites con bufsizey maxrate. Sin bitrateembargo, no es necesario . Como dijo Ely, mejorará la transmisión.
Wyatt8740