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

1053
O.rka

Существует ли формат сжатия на основе архивов, который, как известно, делает самые маленькие видео .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каталог.

2
Я собираюсь предположить, что любое такое сжатие будет сильно отличаться в зависимости от того, как MP4 был закодирован и упакован. MP4 уже сжат, и это можно отрегулировать с помощью настроек, использованных для создания MP4. Если мы не знаем настройки, использованные для создания этого файла MP4, маловероятно, что мы сможем дать более достоверный ответ, чем тот, который вы уже обнаружили сами. music2myear 5 лет назад 3
12-секундное видео не является репрезентативным образцом для видео в целом. Чем короче видео, тем выше соотношение некадровых данных (что, вероятно, более сжимаемо). Daniel B 5 лет назад 0
Так что, ради интереса, я попробовал GZip, BZip2, 7z (LZMA2), Zip и LZ4 с максимальным сжатием на 12, 60 и 120 срезах сцены действия. * Лучшая * степень сжатия в целом составила всего 100,014%. Это не стоит времени и вложенных сил. Daniel B 5 лет назад 0

1 ответ на вопрос

5
Austin Hemmelgarn

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

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

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

Некоторые форматы, такие как 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), но он может получить достаточно хорошие соотношения, чтобы стоило значительно лучшей производительности.

* он сжимает кадр за кадром, а не как один длинный поток * -> true только для внутренних кодеков. В большинстве видеокодеков используется временное сжатие, поэтому почти все кадры прогнозируются из других кадров (+ остаток ошибок). В частности, идентичные кадры сокращаются до нескольких десятков байтов. После основного этапа сжатия полезной нагрузки видео результирующий битовый поток и данные управления подвергаются энтропийному кодированию без потерь. Для MP4 с такими кодированными потоками 7zip ultra даст соотношение 98-99% Gyan 5 лет назад 0

Похожие вопросы