Codificación de video: desperdicio de espacio

Me enfrento a un problema común que no puedo encontrar un término para describir: tengo algunos fragmentos de VHS de baja calidad que fueron codificados con cierto códec Apple ProRes (irrelevante en el contexto de esta pregunta en particular) y ocupan varios GB de espacio. Estoy seguro de que el contenido de video es de tan baja calidad que no debería ocupar más espacio que, por ejemplo, un archivo XDCAM EX 1080 HD de mayor duración y mayor calidad visual.

Del mismo modo, ¿cómo es posible que un archivo de video pueda volverse diez veces más grande sin aumentar la fidelidad cuando se codifica con un códec sin pérdidas o con una tasa de bits más alta? Supongo que de alguna manera el codificador agrega información "extra" a medida que vuelve a codificar... pero obviamente es imposible que un archivo de baja fidelidad gane calidad cuando simplemente se vuelve a codificar con configuraciones de mayor calidad... ¿y qué? esta pasando aqui?

¿Existe una palabra para describir este fenómeno? Además, ¿cómo puedo asegurarme de que mi transcodificación no AUMENTE el tamaño del archivo? He estado buscando herramientas que puedan medir la tasa de bits adecuada para los archivos (como las grabaciones de VHS de baja fidelidad que de alguna manera pueden ocupar hasta 10 GB... lo que no debería suceder) pero no puedo encontrar ninguna herramienta como esta. .. Lo que quiero hacer en esta situación es volver a codificar estos archivos masivos a un formato apropiado con un tamaño de archivo razonable sin perder ninguna calidad visible...

Respuestas (3)

Esto no es un fenómeno, esto es compresión. Es simplemente cómo funciona.

La compresión funciona tomando una entrada, la ejecuta a través de algunos algoritmos y luego obtiene una salida que coincide exactamente (sin pérdidas) o aproximadamente (con pérdidas) con la entrada original. No se almacena como los datos de video normales como un conjunto de píxeles, sino como una forma de datos que modela el conjunto original de píxeles utilizando menos espacio.

Cuando decodifica un video, funciona desde el formato comprimido y genera una secuencia de valores de píxeles que se pueden reproducir como video real. Cuando transcodifica de un formato a otro, el video primero pasa por este proceso de decodificación para obtener un conjunto de valores de color de píxeles y luego pasa por la codificación para el nuevo formato.

Lo que parece que te estás perdiendo es que no importa qué tan alta sea la calidad de la señal real que entra en la codificación, funcionará con lo que le des. Puede guardar un video de baja calidad, plagado de artefactos, granulado, desagradable y ruidoso como un formato sin pérdidas y terminaría con un video de baja calidad, plagado de artefactos, granulado, desagradable y ruidoso perfectamente conservado. No habría más degradación en la calidad, pero todavía tienes un video de mala calidad y ocupa una gran cantidad de espacio porque no almacena una aproximación de la mala calidad del video, sino los datos exactos.

Si, en cambio, usara una compresión con pérdida que fuera "similar" al nivel de calidad del video, introduciría aún más artefactos malos y perdería cualquier apariencia de señal real que quedara en el video.

Este principio también se conoce como generaciones de pérdida . Es principalmente un remanente de los días analógicos cuando ninguna copia era sin pérdidas y, por lo tanto, el número de generaciones de copias debía mantenerse al mínimo para preservar la calidad. Con la era digital, este problema se alivió en gran medida ya que un archivo digital se puede copiar perfectamente, sin embargo, aún vive en la transcodificación donde hay generaciones de pérdida.

Este punto en realidad también explica por qué los archivos de video SD son mucho más grandes de lo que espera. La mayoría de los consumidores están acostumbrados a formatos de compresión de usuario final con tamaños de archivo relativamente pequeños. Estos tamaños de archivo son excelentes para los usuarios finales porque no necesitan ser editados o recodificados; sin embargo, dichos formatos se desmoronan rápidamente cuando intenta codificarlos nuevamente debido al tamaño de archivo pequeño y la gran cantidad de pérdida (incluso si no es fácilmente obvio para un espectador normal).

El video DV de calidad de producción usó un gigabyte o más de almacenamiento cada 4,7 minutos aproximadamente, por lo que no es del todo inesperado que su captura SD de alta calidad (incluso si la fuente en sí era una mierda) es "grande" según los estándares del consumidor. Si no necesita editar los videos, está perfectamente bien transcodificarlos como videos terminados a un tamaño de archivo de bajo consumo de tasa de bits. Recomendaría usar codificación VBR de 2 pasos para este propósito, h.264 debería funcionar bien y podría usar una tasa de bits baja.

Las tasas de bits son, en última instancia, las que determinan el tamaño del archivo en la compresión. La tasa de bits define la cantidad de datos que se permite usar para codificar el video y, en términos generales, el algoritmo de compresión aproximará el metraje lo mejor que pueda con la tasa de bits dada. Cuanto menor sea la tasa de bits, menor será el archivo, pero menor será la calidad y menos capaz será de volver a codificar el video en el futuro sin una pérdida de calidad catastrófica.

En cuanto a qué niveles puede usar sin una pérdida de calidad notable para un resultado final, eso realmente depende del contenido y es demasiado amplio para un sitio de preguntas y respuestas sin una muestra de video para ver. La compresión es un campo increíblemente complejo con muchas opciones y hay personas que no hacen nada más que manejar la compresión durante toda su vida. Los colores, la cantidad de movimiento, la cantidad de ruido, etc., tienen un impacto en la cantidad de datos que realmente se requieren para almacenar el video de manera que el usuario final no note artefactos.

