Velocidades de bits variables con ajustes "-vb" y "minrate" / "maxrate" en FFmpeg

12

Para renderizar, el tiempo que lleva es muy diferente.

  • -b 3500K -minrate 0K -maxrate 8000K dura 1 hora 17 minutos
  • vb=3000k toma 2.5 horas

¿Qué es vb 3000ky cómo es diferente -b 3500K -minrate 0K -maxrate 8000K? ¿Son estas configuraciones de velocidad de bits variable?

Si cambié a -b 3500K -minrate 3500K -maxrate 3500K, ¿es esa tasa de bits constante?

Scott Downey
fuente

Respuestas:

16

Por favor lea la documentación para FFmpeg, y correr ffmpeg -h fullpor la lista de opciones. Además, eche un vistazo a este artículo que escribí, que muestra las diferencias entre los modos de control de velocidad en codificadores como x264 y x265.

En general, esto es lo que significan las opciones:

  • -b:v(o -vb, lo mismo) especifica la tasa de bits promedio objetivo para que el codificador use:

    -b <int> E..VA. establecer bitrate (en bits / s) (de 0 a INT_MAX)

  • -minrate especifica una tolerancia mínima para ser utilizada:

    -minrate <int> E..VA. Establezca la tolerancia mínima de velocidad de bits (en bits / s). Lo más útil para configurar una codificación CBR. Es de poca utilidad de lo contrario. (de INT_MIN a INT_MAX)

  • -maxrateEspecifica una tolerancia máxima. Sin embargo, como lo indica la documentación, esto solo se usa junto con bufsize:

    -maxrate <int> E..VA. Establezca la tolerancia máxima de velocidad de bits (en bits / s). Requiere bufsizeser configurado. (de INT_MIN a INT_MAX)

    -bufsize <int> E..VA. establecer el tamaño del búfer de control de velocidad (en bits) (de INT_MIN a INT_MAX)

    Esto solo tiene sentido para la codificación de velocidad de bits variable, donde en lugar de usar una velocidad de bits constante o un modelo de calidad constante, el codificador simula una transmisión con un buffer virtual en el decodificador. Las opciones -minrate/ -maxrate/ -bufsizecontrolan ese tamaño de búfer. Por lo general, solo usa este modo para la transmisión, ya que la técnica limitará la velocidad de bits para no exceder un cierto valor que causaría que el búfer del decodificador se desborde o se desborde.

Para resumir, tiene varias opciones para limitar la tasa de bits:

  1. Para configurar un proceso CBR, debe verificar lo que ofrece el codificador. Por lo general, no puede lograr una tasa de bits constante "perfecta", ya que el codificador no desperdiciará bits. La configuración -b:v, -minratey -maxrateen los mismos niveles logrará eso, por ejemplo para libx264:

    ffmpeg -i input.mp4 -c:v libx264 -x264-params "nal-hrd=cbr" -b:v 1M -minrate 1M -maxrate 1M -bufsize 2M output.ts
    

    Advertencia: Esto puede resultar en baja calidad para videos que son difíciles de codificar y desperdiciará bits. A menos que sea absolutamente necesario lograr una salida de velocidad constante, no use esta opción.

  2. Configure un proceso de velocidad de bits restringida / variable para la transmisión. Uso -b:v 3500K -maxrate 3500K -bufsize 1000K, por ejemplo. Obviamente, tendrá que ajustar la velocidad y los tamaños del búfer al contexto. Cuanto mayor sea el tamaño del búfer, mayor será la variación de velocidad de bits permitida.

  3. Use un objetivo de calidad constante y limite la tasa de bits solo para atrapar picos. Por ejemplo, utilice -c:v libx264 -crf 23 -maxrate 4M -bufsize 4Mpara codificar a velocidad de bits variable con un CRF objetivo de 23, pero limite la salida a un máximo de 4 MBit / s.

slhck
fuente
1
¿Cómo codificaría usando una velocidad de bits variable? como en la sintaxis a usar?
Scott Downey
¿Qué codificador quieres usar?
slhck
ffmpeg, creo que se usa en kdenlive
Scott Downey
No, quise decir en: x264 para video AVC H.264 / MPEG-4 o XviD para MPEG-4, o Ogg Theora, etc. simplemente, ¿qué archivo quieres? MP4?
slhck
3
Consulte aquí para obtener más información sobre la codificación con x264 en FFmpeg; mira especialmente los preajustes (generalmente uso el preajuste muy rápido, en mis pruebas la mayor caída en el tamaño del archivo fue entre súper rápido y muy rápido, después de eso las diferencias fueron mucho más incrementales. YMMV, por supuesto).
evilsoup