domingo, 20 de abril de 2008

Codecs e Formatos de Video


Aprenda a escolher os tipos de vídeo

Aí pela net afora temos vários vídeos (gratuitos, pagos e pirateados) que estão nos mais diversos formatos: .avi, .ogm, .mkv, .rmvb... E ainda, quando se baixa um deles, de repente não conseguimos rodar porque falta um determinado codec.

"Peraê! Que diabos são codecs? Qual a diferença entre codecs e formatos? Não são a mesma coisa?"
Não senhor! Um codec é uma ténica utilizada pra comprimir um arquivo de audio ou de vídeo. Um formato, é algo chamado também de container. É um envelope onde se coloca aqueles arquivos de audio e vídeo que você compactou usando um codec qualquer que você tenha escolhido.

Codecs são utilizados porque arquivos de vídeo ou de audio puro, sem qualquer compactação, são bastante grandes pra ser armazenados ou transmitidos. Se por acaso já tiveste a oportunidade de comparar um tamanho de um arquivo .bmp com o mesmo arquivo em .jpg, deves ter notado uma diferença bastante grande de tamanho entre um e outro, mais ou menos da ordem de 20:1 ou maior. Se você ainda não teve a oportunidade de reparar isso, crie um desenho tosco no paint do windows e depois peça pra salvar nos dos formatos e compare. Pois é, um arquivo de bitmap, é um arquivo sem compactação. Num .bmp, cada pixel, é representado por um número de 3 bytes (um byte pra cada cor primária). Numa imagem de 640x480 pixels por exemplo, temos 307200 pixels total, multiplicados por 3 bytes, dá 900 e poucos kbytes. Se for salva em .jpg, dá pra cair pra algo proximo de 40kbytes. Impressionante, não? Quem sabe numa próxima, possamos explicar por alto como se consegue compactar desta maneira. Mas enfim, não é que se use a força pra expremer um arquivo até ele ficar pequeno. Procura-se representar a mesma coisa com menos bytes, só isso. Nem que pra isso, seja necessário diminuir a qualidade da fotografia.
Para se conseguir fazer um vídeo, coloca-se várias imagens estáticas em sequência, numa velocidade de mais ou menos 25 a 30 imagens por segundo (os famosos frames por segundo, ou fps). Isso é o suficiente para a visão do homem pensar que está vendo algo em movimento contínuo. Isso acontece porque uma imagem demora alguns milisegundos antes de vir outra. Graças a deus, porque se seu olho fosse mais esperto, os requerimentos tecnológicos pra assistir televisão seriam muito maiores =). Agora imagine que fôssemos assistir pela net um vídeo de 30 quadros por segundo e cada quadro fosse de 900Kbytes, como no exemplo acima? Precisaríamos de uma conexão de 27 megabytes , ou 27*8 = 216 megabits por segundo pra conseguir assistir isso .Do mesmo modo, não seria legal um filme em seu pc desta maneira consumiria 1,6 gigabytes para cada minuto de vídeo. Ah sim! E isto é so para o vídeo!
Voltando aos codecs e formatos...
Deve-se entender que um filme é formado por uma trilha de vídeo, uma trilha de audio, ou, várias trilhas de vídeo e várias trilhas de audio e de legendas e o que mais o formato permitir. Estas trilhas dentro do formato, é que podem ser comprimidas por um determinado codec. Por exemplo, pode-se ter um filme com uma trilha de vídeo compactada com o codec xvid e a trilha de som em mp3 dentro de um container avi. Assim como, este mesmo avi poderia ter a trilha sonora em codec ogg vorbis o vídeo em codec dvix.

"Não to entendendo nada!".
Olhe a figura:


Um container faz o que se chama de mux , ou seja, ele junta as várias trilhas em um só arquivo (ou fluxo para transmissão). Geralmente isso é feito intercalando-se quadros de video e quadros de audio no referido arquivo. Existe uma diversidade imensa de codecs. Dê uma olhada em www.free-codecs.net que você acha um monte. Em geral, eles vem em pacotes. Recomendo o ffdshow se você for usar somente com o intuito de assitir filmes, e o Ace Mega Codecs Pack pra quem vai converter e editar. Os codecs ficam guardados nas pastas de sistema do windows e podem ser usados por uma série de programas compatíveis, como o virtualdub ou o Nero vision.
No entanto, existem programas que usam codecs "embutidos" neles mesmos, como o vlc (que não só toca tudo como serve pra converter também), e para pessoas corajosas que gostam de usar a linha de comando (exemplo: eu) tem o ffmpeg. Ainda sim, fizeram frontends para o ffmpeg como o ffmpegGUI para facilitar a vida das pessoas.
Como deu pra perceber, o codec é algo separado do formato. No entanto, alguns formatos são amarrados a determinados codecs. É o caso do wmv da microsoft. Aliás, wmv é tanto o nome de um codec de vídeo como de um formato. Usa-se alguma versão do codec windows media video com algum do windows media audio. O mesmo serve para o .mpg, no qual se usa mp2v (mpeg 2 video) para o video e mpga (mpeg audio) para o som. Devo lembrar que volta e meia um arquivo tem um formato e somente uma trilha dentro. O mp4 por exemplo foi feito pra carregar som e vídeo (nos celulares, por exemplo), mas frquentemente é usado só com musicas. O mp4 está atrelado ao aac e a uns 3 ou 4 codecs diferentes de vídeo. Também se encontra avi's que só tenham vídeo, assim como se encontra trilhas solitárias .m2v, .mp3, .aac, .m4a , sem necessariamente estarem dentro de um container.

