Questão Que compactação de arquivo faz com que os arquivos .mp4 sejam os menores?


Existe um formato de compactação baseado em arquivo que é conhecido por criar os menores vídeos .mp4?

Eu fiz um teste 1080p duração 0:12 vídeo com os únicos formatos de arquivo que eu conheço:

(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 bzip2 é o melhor. Existe alguma coisa melhor em termos de tornar os arquivos menores? Tudo bem se demorar muito mais.

Além disso, notei que você não pode bzip2 um diretório.


0


origem


Eu estou supondo que tal compressão irá variar muito dependendo de como o MP4 foi codificado e empacotado. O MP4 já está comprimido e isso pode ser ajustado pelas configurações usadas para criar o MP4. A menos que conheçamos as configurações usadas para criar este arquivo MP4, é improvável que possamos fornecer uma resposta mais autoritária do que a que você mesmo já descobriu. - music2myear
Um vídeo de 12 segundos não é uma amostra representativa de vídeos em geral. Quanto mais curto for o vídeo, maior será a proporção de dados não-frame (que provavelmente é mais compressível). - Daniel B
Então, só por diversão, eu tentei GZip, BZip2, 7z (LZMA2), Zip e LZ4 com compressão máxima em cortes de 12, 60 e 120s de cena de ação. o melhor taxa de compressão global foi de apenas 100,014%. Isso não vale o tempo e o poder investidos. - Daniel B


Respostas:


Em primeiro lugar, um pequeno aparte sobre a terminologia: ZIP é o único arquivo formato que você usou. Gzip e Bzip2 são formatos de compactação, não formatos de arquivo. Para ser um pouco mais específico:

  • Um formato de arquivo agrega vários arquivos e / ou diretórios, geralmente incluindo metadados como propriedade, registros de data e hora e possivelmente outros dados, em um único arquivo. Tar é um exemplo de um formato de arquivo puro, não possui compactação inerente,

  • Um formato de compressão apenas comprime os dados, mas não combina inerentemente vários arquivos em um. Gzip, Bzip2, Brotli, LZ4, LZOP, XZ, PAQ e Zstandard são todos formatos de compressão. Alguns deles (como Gzip e LZ4) podem suportar a compactação de vários arquivos e concatená-los em um arquivo que pode ser descompactado em vários arquivos originais (que é o que acontece quando você gzipar um diretório), mas eles não armazenam. caminhos ou outros metadados, para que não sejam formatos de arquivo.

Alguns formatos, como ZIP, 7z ou RAR, combinam arquivamento e compactação (embora o ZIP também possa armazenar arquivos descompactados).

Agora, com isso fora do caminho, vamos para a sua questão principal:

O comentário de music2myear está correto. Seus resultados variam muito dependendo das especificidades exatas da codificação MP4 usada. Isso ocorre porque o próprio MP4 inclui compactação de dados, nesse caso otimizada para compactar dados de áudio e vídeo sem reduzir significativamente a qualidade percebida. Os processos que usa para isso são na verdade um pouco complicados (muito complicados para explicar aqui), mas por causa da restrição que não diminui a qualidade percebida, combinada com o fato de que comprime frame-by-frame ao invés de um único longo fluxo, às vezes há espaço significativo para melhorias (como você pode ver a partir do seu teste).

Agora, embora eu não possa dar uma resposta conclusiva sem muitos detalhes adicionais, posso, no entanto, dar-lhe alguns conselhos gerais sobre a compressão de arquivos:

  • O ZIP e o Gzip mostram resultados muito similares neste caso porque eles usam variantes do mesmo algoritmo de compressão, mais especificamente uma derivada do algoritmo LZW conhecido como DEFLATE. O DEFLATE não é um algoritmo de compactação particularmente grande, mas é onipresente (existem até mesmo implementações de hardware), então é frequentemente usado como um padrão de comparação. Fora do uso como um componente de outros formatos de arquivo (como ZIP), ele não é muito usado para armazenamento. Quase qualquer coisa baseada em DEFLATE (ou LZW em geral) não vai ganhar em nenhum aspecto ao comparar algoritmos de compressão.

  • O Bzip2, ao contrário, faz algumas transformações complexas nos dados para torná-lo mais eficiente e, em seguida, usa a codificação de Huffman para a compactação real. Na maioria dos casos, ele comprime melhor que os compressores baseados em DEFLATE, mas é mais lento que o DEFLATE também. Devido a algumas suposições feitas em como ele transforma os dados de entrada antes da codificação de Huffman, ele também é um pouco mais sensível do que muitas outras opções de como os dados de entrada são estruturados.

  • O XZ usa um algoritmo diferente chamado LZMA. Assim como o algoritmo LZW do qual o DEFLATE é derivado, o LZMA é derivado de um algoritmo conhecido como LZ77, embora obtenha proporções de compactação insanamente melhores do que as opções baseadas no DEFLATE e proporções significativamente melhores do que o Bzip2 na maioria dos casos. Além do LZMA, ele faz algumas transformações que o tornam um pouco melhor na compactação de executáveis ​​do que as outras opções. O custo disso, no entanto, é que leva muito tempo para compactar dados. O 7zip também usa o LZMA, mas sem as transformações de dados, por isso muitas vezes não é tão bom em termos de taxas como o XZ.

  • O LZOP usa o algoritmo LZO e geralmente comprime pior que o DEFLATE, mas funciona muito mais rápido. Assim como o Gzip, ele não é mais usado amplamente, já que as pessoas tendem a favorecer alternativas que ofereçam uma melhor taxa de compactação ou melhor desempenho.

  • O LZ4 é um padrão mais novo desenvolvido pelo Google, que é executado de forma incrivelmente rápida (próximo à velocidade de largura de banda da memória para descompactação), mas obtém taxas de compactação ainda piores do que o LZO. Está lentamente suplantando o LZO, já que a maioria das coisas que usavam o LZO o usavam para velocidade.

  • Brotli é outro novo do Google. Ele faz parte do padrão HTTP / 2 e é especificamente otimizado para streaming e pode, na verdade, obter taxas de compactação e desempenho melhores do que as opções baseadas em DEFLATE. No entanto, não é amplamente suportado para compactação de arquivos simples, portanto, pode não ser uma opção viável para seu uso.

  • PAQ é para aqueles que estão realmente insanamente preocupados em maximizar as taxas de compressão. Ele usa uma combinação complexa de modelos estatísticos para atingir taxas de compressão absolutamente absurdas (dependendo dos dados originais, não é incomum que um arquivo compactado com PAQ seja menos de 1/10 do tamanho original, enquanto o DEFLATE é mais próximo de 1/2). O custo disso é, claro, que leva um tempo insanamente longo para comprimir qualquer coisa com o PAQ. Com as configurações de alta compactação, provavelmente levaria pelo menos meia hora para compactar o vídeo de amostra com o PAQ. Devido à quantidade de tempo que leva, quase ninguém usa o PAQ e os poucos que raramente o usam para fins que não sejam de arquivamento (isto é, eles só o usam em arquivos que provavelmente nunca serão alterados).

  • Zstandard é o mais novo do lote e foi desenvolvido pelo Facebook. Ele usa uma mistura de métodos mais antigos e mais recentes (incluindo algumas técnicas de aprendizado de máquina) para obter taxas de compactação comparáveis ​​ou melhores que o bzip2 (e às vezes até melhor que o XZ), enquanto executa significativamente mais rápido do que a maioria dos outros que listei exceto LZ4. Provavelmente, ele não superaria o XZ pelo seu uso (e definitivamente não vai superar o PAQ), mas pode ter proporções suficientemente boas para que o desempenho significativamente melhor valha a pena.


4



ele comprime quadro a quadro em vez de um único fluxo longo -> true apenas para codecs intra. A maioria dos codecs de vídeo usa compactação temporal, portanto, quase todos os quadros são previstos a partir de outros quadros (+ residual de erro). Em particular, quadros idênticos são reduzidos a algumas dezenas de bytes. Após a etapa principal de compactação da carga útil do vídeo, os dados de fluxo de bits e controle resultantes passam por uma codificação de entropia sem perdas. Para MP4s com esses fluxos codificados, o 7zip ultra renderá uma taxa de 98-99% - Gyan