O que permite você codificar e decodificar (daí o nome) um áudio, que seria uma série de ondas mecânicas, ou um vídeo, que seria uma sequência de imagens, ou algo parecido, são codecs. Há vários deles, que trabalham de formas diferentes. Vou falar de alguns e como me influênciam no dia a dia.

Como eu disse antes eles codificam dados, por exemplo: digamos que para reproduzir uma música a caixa de som precise se mover a uma determinada frequência, como colocar isso em dados? Podemos gravar a posição que essa caixa deverá estar a cada período de tempo. Arquivos .wav (em geral) trabalham dessa forma.

Esse método só tem um problema: ocupa muito espaço. Por isso foram criados codecs que fazem esse processo de uma forma mais eficiente, seja eliminando dados que na maioria dos casos seria desnecessários (como frequências que humanos não ouvem, a menos que alguém faça música para cães), ou ainda comprimindo os dados sem que nenhuma informação seja perdida. Com vídeos é bem parecido, porém no caso de vídeos outras otimizações são realizadas, como detectar as áreas do vídeo que tem movimento e só trabalhar elas.

Existem vários codecs e vários deles procuram melhorar algo em um codec mais antigo, como reduzir o tamanho do arquivo ou melhorar a performance em uma determinada situação, streaming online, por exemplo. De uma a duas décadas atrás se usava xvid para vídeos, .mp3 para audio, usando o container .avi. Foi um bom formato, mas não suportava legendas (popularizando o hardsub que falei antes).

Atualmente o mais comum que eu encontro é o container .mkv, que suporta várias e várias streams ao mesmo tempo. Para o áudio se usa AAC (odeio quando alguém usa AC3 por que ele tem problemas de royalites e não funciona em alguns players que não querem pagar eles). Para o vídeo geralmente se usa H264, embora já existam codecs mais novos e que conseguem economizar muito espaço com praticamente a mesma qualidade (acho que no mínimo uns 20% de redução ele consegue, mas não é mágica) mas não são muitos usados ainda.

O codec H264 é interessante por que tem várias configurações: uma mais antiga, 8bit, codifica as cores usando só 8 bit (ao menos foi o que eu entendi). Sendo mais antiga tem maior suporte de hardware, funciona em TVs com entrada USB, celulares chineses, navegadores e coisas velhas. A configuração mais nova é 10 bit, e com dois bits a mais consegue fazer mágica: muito mais cores, o que significa cores mais vivas, e o melhor, por algum motivo ele ainda reduz o tamanho dos arquivos.

Agora, por que eu resolvi falar sobre codecs? Por causa desse gráfico:

Gráfico de gasto de energia em relação ao tempo, destacando os períodos em que vídeos codificados em 8bit e 10bit foram assistidos.

Assistir algo codificado em 10bit gasta bem mais energia que algo em 8bit, isso por que por mais que seja possível reproduzir algo codificado em 10bit em um dispositivo antigo o hardware não é otimizado para isso. Sendo assim a CPU tem que trabalhar mais, fazendo que o vídeo demore mais (por algum motivo o player não pula frames para manter a mesma velocidade que o áudio) e aumentando o consumo de energia.

Estava pensando: seria melhor eu codificar esses vídeos de 10bit para 8bit momentos antes de eu assistir eles? Claro que é melhor eu guardar eles como estão, já que eles gastam menos memória assim. Aí que vem outro problema: se eu converter eles gastarão mais espaço e eu ficarei menos vídeos para assistir (embora geralmente a bateria acaba antes de eu terminar de assistir tudo). Além disso tenho que escrever o código que automatiza a conversão. É complicado.


Gustavo bio photo

Gustavo

Escrevo sobre programas, animes e um pouco mais.

Twitter Github Stackoverflow MyAnimeList