Notas:
- Com o hardware indicado abaixo serão 0% de CPU sem legendas e uns 16% com legendas externas/embutidas ativadas. Isso independe, até onde sei, da complexidade ou bitrate do filme;
- Cuidado para não se perder: H.264 é um termo genérico que, para os fins deste post, é sinônimo de x264 e MPEG-4 AVC. A diferença entre x264 e H.264 é a mesma que existe entre XVID e DivX (para os fins deste texto, nenhuma). Leia os artigos na en.Wikipedia para entender melhor.
Essa façanha pode ser realizada se sua placa de vídeo tiver suporte nativo a H.264 e puder ser acessada através de DXVA. Por default todos os codecs/filtros instalados no Windows sempre tentam fazer a decodificação por software, mesmo que sua GPU (a placa de vídeo) tenha suporte e esteja completamente livre e que sua CPU esteja engasgando com a carga. É preciso ativar manualmente o DXVA, que é o que explico neste post.
O hardware
Estou usando uma Geforce 8200, embutida na minha motherboard ECS GF8200A. Supostamente toda a série 8xxx e 9xxx de GPUs Nvidia decodificam H.264. Mesmo as onboard, como a minha.
Minha CPU é um Athlon X2 5200+.
O software
Basta usar o ffdshow * revision 3305 ou superior. Como se trata de um filtro DirectShow o benefício fica disponível para quase todos os players no Windows que não estejam usando filtros próprios.
* Baixe a versão SSE do ffdshow porque é improvável que você tenha uma GPU compatível com H.264 mas não tenha uma CPU compatível com SSE. E se sua CPU é compatível com SSE você vai perder desempenho se usar qualquer outra versão do ffdshow.
Eu testei com os seguintes players:
- Windows Media Player 11 (0%) - Mas o 6 também deve funcionar.
- Mediaportal 1.1.0 RC2
- GOM Player 2.1 (12%) - Sem explicação ainda.
- KMplayer 2.9.4 (0%)
- Media Player Classic Home Cinema 1.3 (0%)
Testes feitos no Windows XP SP3. É preciso um procedimento especial para rodar o ffdshow no Seven, caso queira tentar com essa versão do Windows.
Configurando DXVA no ffdshow
O ffdshow tem um atalho específico para isto no Menu Iniciar:
Em tray, dialogs and paths, selecione Modern. Isso é dispensável, mas muito útil enquanto durarem os testes.
Esta é a configuração para assistir sem legendas externas/embutidas (CPU zero):
E esta é a modificação para habilitar as legendas:
Clique em OK e execute um H.264 para testar.
Como saber que está sendo usado o DXVA
O ffdshow mostra um icone distinto na bandeja. Tem que ser este, marrom, com o texto "FFVA" (requer que você tenha configurado o padrão "Modern").
Para funcionar no WMP o trabalho de configuração acaba aqui. Vou explicar adiante o que é preciso fazer para que isso funcione também com outros players.
Configurando outros players
Atenção: excetuando o WMP, todos os meus players estão em inglês porque eu não suporto tentar decifrar o português da maioria deles. Todos tem o idioma definido em algum lugar nos menus.
KMplayer
Para abrir esta janela tecle F2. Desmarque os itens destacados.
GOM player
Para abrir esta janela tecle F5. Marque o item destacado.
Media Player Classic - Home Cinema
Para abrir esta janela tecle "O" (Options). Desmarque os itens destacados.
Problemas
Se seu sistema estiver configurado corretamente o Graphedit mostrará um gráfico como este para um arquivo cujo stream de vídeo seja H.264:
Nota: se você tentar abrir um MKV e o Graphedit acusar que o formato não é suportado, instale o Haali Media Splitter
Somente nos importa o caminho do video, destacado em vermelho.
Se o Graphedit mostrar algo diferente, DXVA não funcionará para o arquivo H.264 especificado. Se estiver diferente disso para todos os seus H.264, você tem um problema na sua instalação. Geralmente o Graphedit lhe dará pistas suficientes no gráfico para você saber quem é o culpado. Leia meu texto sobre o Graphedit para saber um pouco mais sobre isso.
Nem todo H.264 é compatível.
Pois é. Alguns filmes não podem ser acelerados por DXVA e vão precisar ser decodificados por software. Mas o ffdshow se encarrega de determinar isso e ativar o decoder correto. O ícone mostrado na bandeja será diferente.
Eu ainda não sei ao certo o que causa a incompatibilidade, mas em todas as amostras incompatíveis que testei, Mediainfo reportou um profile High@L5.1 e pelo menos 6 reframes no stream de vídeo:
Isso possivelmente é um problema da mesma natureza que o causado por Packet Bitstream em XviD e à medida que as "fontes" forem tomando conhecimento de que o problema existe você verá menos filmes incompatívels, porque elas aprenderão a evitar as configurações problemáticas. Se você procurar por "DXVA x264" no Google verá que alguns na "scene" já estão marcando alguns "releases" como compatíveis.
O consumo de energia
Como eu disse antes, não se trata de magia. Você pode até usar 0% de CPU, mas sua GPU vai cobrar pelo esforço extra. O quanto ela vai cobrar depende exclusivamente dela, mas como GPUs são teoricamente mais eficientes que CPUs quando o assunto é vídeo, dá para esperar uma economia de energia ao usar DXVA, o que pode ser particularmente interessante em notebooks.
Eu fiz um teste de alguns minutos aqui e meu medidor de energia no pior caso mostrou um aumento de 10W em relação ao consumo em idle. Comparando com as medições que fiz em dezembro eu estou chutando um consumo pelo menos 10W menor do que fazendo a mesma coisa sem DXVA. Eu ainda preciso fazer testes mais elaborados mas uma coisa parece garantida: você consome menos energia usando DXVA.
Jefferson, aqui eu uso o MPC-HC apenas, sem o ffdshow, em quatro computadores, dois com Win7 x64 e dois com Win7 x86 (sendo que um deles é um note), e em todos eles o programa já faz a decodificação por DXVA para todos os releases H.264 que tenho aqui, sem precisar fazer nenhuma alteração nos filtros internos.
ResponderExcluirÉ claro que para as máquinas com SO x64 uso o MPC-HC adequado.
Três das máquinas tem GPU onboard fornecida pela chip AMD 780 (Radeon 3200) e a minha máquina principal está com uma Radeon 5770.
O uso da CPU, em todas as máquinas, com legendas, fica entre 5% e 10%. Sem legendas tende a 0%.
Vale resaltar, tanto no caso do seu tutorial como no meu, que o menor consumo e a maior eficiência na decodificação não são os únicos benefícios. Para quem vai montar um htpc, com um bom vídeo onboard, o uso da gpu, ao deixar a cpu livre, também te ofere menor aquecimento geral do sistema e maior silêncio de operação, já que o cooler do processador não será exigido e a refrigeração da gpu costuma ser satisfatóriamente resolvida com um cooler passivo.
Ah sim, a versão do MPC-HC que eu uso é a 1.3.1249.0
Oxysucker,
ResponderExcluirObrigado por divulgar sua experiência. É muito bom saber que o AMD 780 é uma alternativa.
Eu comecei tentando com o MPC-HC, mas como está explicado no meu Buzz, falhei miseravelmente. Foi durante os testes com ele que eu esbarrei no fato de que o ffdshow tinha suporte (eu desconhecia isso completamente). E daí fui fazendo testes até chegar ao resultado acima.
Ryan, eu também uso somente o mpc-hc sem nenhum filtro ou plugin adicional. Sempre baixo a última versão daqui : http://www.xvidvideo.ru/content/view/125/2/.
ResponderExcluirps. Lembrei que adicionei somente o realalternative codec para rmvb.
JR, eu também uso o realalternative + o quicktime lite. Também esqueci que o Hali Media Splitter está instalado e a opção nos filtros internos do MPC-HC para Matroska está desativada.
ResponderExcluirHum, não tinha me dado conta do seu Buzz, até por que não habilitei o meu.
ResponderExcluirAcho que não é só uma questão do AMD 780, me parece que a versão mais nova do MPC-HC tem melhor suporte a DXVA e ao Win7.
Pode ser também que o Win7 tenha algo a ver com isso (estou apenas especulando), já que antes de instalá-lo, eu tinha que usar o ffdshow no XP para alguns releases (nem me lembro mais como era a configuração).
Quando instalei o Win7 x64 no htpc, não consegui fazer o ffdshow funcionar de forma alguma. Eu estava usando uma versão antiga do MPC-HC que já tinha salvo na minha pasta de programas para instalação (constumo manter cópia de tudo que instalo), que funcionava bem com o RC, mas não estava tendo bom desempenho com o x86 Home Premium. Resolvi verificar por uma nova versão e tudo funcionou as mil maravilhas.
Você vai ROLAR de rir agora. Eu sempre torci o nariz, e odiei arquivos .MKV com H264 encapsulado dentro. (Vale lembrar que o MKV é um container), porque MESMO com uma bela maquina aqui, um opteron 170, ram a vontade e um GForce 8400GS a nhaca nos H264 andava aos "trancos" ou seja perdia frames.
ResponderExcluirSimplesmente instalei o ffdshow 3425 ativei o DVXA e o problema ACABOU!
Estou exibindo um vídeo em H264 em tela cheia (fazendo resize) aqui que esta mais "liso" que um DVD.
Consumo de CPU pelo Media Player Classic - Home Cinema: ZERO!
Essa valeu mesmo!
Rolar de rir? de forma alguma.
ResponderExcluirEu fico sempre satisfeito quando o trabalhão que eu tenho para pesquisar, testar e elaborar o texto acba sendo útil para outras pessoas.
E quando é um dos amigos então... :)
Tentei abrir o DXVA Video decoder configuration e deu o seguinte erro: Error in FFDshow.ax. Missing entry: configureDXVA http://shark007.net/forum/attachment.php?aid=252
ResponderExcluirUso o Win7 x64.
http://shark007.net/forum/Thread-Error-in-FFDshow-ax-DXVA
Pelo que eu entendi, isso ocorre porque você está usando ou usou uma versão distribuída por shark007. Eu sempre obtenho os releases no link indicado no meu texto.
ResponderExcluirEncontrei esse shark007 quando busquei pelo problema no Google. O Ffdshow foi baixado pelo link do texto.
ResponderExcluirVou continuar investigando.
Oi Ryan,
ResponderExcluirObrigado pelo post! Foi bem elucidativo!
Sem querer ser chato, eu vivia me confundindo com x264 e H.264, mas recentemente eu achei que tinha dominado as diferenças.
Você disse:"Cuidado para não se perder: H.264 é um termo genérico que, para os fins deste post, é sinônimo de x264 e MPEG-4 AVC. A diferença entre x264 e H.264 é a mesma que existe entre XVID e DivX"
O que eu entendi até agora é:
x264 é um encoder (ou codec) open source que cria arquivos de vídeo H.264 (ou MPEG4 AVC).
XviD e DivX seriam também encoders (ou codecs) que criam arquivos de vídeo MPEG-4 ASP.
Em resumo: x264 está para XviD ou DivX como H.264/MPEG4 AVC está para MPEG4 ASP.
Estou certo, ou será que ainda estou meio perdido?
"x264 é um encoder (ou codec) open source que cria arquivos de vídeo H.264 (ou MPEG4 AVC)."
ResponderExcluirCorreto
"XviD e DivX seriam também encoders (ou codecs) que criam arquivos de vídeo MPEG-4 ASP."
Correto
"x264 está para XviD ou DivX como H.264/MPEG4 AVC está para MPEG4 ASP."
Correto.
Tenha em mente que quando eu disse que "para os fins do post" x264 e h.264 eram sinônimos eu estava me referindo aos arquivos (o resultado da codificação).
Resolvi o problema instalando a versão x64 do ffdshow. Na hora de baixar eu nem me toquei nisso.
ResponderExcluirJefferson, dxva do ffdshow funciona em qualquer Windows (XP/Vista/7)? Os decoders que vêm no 7 já usam DXVA nativamente e tenho visto o pessoal recomendando evitar o uso do ffdshow nele, dizendo que o os decoders nativos seriam melhores, por usarem a API Media Fundation (que usa DXVA 2.0), ao contrário do ffdshow que usa DirectShow (DXVA 1.0). Eu não tenho idéia das diferenças, por isso pergunto.
ResponderExcluirEu estou usando exclusivamente o XP. Só quando sair o SP1 do Seven eu vou testar de novo se a josta do Seven roda direito com o meu hardware.
ResponderExcluircom uma vga dx 10.1 (radeon 4850) o dxva fica tudo preto no media player classic home cinema 1.3.1249 já com uma placa nativa dx 11 (radeon 5670) fluiu normalmente no mesmo pc mesmo sistema tudo apenas trocando as placas com mesmos drivers também
ResponderExcluirJefferson, eu tentei isso.. mas realmente fiquei meio noob na história.
ResponderExcluirVc usa aquele pacote K-Lite Mega Codec?
Se não, o que você instala pra rodar o resto (flv, avi (xvid), etc..)?
Estou usando Win7 x32.
Só pra constar.. vc é cara! =)
instalei o seven x64 do zero e com a hd 4850 e o MPC 1.3.1249 x86 e mesmo driver 10.6 ati e rolou o dxva de boa sem configurar nada e sem instalar o ffdshow sequer vai entender ...
ResponderExcluirno xp 32 bits sem chance de o dxva rodar na minha 4850 ...
DheRLaN,
ResponderExcluirEu não uso pacotes de codecs. Instalo apenas o que preciso, à medida que vai sendo necessário, como está explicado aqui. No XP o ffdshow sozinho já cobre quase tudo.
Mas para usar o ffdshow no Seven é preciso ter cuidados especiais.
Existe alguma maneira de eu saber, sem testar, se a minha placa de vídeo faz a decodificação do x264 via hardware?
ResponderExcluirEu quero dizer: será que existe alguma documentação do fabricante, ou algum termo técnico nas especificações da placa, que signifique isso?
Eu tenho dois notebooks da Acer, ainda não fiz os testes (vou fazer!), mas acho que as plaquinhas de vídeo deles não vão fazer por hardware a decodificação.
O primeiro deles é um Acer Aspire 2680-2992, que comprei no final de 2007, com Celeron M440 @1.86GHz, e o adaptador de vídeo é "Mobile Intel(R) 945 Express Chipset Family".
O segundo, novinho, é um sub-notebook Acer Aspire One 532h-2462, com tela de 10.1", Atom N450 @1.66GHz, e o adaptador de vídeo é "Intel Graphics Media Accelerator 3150".
Eu procurei a documentação do adaptador de vídeo do computador novo, mas não encontrei (parece que a documentação do adaptador de vídeo é contida junto com a documentação do processador, eu não entendi direito, achei meio confuso).
Enfim, eu vou fazer os testes com o FFDShow, mas antes de fazer os testes tive essa dúvida e resolvi postar ela, de uma maneira mais teórico-reflexiva do que prática.
Até porque eu estou achando que não vai dar certo nos meus adaptadores onboard e se isso acontecer eu não vou saber se fiz algo errado na configuração ou se é culpa do hardware mesmo.
Errata: o modelo do computador mais antigo é 3680-2992.
ResponderExcluirTestei no computador pequeno (netbook 10.1") e não funcionou.
Fiz todas as etapas sugeridas neste post e na hora de rodar o vídeo simplesmente não apareceu o FFVA no tray. Somente o FFV. Chequei as configurações e tentei mais umas cinco vezes.
Atrás de informações, no Google, encontrei algumas referências dando a entender que as Intel GMA série 3100 não dão decodificam H.264 via hardware.
E então encontrei um software chamado DXVA Checker, que supostamente checa se o hardware é compatível com DVXA.
Ao rodar o programa ele me diz, entre outras coisas, isso (que parecem ser os dados mais relevantes):
Intel(R) Graphics Media Accelerator 3150
ModeMPEG2_A: DXVA1, IMC4, 720x480 / 1280x720 / 1920x1080
ModeMPEG2_B: DXVA1, IMC4, 720x480 / 1280x720 / 1920x1080
ModeMPEG2_C: DXVA1, IMC4, 720x480 / 1280x720 / 1920x1080
ModeMPEG2_D: DXVA1, IMC4, 720x480 / 1280x720 / 1920x1080
ModeMPEG2_MoComp: DXVA2, IMC4, 720x480 / 1280x720 / 1920x1080
ModeMPEG2_IDCT: DXVA2, IMC4, 720x480 / 1280x720 / 1920x1080
Como a documentação do software é em japonês, parti para a análise crua dessas informações, pelo método dedutivo/adivinhation, e concluí que o meu hardware faz decodificação high definition via hardware sim, mas somente MPEG2, e não H.264. Ou seja: adianta exatamente NADA, porque tudo que eu quero ver em HD está em H.264.
Era o esperado de um hardware tão simples quanto o meu.
Felizmente estou conseguindo assistir lindamente a vídeos H.264 1920x1080 pixels nessa minha máquina (mas não com 0% de uso do processador) usando um filtro chamado 'CoreAVC Video Decoder'.