28 de março de 2010

Convertendo Vídeos para H.264 com Nvidia Cuda (GPGPU)

Há quase 2 anos atrás quando foi comprar meu computador uma dúvida que tinha era em relação a placa de vídeo, não jogo muito, mas no tempo livre sempre é legal brincar com alguns jogos. Minha dúvida era em relação à Radeon HD 2600 Pro e a Geforce 8600 GT, duas placas consideradas midrage (médias), já que uma mais lenta iria deixar a desejar e uma mais rápida iria gastar muita energia, impossibilitando deixar o PC muito tempo ligado.

Acabei optando pela Geforce, pois sua performance em jogos era um pouco superior a Radeon, apesar da Radeon ser melhor para decodificar vídeos. Gostei muito dessa escolha e até hoje jogo todos os jogos atuais sem problemas. Como a arquitetura das placas Nvidia pouco mudou (até a chegada da Geforce GTX 480) todos os novos recursos lançados para as novas placa ainda são compatíveis com a 8600, tais como OpenGL 3.2 (na época do lançamento da placa ela era compatível apenas com o 2.1), OpenCL, Direct Compute e PhysX e 3D Vision.

Antes mesmo do OpenCL e do Direct Compute, que são APIs para usar a GPU para processar algo com grande ganho de velocidade em relação à CPU, a Nvidia já contava com o Cuda que atualmente é a API mais usada (olhe alguns programas que o usam). O formato H.264 é um formato de vídeo muito usado em vídeos de alta resolução, como em discos Blu-ray, e vídeo pequenos também como no Youtube. Teoricamente um vídeo em H.264 tem a mesma qualidade que um DivX com metade do tamanho, mas sendo muito mais pesado para codificar e decodificar.

Um conversor gratuito chamado MediaCoder tem um encoder H.264 gratuito que usa o Cuda, existem diversos pagos como o Badaboom e o Cyberlink Mediashow Espresso que também usam, mas apesar de terem uma interface muito melhor que o MediaCoder ainda são muito limitados e tem problemas de sincronia de áudio e vídeo ao contrário do MediaCoder. Resolvi fazer alguns testes para ver a qualidade e se existe realmente alguma melhora no tempo de conversão.

A configuração do computador de testes é um Core 2 E7200, 4 GB de RAM e uma Geforce 8600 GT usando Windows 7 64 bits e o MediaCoder x64.

Primeiro teste: Big Buck Bunny em H.264 em 1080p com Bitrate 9.283 Kbps para MKV em H.264 em 1080p e Bitrate de 3500 kbps (link para download).

Utilizando o encoder x264 (sem Cuda)
Utilizando o "Cuda Encoder"










Com o Cuda houve uma melhora de quase 4x na velocidade no tempo de conversão. Levando em conta um vídeo de aproximadamente 10 minutos com Cuda seria de 11 minutos e 45 segundos, sem o cuda levaria 45 minutos.

Segundo teste: Um vídeo DivX com resolução de 720x480 para MKV em H.264 e Bitrate de 700kbps.

Utilizando o encoder x264 (sem Cuda)
Utilizando o "Cuda Encoder"










Com menor resolução a diferença caiu para aproximadamente 2.6x mais rápido convertido via Cuda, o que ainda é uma diferença considerável.

Conclusão: Usando uma placa que dispõe de 32 "Cuda cores" muito menos que a 9600GT (64 "Cuda cores"), GTX 285 (240 "Cuda cores") ou mesmo a atual GTX 480 (480 "Cuda cores")  é possível conseguir um ganho considerável de desempenho. Sem dúvidas com o lançamento de APIs que possibilitem fazer programas para diversas GPUs não apenas o de uma marca, o interesse das empresas de software aumentará e consequentemente iremos ver mais programas que se utilizem de GPUs.

Para fazer o download do MediaCoder acesse seu site oficial - Caso queira aprender a utilizar o MediaCoder para converter usando Cuda leia este tutorial

2 comentários:

Roberto disse...

Muito bom, tenho uma 9800gt ela aceleraria muito a conversão não?

vc poderia escrever como usa o mediacoder? pq ele é uma zona!!!!!!!!

RicardoZ disse...

sim!

http://ricardoz.blogspot.com/2010/04/como-converter-videos-para-h264-com.html