web-dev-qa-db-fra.com

Quelle compression d'archive rend les fichiers .mp4 les plus petits?

Existe-t-il un format de compression basé sur les archives connu pour produire les plus petites vidéos .mp4?

J'ai fait une vidéo test 1080p 0:12 avec les seuls formats d'archives que je connaisse:

(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

On dirait que bzip2 est le meilleur. Y a-t-il autre chose de mieux pour réduire les fichiers? Ce n'est pas grave si cela prend beaucoup plus de temps.

De plus, j'ai remarqué que vous ne pouvez pas bzip2 un répertoire.

4
O.rka

Tout d’abord, quelques points mineurs sur la terminologie: Zip est le seul format archive que vous avez utilisé. Gzip et Bzip2 sont des formats de compression, pas des formats d'archives. Pour être un peu plus précis:

  • Un format d'archive regroupe plusieurs fichiers et/ou répertoires, comprenant généralement des métadonnées telles que la propriété, les horodatages et éventuellement d'autres données, dans un seul fichier. Tar est un exemple de format d'archive pure, il ne fait pas de compression inhérente,

  • Un format de compression compresse simplement les données, mais ne combine pas de manière inhérente plusieurs fichiers en un seul. Gzip, Bzip2, Brotli, LZ4, LZOP, XZ, PAQ et Zstandard sont tous des formats de compression. Certains d'entre eux (tels que Gzip et LZ4) peuvent prendre en charge la compression et la concaténation de plusieurs fichiers en un fichier pouvant ensuite être décompressé en plusieurs fichiers d'origine (c'est ce qui se passe lorsque vous gzip un répertoire), mais ils ne le stockent pas. chemins ou autres métadonnées, de sorte qu'ils ne sont pas des formats d'archive.

Certains formats, tels que Zip, 7z ou RAR, combinent l'archivage et la compression (bien que Zip puisse également stocker des fichiers non compressés).

Maintenant, maintenant que nous sommes passés à autre chose, passons à votre question principale:

Le commentaire de music2myear est correct. Vos résultats varieront considérablement en fonction des spécificités exactes de l’encodage MP4 utilisé. En effet, MP4 lui-même inclut la compression des données, optimisée dans ce cas pour la compression des données audio et vidéo sans réduire de manière significative la qualité perçue. Les processus qu’il utilise pour cela sont en réalité quelque peu compliqués (trop compliqués à expliquer ici), mais à cause de la contrainte qu’ils ne réduisent pas la qualité perçue, combinés au fait qu’il compresse image par image au lieu d’un seul flux, il y a parfois une marge importante d'amélioration (comme vous pouvez le voir de votre test).

Maintenant, bien que je ne puisse pas donner une réponse concluante sans beaucoup de détails supplémentaires, je peux toutefois vous donner quelques conseils généraux sur la compression de fichiers:

  • Zip et Gzip montrent des résultats très similaires dans ce cas car ils utilisent des variantes du même algorithme de compression, plus spécifiquement un dérivé de l’algorithme LZW appelé DEFLATE. DEFLATE n'est pas un algorithme de compression particulièrement performant, mais il est omniprésent (il existe même des implémentations matérielles), il est donc souvent utilisé comme norme de comparaison. En dehors de l'utilisation en tant que composant d'autres formats de fichiers (tels que Zip), il n'est plus très utilisé pour le stockage. Pratiquement tout ce qui est basé sur DEFLATE (ou LZW en général) ne gagnera à rien en comparant les algorithmes de compression.

  • Bzip2, en revanche, effectue des transformations complexes sur les données pour les compresser plus efficacement, puis utilise le codage de Huffman pour la compression réelle. Dans la plupart des cas, il compresse mieux que les compresseurs basés sur DEFLATE, mais il est également plus lent que DEFLATE. En raison de certaines hypothèses sur la manière dont il transforme les données en entrée avant le codage de Huffman, il est également un peu plus sensible que de nombreuses autres options à la façon dont les données en entrée sont structurées.

  • XZ utilise un algorithme différent appelé LZMA. À l'instar de l'algorithme LZW dont DEFLATE est dérivé, LZMA est finalement dérivé d'un algorithme appelé LZ77, bien qu'il obtienne des taux de compression incroyablement supérieurs aux options basées sur DEFLATE, et des ratios nettement supérieurs à ceux de Bzip2 dans la plupart des cas. Outre LZMA, il effectue certaines transformations qui le rendent un peu meilleur pour la compression des exécutables que les autres options. Cependant, le coût de cette opération est que la compression des données prend beaucoup de temps. 7Zip utilise également LZMA, mais sans les transformations de données, il n’est donc souvent pas aussi performant en termes de ratios que XZ.

  • LZOP utilise l'algorithme LZO et compresse généralement moins bien que DEFLATE, mais fonctionne beaucoup plus rapidement. Tout comme Gzip, il n’est plus très utilisé, car les gens ont tendance à privilégier les alternatives offrant un meilleur taux de compression ou de meilleures performances.

  • LZ4 est un nouveau standard développé par Google qui fonctionne incroyablement vite (vitesse de bande passante mémoire proche pour la décompression), mais obtient des taux de compression encore plus bas que LZO. Il a lentement supplanté LZO, car la plupart de ses produits l’utilisaient pour sa rapidité.

  • Brotli est un autre nouveau de Google. Cela fait partie de la norme HTTP/2 et est spécialement optimisé pour la diffusion en continu. En outre, il offre de meilleurs taux de compression et de meilleures performances que les options basées sur DEFLATE. Toutefois, la compression de fichier en clair n’est pas largement prise en charge, ce n’est donc probablement pas une option viable pour votre utilisation.

  • PAQ est destiné à ceux qui craignent vraiment de maximiser les taux de compression. Il utilise une combinaison complexe de modèles statistiques pour obtenir des taux de compression absolus (en fonction des données d'origine, il n'est pas rare qu'un fichier compressé avec PAQ soit inférieur à 1/1 de la taille d'origine, alors que DEFLATE moyennes plus proches de 1/2). Le coût de ceci est, bien sûr, qu'il faut un temps incroyablement long pour compresser n'importe quoi avec PAQ. Avec les paramètres de compression élevés, il faudrait probablement au moins une demi-heure pour compresser cet échantillon vidéo avec PAQ. En raison du temps requis, presque personne n'utilise PAQ et les rares qui l'utilisent rarement à des fins autres que d'archivage (c'est-à-dire qu'ils l'utilisent uniquement dans des fichiers qu'ils ne risquent pas de modifier).

  • Zstandard est le plus récent du lot et a été développé par Facebook. Il utilise une combinaison de méthodes anciennes et de méthodes plus récentes (y compris certaines techniques d’apprentissage automatique) pour obtenir des taux de compression comparables ou supérieurs à bzip2 (et parfois même supérieurs à XZ), tout en fonctionnant nettement plus rapidement que la plupart des méthodes citées plus haut. sauf LZ4. Il ne devrait probablement pas battre XZ pour votre utilisation (et certainement pas battre PAQ), mais il se peut que les ratios soient suffisamment bons pour que les performances nettement meilleures en valent la peine.

9