Comprimir vídeos theora / vorbis

1

Eu tenho um arquivo de vídeo theora / vorbis ogg. No entanto, o que noto é que o uso do gzip / xz pode reduzir o tamanho do arquivo em 20% / 75%. Portanto, suspeito que o formato interno não compacte realmente 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
xuhdev
fonte
2
Quando comprimo um vídeo como esse com o 7-Zip, é praticamente do mesmo tamanho. Deve haver algo errado com seu arquivo de vídeo ou você viu um tamanho de arquivo errado.
Daniel B

Respostas:

2

A resposta curta é: não .

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

Portanto, sua 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. No entanto, normalmente, não há como dizer ao 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 novos.

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

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

Tudo o que foi dito acima pressupõe que seus arquivos foram codificados com eficiência (por exemplo, não especificando uma taxa de bits de 6 Gb / s) e com um programa que funcione corretamente. Eu nunca fui capaz de comprimir muito de qualquer arquivo de áudio ou vídeo compactado com perdas (mas raramente uso theora ou vorbis).

flolilo
fonte
Obrigado pela resposta. Nesse caso, você pode fornecer uma maneira de converter a codificação interna em VP9?
xuhdev
Junto Encode / VP9 do FFmpeg - Guia : ffmpeg -i <input> -c:v libvpx-vp9 -crf 15 -b:v 0 -c:a copy <output>onde <input>e <output>devem ser substituídos com os arquivos correlacionando. -crfespecifica um fator de taxa constante (imagine-o como "qualidade visual constante") e, é claro, você sempre pode alterar o codec de áudio ( -c:a) também.
Flolilo
Eu recebi o seguinte erro:[libvpx-vp9 @ 0x555641b6e1c0] v1.6.1 [ogg @ 0x555641b64980] Unsupported codec id in stream 0 Could not write header for output file #0 (incorrect codec parameters ?): Invalid argumentStream mapping: Stream #0:0 -> #0:0 (theora (native) -> vp9 (libvpx-vp9)) Stream #0:1 -> #0:1 (copy) Last message repeated 1 times
xuhdev
Sem o código que você usou, não consigo nem imaginar o que está errado. Eu mesmo tentei o código e, na minha máquina, ele funciona como esperado.
Flolilo
O código é exatamente o que você mostrouffmpeg -i <input> -c:v libvpx-vp9 -crf 15 -b:v 0 -c:a copy <output>
xuhdev