Comprimir vídeos do theora / vorbis

1

Eu tenho um arquivo de vídeo theora / vorbis ogg. No entanto, o que eu notei é que, usando gzip / xz pode reduzir o tamanho do arquivo em 20% / 75%. Portanto, suspeito que o formato interno realmente não compacta bem o conteúdo. Existe uma maneira de compactar o vídeo / áudio mais sem perdas sem usar um formato de compactação externo? Uma solução usando ffmepg é preferida.

Saída de mediainfo :

Format                                   : Ogg
File size                                : 90.9 MiB
Duration                                 : 27 min 52 s
Overall bit rate mode                    : Variable
Overall bit rate                         : 456 kb/s
Writing application                      : Lavf57.56.101

Video
ID                                       : 1911251410 (0x71EB61D2)
Format                                   : Theora
Duration                                 : 27 min 52 s
Bit rate                                 : 298 kb/s
Width                                    : 1 920 pixels
Height                                   : 1 080 pixels
Display aspect ratio                     : 16:9
Frame rate                               : 30.000 FPS
Compression mode                         : Lossy
Bits/(Pixel*Frame)                       : 0.005
Stream size                              : 59.4 MiB (65%)
Writing library                          : Lavf57.56.101

Audio
ID                                       : 2001534440 (0x774CFDE8)
Format                                   : Vorbis
Format settings, Floor                   : 1
Duration                                 : 27 min 52 s
Bit rate mode                            : Variable
Bit rate                                 : 131 kb/s
Channel(s)                               : 2 channels
Sampling rate                            : 48.0 kHz
Compression mode                         : Lossy
Stream size                              : 26.1 MiB (29%)
Writing library                          : Lavf57.56.101
    
por xuhdev 20.06.2017 / 10:22

1 resposta

2

A resposta curta é: no .

Quando você compacta seu arquivo em um arquivo (como zip, 7z, rar, gzip, ...), o algoritmo está procurando maneiras de armazenar as informações fornecidas de maneira mais curta. Isto é feito, por exemplo, através de codificação de Huffman , onde o algoritmo verifica a frequência de valores e, em seguida, armazena o valor frequente de movimento em o número mais curto, o segundo mais usado no segundo menor número, ... ( isso é extremamente simplista - leia o artigo da wikipedia para uma explicação melhor. Também, é claro, a codificação de Huffman é apenas um - muito simples - exemplo de compressão). Isso também explica porque a compactação de um arquivo geralmente reduz ainda mais o tamanho do arquivo.

Portanto, a redução de 75% no tamanho do arquivo é porque a ferramenta de compactação encontra uma maneira mais eficiente de armazenar as informações do que o codificador de áudio e vídeo. No entanto, geralmente, não há como informar a um codificador como armazenar as informações, pois isso é algo especificado no padrão. Às vezes, uma versão mais recente do programa de codificação pode ajudar por causa de melhores implementações do padrão, mas geralmente isso se aplica apenas a codecs novos.

Seu player de vídeo, no entanto, não pode lidar com várias compressões simultaneamente. Eu acho que isso é principalmente porque ele precisaria de alguns recursos (RAM e CPU) para descompactar o arquivo e ler o arquivo em si. Além disso, ainda seria necessário descomprimir a coisa toda primeiro, assim como você precisa fazer, porque é muito difícil estimar a partir de um arquivo que você não tem onde o fluxo é armazenado e assim por diante e assim por diante.

Então, se você precisa trabalhar com theora / vorbis, não há muito o que fazer sobre isso. Caso contrário, se o tamanho do arquivo for sua prioridade, eu recomendaria investigar o VP8 / VP9 / x264 / x265 . Se você quiser ir para o VP9-way, eu recomendo algo junto ao Encode / VP9-Guide do FFmpeg (link logo acima):

ffmpeg -i <input> -c:v libvpx-vp9 -crf 15 -b:v 0 -c:a copy <output>

substitua <input> e <output> pelos respectivos nomes de arquivo (e extensões de arquivo). Ambos os trabalhos * .mkv e * .webm (eu só tentei estes dois), no entanto, * .webm parece exigir Vorbis como um codec de áudio (por exemplo, -c:a libvorbis -q:a 6 em vez de -c:a copy ), em que * .mkv não parece ter requisitos. -crf especifica um fator de taxa constante (imagine-a como "qualidade visual constante"), em que valores menores significam melhor qualidade.

Todos os itens acima assumem que seus arquivos foram codificados de forma eficiente (por exemplo, não especificando uma taxa de bits de 6 Gb / s) e com um programa funcionando corretamente. Eu, pelo menos, nunca fui capaz de comprimir muito de qualquer áudio ou videofile comprimido com perdas (mas raramente uso theora ou vorbis).

    
por 20.06.2017 / 11:25