Какое сжатие архива делает файлы .mp4 самыми маленькими?

Какое сжатие архива делает файлы .mp4 самыми маленькими?

Существует ли формат сжатия на основе архивов, который позволяет создавать самые маленькие видео .mp4?

Я сделал тестовое видео 1080p длительностью 0:12 с единственными известными мне архивными форматами:

(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

Похоже, bzip2это лучшее. Есть ли что-то еще, что лучше в плане уменьшения файлов? Ничего страшного, если это займет гораздо больше времени.

Еще я заметил, что нельзя создать bzip2каталог.

решение1

Во-первых, небольшое отступление о терминологии: ZIP — единственныйархивФормат, который вы использовали. Gzip и Bzip2 — это форматы сжатия, а не архивные форматы. Если быть немного конкретнее:

  • Формат архива объединяет несколько файлов и/или каталогов, обычно включая метаданные, такие как владение, временные метки и, возможно, другие данные, в один файл. Tar — пример чистого формата архива, он не делает никакого внутреннего сжатия,

  • Формат сжатия просто сжимает данные, но по сути не объединяет несколько файлов в один. Gzip, Bzip2, Brotli, LZ4, LZOP, XZ, PAQ и Zstandard — все это форматы сжатия. Некоторые из них (например, Gzip и LZ4) могут поддерживать сжатие нескольких файлов и объединение их в один файл, который затем может быть распакован в несколько исходных файлов (что и происходит, когда вы сжимаете каталог с помощью gzip), но они не хранят пути или другие метаданные, поэтому они не являются форматами архива.

Некоторые форматы, такие как ZIP, 7z или RAR, совмещают архивацию и сжатие (хотя ZIP может хранить файлы и в несжатом виде).

Теперь, разобравшись с этим, давайте перейдем к вашему основному вопросу:

Комментарий music2myear верен. Ваши результаты будут сильно различаться в зависимости от конкретных особенностей используемого кодирования MP4. Это связано с тем, что MP4 сам по себе включает сжатие данных, в данном случае оптимизированное для сжатия аудио- и видеоданных без значительного снижения воспринимаемого качества. Процессы, которые он для этого использует, на самом деле довольно сложны (слишком сложны, чтобы объяснить здесь), но из-за ограничения, что он не снижает воспринимаемое качество, в сочетании с тем фактом, что он сжимает кадр за кадром, а не как один длинный поток, иногда есть значительные возможности для улучшения (как вы можете видеть из вашего теста).

Хотя я и не могу дать окончательный ответ без множества дополнительных подробностей, я могу дать вам несколько общих советов по сжатию файлов:

  • ZIP и Gzip показывают очень похожие результаты в этом случае, поскольку они используют варианты одного и того же алгоритма сжатия, а точнее производную от алгоритма LZW, известную как DEFLATE. DEFLATE — не особенно хороший алгоритм сжатия, но он вездесущ (есть даже его аппаратные реализации), поэтому его часто используют в качестве стандарта для сравнения. За исключением использования в качестве компонента других форматов файлов (таких как ZIP), он больше не очень широко используется для хранения. Практически все, что основано на DEFLATE (или LZW в целом), не выиграет ни в каком отношении при сравнении алгоритмов сжатия.

  • Bzip2, напротив, выполняет некоторые сложные преобразования данных, чтобы сделать их сжатие более эффективным, а затем использует кодирование Хаффмана для фактического сжатия. В большинстве случаев он сжимает лучше, чем компрессоры на основе DEFLATE, но он также медленнее, чем DEFLATE. Из-за некоторых предположений, сделанных в том, как он преобразует входные данные до кодирования Хаффмана, он также несколько более чувствителен, чем многие другие варианты, к тому, как структурированы входные данные.

  • XZ использует другой алгоритм, называемый LZMA. Как и алгоритм LZW, из которого получен DEFLATE, LZMA в конечном итоге получен из алгоритма, известного как LZ77, хотя он получает безумно лучшие коэффициенты сжатия, чем варианты на основе DEFLATE, и значительно лучшие коэффициенты, чем Bzip2 в большинстве случаев. В дополнение к LZMA, он делает некоторые преобразования, которые делают его немного лучше в сжатии исполняемых файлов, чем другие варианты. Однако ценой этого является то, что сжатие данных занимает много времени. 7zip также использует LZMA, но без преобразований данных, поэтому он часто не так хорош с точки зрения коэффициентов, как XZ.

  • LZOP использует алгоритм LZO и, как правило, сжимает хуже, чем DEFLATE, но работает гораздо быстрее. Как и Gzip, он больше не используется широко, поскольку люди склонны отдавать предпочтение альтернативам, которые либо дают лучшую степень сжатия, либо лучшую производительность.

  • LZ4 — это новый стандарт, разработанный Google, который работает безумно быстро (почти со скоростью пропускной способности памяти для распаковки), но имеет даже худшие коэффициенты сжатия, чем LZO. Он медленно вытесняет LZO, поскольку большинство вещей, которые использовали LZO, использовали его для скорости.

  • Brotli — еще одна новинка от Google. Она является частью стандарта HTTP/2 и специально оптимизирована для потоковой передачи, и может фактически обеспечить как лучшие коэффициенты сжатия, так и производительность, чем варианты на основе DEFLATE. Однако она не поддерживается широко для простого сжатия файлов, поэтому может оказаться неподходящим вариантом для вашего использования.

  • PAQ — для тех, кто действительно безумно беспокоится о максимизации коэффициентов сжатия. Он использует сложную комбинацию статистических моделей для достижения абсолютно сумасшедших коэффициентов сжатия (в зависимости от исходных данных, не редкость, когда файл, сжатый с помощью PAQ, оказываетсяменее 1/10от исходного размера, тогда как DEFLATE в среднем приближается к 1/2). Цена этого, конечно, в том, что сжатие занимает безумно много временичто-либос PAQ. При высоких настройках сжатия, вероятно, потребуется не менее получаса, чтобы сжать этот образец видео с PAQ. Из-за того, сколько времени это занимает, PAQ почти никто не использует, а те немногие, кто это делает, редко используют его для чего-либо, кроме архивных целей (то есть, они используют его только для файлов, которые они, скорее всего, никогда не изменят).

  • Zstandard — самый новый из всех, разработанный Facebook. Он использует смесь старых и новых методов (включая некоторые методы машинного обучения) для достижения коэффициентов сжатия, сравнимых или лучших, чем bzip2 (а иногда даже лучших, чем XZ), при этом работая значительно быстрее большинства других, перечисленных мной, за исключением LZ4. Он, вероятно, не превзойдет XZ для вашего использования (и определенно не превзойдет PAQ), но он может получить достаточно хорошие коэффициенты, чтобы значительно лучшая производительность того стоила.

Связанный контент