No todos los codificadores son iguales

No todos los codificadores son iguales

Tengo una película mp4 de 1:15min de duración, realizada con la cámara Sony Alpha 6400 4k. Tiene un tamaño de 528 MB. Quiero cortarlo usando ffmpeg. Aunque solo corté unos segundos, el nuevo video fuemuchomenor. Entonces hice algunas pruebas con el archivo original sin cortar y descubrí que el procesamiento en sí sin ninguna opción produce archivos mucho más pequeños:

 ffmpeg -i C0034.MP4 C0034_ffmpeg.MP4

El archivo de salida C0034_ffmpeg.MP4utiliza sólo 102 MB de espacio. Eso es aproximadamente 1/5 del archivo de entrada,sinaplicando cualquier opción que pueda reducir el tamaño del archivo, como menos fotogramas por segundo, una resolución más pequeña y otras cosas.

Los ajustes preestablecidos

De acuerdo ala documentación:

Un ajuste preestablecido es una colección de opciones que proporcionarán una determinada velocidad de codificación y relación de compresión.

Según tengo entendido, esto es comparable ael -mx=Xinterruptor de 7zip: Un nivel de compresión más alto significa archivos más pequeños. Lleva más tiempo, pero la calidad del archivo no se ve afectada.

El valor predeterminado de ffmpeg es medio. Lo cambié veryslowy obtuve un archivo de 83,4 MB, mientras que el mismo archivo ocupaba 149 MB en formato ultrafast. Esta es una diferencia notable de alrededor de 66 MB desde la compresión más fuerte hasta la más baja. Pero incluso ultrafastsigue siendo 379 MB más pequeño que el archivo de entrada sin formato, por lo que el mediumajuste preestablecido predeterminado no parece explicar la mayor parte de la diferencia.

ElFactor de tasa constante(FRC)

Elmismo artículo H264 de ffmpegmuestra el CRF. Según la documentación,es el modo de control de velocidad recomendado para la mayoría de los usos.Parece ser un factor que se utiliza para ffmpeg para determinar la calidad y el tamaño del archivo.

El rango de la escala CRF es de 0 a 51, donde 0 significa sin pérdidas, 23 es el valor predeterminado y 51 es la peor calidad posible.

Dado que utiliza 23 de forma predeterminada, técnicamente no obtenemos un archivo de salida sin pérdidas. Pero también explica por qué esos archivos de salida no se ven peor que los de entrada, aunque son mucho más pequeños:

Considere que 17 o 18 no tienen pérdidas visuales o casi; Debería verse igual o casi igual que la entrada, pero técnicamente no es sin pérdidas.

Jugando un poco, parece que el CRF influye mucho más en el tamaño del archivo que los ajustes preestablecidos (lo que parece claro, ya que los ajustes preestablecidos solo manejan las compresiones y el CRF la calidad). Probé algunas combinaciones sin ajustes preestablecidos (por lo que se usa el valor predeterminado):

  • -crf 23~> 102 MB (predeterminado)
  • -crf 20~> 189MB
  • -crf 18~> 285MB
  • -crf 17~> 347MB
  • -crf 0~> 2,64GB

Desde las primeras pruebas, supuse que descubrí el motivo: CRF tiene un gran impacto en el tamaño del archivo, incluso si no hay ninguna diferencia visible entre 23 y 17 (al menos no para mí).

PERO realmente me preguntaba cómo -crf 0(lo que significa sin pérdidas) es casi 5 veces más grande que el archivo de entrada original. Por la gran diferencia, supuse que el archivo de salida tiene mejor calidad que el archivo de entrada. ¿Cómo es eso posible? ¿Qué ffmpegse hace para que el archivo de salida sea tan grande?

Respuesta1

No todos los codificadores son iguales

x264 es un codificador H.264 altamente eficiente, lo que significa que puede generar alta calidad a velocidades de bits más bajas. x264 utiliza sofisticados trucos "psicovisuales" para engañar al ojo y ahorrar bits de los que pueden carecer los codificadores menos eficientes.

Los codificadores H.264 en cámaras y teléfonos deben hacer más concesiones debido a otras prioridades (menos recursos, velocidad de codificación mínima requerida, duración de la batería, etc.). Entonces, aunque estén creando el mismo formato, pueden ser muy ineficientes, lo que significa que no pueden igualar x264 con la misma tasa de bits.

La configuración predeterminada para x264 es buena, por lo que el usuario general a menudo no ve una diferencia de calidad, aunque el tamaño del archivo puede reducirse significativamente.

Sin pérdidas es enorme

La configuración -crf 0utiliza un modo comprimido sin pérdidas especial. La mayoría de los trucos para reducir el tamaño de un archivo no se pueden utilizar en modo sin pérdidas.

El tamaño del archivo de entrada no debe considerarse cuando se trata de archivos sin pérdidas. La entrada se decodifica completamente en vídeo sin comprimir: los componentes básicos de un vídeo. El vídeo sin formato no tiene pérdidas, pero tiene el tamaño de archivo más grande de todos porque no está comprimido. Luego, el codificador sin pérdidas toma el vídeo sin procesar y puede comprimirlo un poco, pero aún así lo mantiene sin pérdidas. Como ZIP pero diseñado para vídeo. Más pequeño que el vídeo sin formato, pero no tan pequeño como el típico H.264 con pérdida porque no puede utilizar todos los trucos sofisticados. De lo contrario, ya no estaría libre de pérdidas.

No es posible crear una salida que tenga mejor calidad que la entrada. Sólo puede ser menor o igual en calidad. No importa el formato o el codificador.

información relacionada