¿Qué compresión de archivos hace que los archivos .mp4 sean los más pequeños?

¿Qué compresión de archivos hace que los archivos .mp4 sean los más pequeños?

¿Existe un formato de compresión basado en archivos que se sepa que genera los videos .mp4 más pequeños?

Hice una prueba de video de 1080p con una duración de 0:12 con los únicos formatos de archivo que conozco:

(python3) Joshs-MBP:testing_movie mu$ ls -lS
total 12712
-rw-r--r--  1 mu  staff  2145528 Jun  6 09:26 testing.mov
-rw-r--r--  1 mu  staff  1790044 Jun  6 09:26 testing.mov.zip
-rw-r--r--@ 1 mu  staff  1789512 Jun  6 09:25 testing.mov.gz
-rw-r--r--  1 mu  staff   775138 Jun  6 09:26 testing.mov.bz2

Parece que bzip2es lo mejor. ¿Hay algo más que sea mejor en términos de hacer los archivos más pequeños? Está bien si lleva mucho más tiempo.

Además, noté que no se puede crear bzip2un directorio.

Respuesta1

Primero, una pequeña aclaración sobre la terminología: ZIP es el únicoarchivoformato que usaste. Gzip y Bzip2 son formatos de compresión, no formatos de archivo. Para ser un poco más específico:

  • Un formato de archivo agrega múltiples archivos y/o directorios, que generalmente incluyen metadatos como propiedad, marcas de tiempo y posiblemente otros datos, en un solo archivo. Tar es un ejemplo de formato de archivo puro, no realiza compresión inherente,

  • Un formato de compresión simplemente comprime datos, pero no combina inherentemente varios archivos en uno. Gzip, Bzip2, Brotli, LZ4, LZOP, XZ, PAQ y Zstandard son todos formatos de compresión. Algunos de ellos (como Gzip y LZ4) pueden admitir la compresión de varios archivos y concatenarlos en un solo archivo que luego se puede descomprimir en los múltiples archivos originales (que es lo que sucede cuando se comprime un directorio), pero no almacenan rutas u otros metadatos, por lo que no son formatos de archivo.

Algunos formatos, como ZIP, 7z o RAR, combinan archivado y compresión (aunque ZIP también puede almacenar archivos sin comprimir).

Ahora, dejando esto claro, pasemos a tu pregunta principal:

El comentario de music2myear es correcto. Sus resultados variarán ampliamente dependiendo de los detalles exactos de la codificación MP4 utilizada. Esto se debe a que el propio MP4 incluye compresión de datos, en este caso optimizada para comprimir datos de audio y vídeo sin reducir significativamente la calidad percibida. Los procesos que utiliza para esto son en realidad algo complicados (demasiado complicados para explicarlos aquí), pero debido a la restricción de que no reduce la calidad percibida, combinado con el hecho de que comprime cuadro por cuadro en lugar de como un único proceso largo. transmisión, a veces hay un margen de mejora significativo (como puede ver en su prueba).

Ahora bien, aunque no puedo dar una respuesta concluyente sin muchos más detalles, puedo darte algunos consejos generales sobre la compresión de archivos:

  • ZIP y Gzip muestran resultados muy similares en este caso porque utilizan variantes del mismo algoritmo de compresión, más concretamente un derivado del algoritmo LZW conocido como DEFLATE. DEFLATE no es un algoritmo de compresión particularmente bueno, pero es omnipresente (incluso hay implementaciones de hardware del mismo), por lo que a menudo se usa como estándar de comparación. Aparte de su uso como componente de otros formatos de archivo (como ZIP), ya no se usa mucho para almacenamiento. Prácticamente cualquier cosa basada en DEFLATE (o LZW en general) no ganará en ningún aspecto al comparar algoritmos de compresión.

  • Bzip2, por el contrario, realiza algunas transformaciones complejas en los datos para que se compriman de manera más eficiente y luego utiliza la codificación Huffman para la compresión real. En la mayoría de los casos, se comprime mejor que los compresores basados ​​en DEFLATE, pero también es más lento que DEFLATE. Debido a algunas suposiciones hechas sobre cómo transforma los datos de entrada antes de la codificación de Huffman, también es algo más sensible que muchas otras opciones a cómo se estructuran los datos de entrada.

  • XZ utiliza un algoritmo diferente llamado LZMA. Al igual que el algoritmo LZW del que se deriva DEFLATE, LZMA se deriva en última instancia de un algoritmo conocido como LZ77, aunque obtiene relaciones de compresión increíblemente mejores que las opciones basadas en DEFLATE, y relaciones significativamente mejores que Bzip2 en la mayoría de los casos. Además de LZMA, realiza algunas transformaciones que lo hacen un poco mejor a la hora de comprimir ejecutables que las otras opciones. Sin embargo, el coste de esto es que lleva mucho tiempo comprimir los datos. 7zip también usa LZMA, pero sin las transformaciones de datos, por lo que a menudo no es tan bueno en términos de proporciones como XZ.

  • LZOP utiliza el algoritmo LZO y generalmente comprime peor que DEFLATE, pero funciona mucho más rápido. Al igual que Gzip, ya no se usa mucho, ya que la gente tiende a favorecer alternativas que ofrecen una mejor relación de compresión o un mejor rendimiento.

  • LZ4 es un estándar más nuevo desarrollado por Google que se ejecuta increíblemente rápido (velocidad de ancho de banda cercana a la memoria para descompresión), pero obtiene relaciones de compresión aún peores que LZO. Ha estado reemplazando lentamente a LZO, ya que la mayoría de las cosas que usaban LZO lo usaban para velocidad.

  • Brotli es otra novedad de Google. Es parte del estándar HTTP/2 y está optimizado específicamente para la transmisión y, de hecho, puede obtener mejores índices de compresión y rendimiento que las opciones basadas en DEFLATE. Sin embargo, no es ampliamente compatible con la compresión de archivos simples, por lo que puede que no sea una opción viable para su uso.

  • PAQ es para aquellos que están realmente preocupados por maximizar las relaciones de compresión. Utiliza una combinación compleja de modelos estadísticos para lograr índices de compresión absolutamente locos (dependiendo de los datos originales, no es inusual que un archivo comprimido con PAQ seamenos de 1/10del tamaño original, mientras que DESINFLAR promedia más cerca de 1/2). El coste de esto es, por supuesto, que lleva muchísimo tiempo comprimircualquier cosacon PAQ. Con la configuración de compresión alta, probablemente tomaría al menos media hora comprimir ese video de muestra con PAQ. Debido a la cantidad de tiempo que lleva, casi nadie usa PAQ, y los pocos que lo hacen rara vez lo usan para otros fines que no sean de archivo (es decir, sólo lo usan en archivos que probablemente nunca cambiarán).

  • Zstandard es el más nuevo de todos y fue desarrollado por Facebook. Utiliza una combinación de métodos más antiguos y más nuevos (incluidas algunas técnicas de aprendizaje automático) para lograr relaciones de compresión comparables o mejores que bzip2 (y a veces incluso mejores que XZ), mientras se ejecuta significativamente más rápido que la mayoría de los otros que he enumerado. excepto LZ4. Probablemente no superaría a XZ en cuanto a su uso (y definitivamente no superará a PAQ), pero puede obtener proporciones lo suficientemente buenas como para que el rendimiento significativamente mejor valga la pena.

información relacionada