"Sim, mas qual codec/formato eu escolho?"
Se a preocupação for compatibilidade, use o avi com divx e mp3. Tem até dvdplayers domesticos que rodam isso aí. O avi não está amarrado a codecs, e portanto você pode escolher entre uma gama enorme deles. O divx codifica rapido, o sigma rmp4 vai no mesmo nível de velocidade do divx porém um pouco melhor em qualidade. O rmvb não é aceito por todos os players, muito menos por todos os programas codificadores. Tem alguns poucos que fazem isso, como o Easy RMP. Para linux, não há nenhum programa, e até pra assistir é chatinho.Também, nos programas que o fazem, demora-se o dobro de tempo para codificar do que se fosse avi+divx. No entanto, o rmvb é adorado pelo pessoal que baixa seriados e animes em geral porque consegue o mesmo que o aví+divx só que com a metade do tamanho dele.

Mas o filé mesmo é usar o formato matroska (.mkv) com codec x264 no vídeo e aac para o som. O mkv é o melhor container (na minha opnião, e na de muita gente) pois não se amarra a codecs, tem mais recursos, e gera menos overhead de processamento do que o avi. Ah sim! E é livre de patentes! O mkv aceita legendas por exemplo! Coisa que no avi tu tem que fazer colocando um .txt, .sub ou .srt junto ao arquivo. Também aceita divisão do filme em capítulos. Existe uma série de programas nesta página para se trabalhar com arquivos .mkv. Alguns deles, permitem se trabalhar com .mkv e .avi como o avimux-gui. Inclusive neste, pode-se inserir uma série de tipos de legendas diferentes (.sub, .ssa, .srt), colocar várias triilhas diferntes de som/video/audio , colocar/retirar atraso entre elas e etc. Pena que o pessoal da insudtria dos eletrônicos ainda não fez player domestico que rode .mkv. O aac é um codec de audio que consegue superioridade em relação ao mp3, quando usado o mesmo bitrate. Ele pode ser usado também em .avi's. O x264 (ou h264) é um codec de vídeo que consegue superioridade em qualidade, em relação ao rmvb e com o mesmo tamanho que ele. Pode ser usado em avi ou mkv, ou ainda, em mp4. A codificação de um video com x264 é demorada como a do rmvb. Transmissões digitais de tv tem sido feitas usando x264+aac no brasil. Tem sido usado também em ripagem de blu-rays. O x264 também é livre de patentes.
Um ultimo detalhe, é que na hora da codificação pode-se definir o bitrate tanto pra video quanto pra audio, e que o tamanho do arquivo final depende desta relação. Obviamente, quanto menor o bitrate, menor o arquivo de saida. Pode-se escolher um bitrate menor quando a resolução do vídeo for baixa. Por hoje é só! Sugiro a quem queira brincar com isso, que baixe o virtualdub-mpeg2 e/ou o avimux-gui. Links aí em cima.


3 comentários:

Pobre disse...

blog bacana, mas confesso que num tive coragem de ler tudo, o tema é interessante, mas os textos são BEEEEMMMMM longos, sucesso pra você!
Pobre Otário

chica disse...

Eder
Obrigado pela visita ao www.sementesdiarias.com.

De tanto que eu não entendo realmente nada de informática, eu nem sei como responder no meu blog.

ASSIM, DEVO TENTAR APRENDER...

Te desejo muito sucesso nesse blog, que pelo jeito, poderá ajudar bastante!

Vou ficar de olho e quando tiver mais post, bem simples e acessíveis, aliás, vai aí minha sugestão,poderei divulgá-lo.

Tem muita gente como eu, que deve aprender do comecinho, o be-a-bá...
Um abraço,Rejane(Chica)

Sara Jane Amorim disse...

Oi estou tentanto postar videos no Uol MAis e nunca da certo, sempre diz que o formato do video não é suportado... você pode me ajudar???
Não entendo nada sobre isso...
Se puder me manda um e-mail?
saramoura_91@hotmail.com

Ele diz que os formatos aceitos são esses, mas eu não entendo nada!!!!
Pode me ajudar!!

