Comprimir vídeos theora/vorbis

Comprimir vídeos theora/vorbis

Eu tenho um arquivo de vídeo theora/vorbis ogg. Porém, o que noto é que usar gzip/xz pode reduzir o tamanho do arquivo em 20%/75%. Portanto, suspeito que o formato interno não comprima bem o conteúdo. Existe uma maneira de compactar o vídeo/áudio 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

Responder1

A resposta curta é:não.

Quando você compacta seu arquivo em um arquivo (como zip, 7z, rar, gzip,...), o algoritmo procura maneiras de armazenar as informações fornecidas de forma mais curta. Isto é feito, por exemplo, através deCodificação de Huffman, onde o algoritmo verifica a frequência dos valores e então armazena o valor mais frequente no número mais curto, o segundo mais usado no segundo menor número,... (isso é extremamente simplificado- leia o artigo da Wikipedia vinculado para uma explicação melhor. Além disso, é claro, a codificação de Huffman é apenas um – muito simples – exemplo de compressão). Isso também explica por que compactar um arquivo muitas vezes reduz ainda mais o tamanho do arquivo.

Portanto, a redução de 75% no tamanho do arquivo ocorre porque a ferramenta de compactação encontra uma maneira mais eficiente de armazenar as informações do que o codificador de vídeo e áudio. Porém, normalmente, não há como dizer 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 devido a melhores implementações do padrão, mas geralmente isso se aplica apenas a codecs totalmente novos.

Seu reprodutor de vídeo, entretanto, não consegue lidar com múltiplas compressões simultaneamente. Acho que isso ocorre principalmente porque seriam necessários alguns recursos (RAM e CPU) para descompactar o arquivo compactado e depois ler o próprio arquivo. Além disso, ainda seria necessário descompactar tudo primeiro, exatamente como você precisa fazer, porque é muito difícil estimar a partir de um arquivo que você não tem onde qual fluxo está armazenado e assim por diante.

Portanto, se você precisa trabalhar com theora/vorbis, não há muito que você possa fazer a respeito. Caso contrário, se o tamanho do arquivo for sua prioridade, recomendo investigarVP8/VP9/x264/x265. Se você quiser seguir o caminho VP9, ​​recomendo algo ao longo do 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 *.mkv e *.webm funcionam (só tentei esses dois), no entanto, *.webm parece exigirVorbiscomo um codec de áudio (por exemplo, -c:a libvorbis -q:a 6em vez de -c:a copy), onde *.mkv não parece ter requisitos. -crfespecifica um fator de taxa constante (imagine-o como "qualidade visual constante"), onde valores mais baixos significam melhor qualidade.

Tudo o que foi dito acima pressupõe 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 compactar muito de qualquer arquivo de áudio ou vídeo compactado com perdas (mas raramente uso theora ou vorbis).

informação relacionada