Generaciones de pérdida era el término que estaba buscando. A veces olvido que la compresión es tan compleja como parece, así que supongo que tendré que jugar con las configuraciones hasta que encuentre algunas configuraciones que funcionen para archivar las grabaciones de VHS. ¡Gracias! Este fue un empate difícil: la otra respuesta fue realmente excelente al brindar información fácil de entender sobre cómo funciona la compresión de video.

Para comprender esto, debe comprender cómo funcionan realmente los códecs. Un cuadro de video simple sin comprimir, por ejemplo, una sola imagen es bastante grande. Estoy hablando de un mapa de bits, no de un video codificado sin pérdida, sin codificación en absoluto, solo información simple de píxeles.

Aquí un ejemplo simple de un cuadro Full HD para tener alguna perspectiva: tenemos una resolución 1920x1080que equivale a 2073600píxeles. Ahora cada píxel tiene tres valores de color. Suele ser un valor de 8 bits por color (aunque también podría ser 10/12/16 o 32 bits). Entonces tenemos 2073600*3*8que es igual a 49766400 bits. Para obtener bytes tenemos que dividir por 8 y obtenemos 6220800 bytes o 5,93 MB. ¡Así que eso es casi 6 MB por cuadro, para un video de 30 FPS, son 178 MB por segundo ! Un video de 10 minutos sería una locura de 104 GB.

Ahora, afortunadamente, algunas personas realmente inteligentes desarrollaron todo tipo de algoritmos para definir un marco de una manera más inteligente/más corta y al mismo tiempo contener la información completa del mapa de bits original. Eso es lo que llamaríamos un códec sin pérdidas, solo una forma diferente de guardar la misma información.

Entonces, cuando graba su VHS, su dispositivo de captura obtiene cada cuadro como un mapa de bits que codificará de la manera que le indique. Entonces, incluso si VHS usa compresión analógica y tiene una mala calidad general, aún termina con la misma cantidad de información que con un Blu-ray codificado con la misma resolución y profundidad de bits que su dispositivo de captura está grabando su VHS. La "buena calidad" solo está determinada por su percepción de la imagen.

Solo tenga en cuenta que cuando decodifica un archivo de video o captura algo para reproducirlo en su reproductor de video o para codificarlo con otro códec (transcodificar) siempre tiene este enorme mapa de bits sin procesar como paso intermedio, la información "sin procesar" que puede usar para describirlo de una manera nueva o simplemente mostrarlo en su monitor.

Ahora hay un límite en lo bien que puede describir una imagen de una manera más corta/pequeña sin descartar alguna información.

Esos son los llamados códecs con pérdida como h264. Estos son algoritmos aún más inteligentes y complejos donde un cuadro ya no es solo un cuadro, el codificador mira varios cuadros e intenta estimar cómo se verán los cuadros entre los llamados " fotogramas clave " en función de la información en esos fotogramas clave. También dividen la imagen en varios bloques de información e intentan "adivinar" cómo deben verse. Debido a que sabemos cómo adivinamos la información, solo necesitamos una "pista", de modo que cuando decodifiquemos nuestro marco podamos adivinar con bastante precisión cómo se habría visto esta parte de la información, pero no es una representación 100% precisa de la información de origen.

Es por eso que puede ser mucho más pequeño que nuestra representación precisa con un códec sin pérdidas.

También es la razón por la que teníamos este bloqueo en videos codificados en MPEG2 muy comprimidos en los primeros días de Internet, h.264 maneja eso de una manera mucho más inteligente, por lo tanto, ya no tenemos este tipo de artefactos, pero obtenemos estas extrañas distorsiones a veces cuando la imagen se difumina de esta "manera en bloques", eso sucede cuando hay un error de decodificación y nos perdimos un fotograma clave para decodificar los fotogramas entre el siguiente fotograma clave.

Para responder a tu última parte. MP4 con video codificado h264 es generalmente una buena idea. Use una herramienta como Handbrake , hace que la tarea sea muy fácil y todavía tiene mucho control sobre el resultado. Elija un ajuste preestablecido o establezca la configuración "RF" en 18 para obtener un video visualmente sin pérdidas. Lo que significa que no verá una diferencia de calidad visual.

Se necesitan muchos bits para reproducir con precisión, o casi con precisión, los píxeles de entrada, independientemente de lo que contengan. La única excepción son las cosas de baja complejidad, como una captura de pantalla o una animación, donde las áreas grandes son EXACTAMENTE del mismo color y/o son idénticas bit a bit de un cuadro a otro.

La diferencia entre su intuición y la vida real proviene del hecho de que es la complejidad medida por una computadora, no la complejidad/calidad visual percibida por el ser humano, en lo que operan los códecs.

Comprimir el ruido es donde van todos los bits. Un viaje de ida y vuelta a través de un códec con pérdida en realidad disminuirá la compresibilidad de la animación, porque luego se introducen los artefactos de desenfoque y especialmente de bloqueo que le está pidiendo al siguiente códec que reproduzca.

Si hubiera una manera de seleccionar solo la imagen que desea ver del ruido VHS y los artefactos de bloqueo de MPEG en una captura típica, es decir, encontrar solo la complejidad que desea mantener y desechar todo lo demás, sería el Santo Grial. de vídeo por ordenador. Sería, por definición, el filtro de reducción de ruido perfecto, así como algo sobre lo que podría construir un códec ridículamente eficiente.

Todo lo que tenemos ahora son aproximaciones aproximadas que intentan adivinar qué es importante mantener en función de los coeficientes DCT o wavelets y medidas similares. (por ejemplo, alta energía en coeficientes más altos significa que probablemente haya algunos bordes aquí, por lo que sería peor de lo normal distorsionar este bloque de 16x16 píxeles de la imagen).