.3GP
ID_VIDEO_FORMAT=mp4v
ID_VIDEO_CODEC=ffodivx
ID_AUDIO_CODEC=ffamrnb
ID_VIDEO_FORMAT=s263
ID_VIDEO_CODEC=ffh263
ID_AUDIO_CODEC=ffamrnb
.M4V
ID_VIDEO_FORMAT=avc1
ID_VIDEO_CODEC=ffh264
ID_AUDIO_CODEC=faad
.WMV
ID_VIDEO_FORMAT=WMV3
ID_VIDEO_CODEC=ffwmv3
ID_AUDIO_CODEC=ffwmav2
ID_VIDEO_FORMAT=WMV1
ID_VIDEO_CODEC=ffwmv1
ID_AUDIO_CODEC=ffwmav2
ID_VIDEO_FORMAT=WMV2
ID_VIDEO_CODEC=ffwmv2
ID_AUDIO_CODEC=ffwmav2
.ASF
ID_VIDEO_FORMAT=WMV3
ID_VIDEO_CODEC=ffwmv3
ID_AUDIO_CODEC=ffwmav2
ID_VIDEO_FORMAT=MP43
ID_VIDEO_CODEC=ffdivx
ID_AUDIO_CODEC=ffwmav2
.MOV
ID_VIDEO_FORMAT=h263
ID_VIDEO_CODEC=ffh263
ID_AUDIO_CODEC=faad
ID_VIDEO_FORMAT=avc1
ID_VIDEO_CODEC=ffh264
ID_AUDIO_CODEC=faad
ID_VIDEO_FORMAT=mp4v
ID_VIDEO_CODEC=ffodivx
ID_AUDIO_CODEC=faad
.TS
ID_VIDEO_FORMAT=0x10000005
ID_VIDEO_CODEC=ffh264
ID_AUDIO_CODEC=mp3
ID_VIDEO_FORMAT=0x10000002
ID_VIDEO_CODEC=ffmpeg2
ID_AUDIO_CODEC=mp3
.AVI
ID_VIDEO_FORMAT=MP43
ID_VIDEO_CODEC=ffdivx
ID_AUDIO_CODEC=mp3
ID_VIDEO_FORMAT=mpg2
ID_VIDEO_CODEC=ffmpeg2
ID_AUDIO_CODEC=mp3
ID_VIDEO_FORMAT=WMV1
ID_VIDEO_CODEC=ffwmv1
ID_AUDIO_CODEC=mp3
ID_VIDEO_FORMAT=WMV2
ID_VIDEO_CODEC=ffwmv2
ID_AUDIO_CODEC=mp3
ID_VIDEO_FORMAT=divx
ID_VIDEO_CODEC=ffodivx
ID_AUDIO_CODEC=mp3
ID_VIDEO_FORMAT=mpg1
ID_VIDEO_CODEC=ffmpeg1
ID_AUDIO_CODEC=mp3
ID_VIDEO_FORMAT=h264
ID_VIDEO_CODEC=ffh264
ID_AUDIO_CODEC=mp3
ID_VIDEO_FORMAT=XVID
ID_VIDEO_CODEC=ffodivx
ID_AUDIO_CODEC=mp3
.FLV
ID_VIDEO_FORMAT=H264
ID_VIDEO_CODEC=ffh264
ID_AUDIO_CODEC=faad
ID_VIDEO_FORMAT=VP6F
ID_VIDEO_CODEC=ffvp6f
ID_AUDIO_CODEC=mp3
ID_VIDEO_FORMAT=FLV1
ID_VIDEO_CODEC=ffflv
ID_AUDIO_CODEC=mp3
.MKV
ID_VIDEO_FORMAT=FFV1
ID_VIDEO_CODEC=ffv1
ID_AUDIO_CODEC=mp3
ID_VIDEO_FORMAT=mpg1
ID_VIDEO_CODEC=ffmpeg1
ID_AUDIO_CODEC=mp3
ID_VIDEO_FORMAT=mp4v
ID_VIDEO_CODEC=ffodivx
ID_AUDIO_CODEC=mp3
ID_VIDEO_FORMAT=WMV1
ID_VIDEO_CODEC=ffwmv1
ID_AUDIO_CODEC=mp3
ID_VIDEO_FORMAT=WMV2
ID_VIDEO_CODEC=ffwmv2
ID_AUDIO_CODEC=mp3
ID_VIDEO_FORMAT=avc1
ID_VIDEO_CODEC=ffh264
ID_AUDIO_CODEC=mp3
.MP4
ID_VIDEO_FORMAT=mp4v
ID_VIDEO_CODEC=ffodivx
ID_AUDIO_CODEC=faad
.MPG
ID_VIDEO_FORMAT=0x10000001
ID_VIDEO_CODEC=ffmpeg1
ID_AUDIO_CODEC=mp3
ID_VIDEO_FORMAT=0x10000002
ID_VIDEO_CODEC=ffmpeg2
ID_AUDIO_CODEC=mp3
.MPEG
ID_VIDEO_FORMAT=0x10000001
ID_VIDEO_CODEC=ffmpeg1
ID_AUDIO_CODEC=mp3
.RMVB
ID_VIDEO_FORMAT=RV40
ID_AUDIO_CODEC=ffcook
.RM
ID_VIDEO_FORMAT=RV40
ID_AUDIO_CODEC=faad