O que é o Hi10p?

Um vídeo Hi10p sendo decodificado da forma correta com o madVR

Hi10p é a sigla do “High 10-bits Profile” do AVC/H.264. Um profile, ou perfil, é um conjunto de regras que limitam o uso de alguns recursos na hora de encodar, com o objetivo de manter a compatibilidade com um certo conjunto de decodificadores (por exemplo, seu celular tem menos poder de processamento que o seu PC, portanto temos que limitar alguns recursos na hora de encodar um vídeo para seu celular). Um “High Profile” é um perfil com poucas limitações destinado principalmente as aplicações profissionais como edição de vídeo.

Por ser destinado ao mercado profissional, todos os perfis acima do “High Profile” do H.264 suportam mais que os tradicionais 8-bits de profundidade de cor. Vamos focar nesse artigo no Hi10p porque patches no final de 2010 adicionaram suporte a esse perfil no x264, tornando esse perfil antes restrito ao mercado profissional acessível a meros mortais (ou fansubbers de animes, que foram os primeiros a adotá-lo em larga escala). Mas que fique claro que podemos ter encodes no H.264 variando de 8 até 14 bit de profundidade.

O que muda no Hi10p?

O “10” indica um encode em 10-bits por canal, diferente do tradicional 8-bits que usamos atualmente. Considerando o sistema binário, saímos de 256 maneiras diferentes de representar uma cor (2^8) para 1024 maneiras diferentes (2^10). Geralmente usamos o sistema de cor YUV ao invés do RGB na hora de encodar vídeos. Ele funciona basicamente com um canal representando o brilho (Y) e dois canais representando o espectro de cor (U e V). A vantagem desse sistema é levar em conta as limitações da visão humana, permitindo uma redução no uso de banda.

Exemplo de uma curva UxV com o Y=0,5, representado no esquema de cores RGB

Com 10-bits por canal, temos 1024 maneiras diferentes de representar o canal Y, 1024 para representar o U e 1024 para o V. Com isso temos 1.073.741.824 (1024x1024x1024) de representar cada pixel na imagem contra os tradicionais 16.777.216 (256x256x256) do sistema de 8-bits de cor.

Edit (28/03/12): descobri que o que eu escrevi acima não é bem verdade, como o olho humano é muito mais sensível ao canal de brilho (luma) que aos canais de cores (U e V) geralmente é usado uma resolução diferente para o canal Y e U/V. O que eu descrevi acima é o formato 4:4:4, mas os mais comuns são 4:2:2 (onde a resolução do canal U e V é metade do canal Y) e 4:2:0 (onde a resolução do canal U e V é 1/4 do canal Y). Mas a ideia básica continua, em 10-bits você tem mais precisão que em 8-bits.

Qual a vantagem do Hi10p?

O Hi10p melhora a eficiência do H.264. Isso significa que ou conseguimos a mesma qualidade que num encode de 8-bits usando menos bitrate, ou que no mesmo bitrate temos mais qualidade.

Gráfico de eficiência em cada profundidade de cor. Perceba que acima de 10-bits a eficiência não aumenta tanto.

Além disso, com mais maneiras de representar o espectro de cores, há uma redução dos problemas de color banding ou diminuição do uso de dithering para aumentar o espectro de cor (e como consequência diminuir o tamanho do arquivo pois deixa de ser aplicado mais ruído na imagem). Os 10-bits também ajudam a evitar artefatos clássicos do H.264 como mosquito noise, contouring e smearing.

Por que o Hi10p ajuda mesmo quando a fonte de vídeo é de 8-bits?

A primeira vista o encode de 10-bits parece sempre ser maior que um encode de 8-bits, afinal temos mais dados a serem processados. De certa forma esse pensamento está certo se considerarmos vídeos sem compressão, porém ao aplicar um sistema de compressão moderno como o H.264 a coisa muda de figura.

O que acontece é o seguinte, quanto encodado com 10-bits de cor, o processo de compressão é executado com pelo menos 10-bits de precisão contra 8-bits no caso contrário. Então existem menos erros de truncamento, aumentando a eficiência do encoder.

Imagine o seguinte: um erro de um bit quando se tem 8-bits processando a informação significa que temos um número com 7-bits confiáveis. Para acontecer um erro na mesma magnitude com 10-bits, poderiam ter até 3 bits errados, pois 10-3=7. Ou seja, temos muito mais precisão, e com mais precisão o encoder pode gastar menos bits tentando corrigir a informação guardada.

Então por que todos não migram para o Hi10p?

Em encodes comerciais voltados ao mercado doméstico provavelmente não veremos o Hi10p tão cedo. Isso porque o suporte a hardware é inexistente por enquanto, e mesmo quando os primeiros hardwares passarem a suportar Hi10p (como o Ainovo Novo7), os hardwares antigos vão continuar não oferecendo suporte, porque na maioria dos casos é necessário modificações no hardware em si e não no software. Além disso, estamos tratando de um “High Profile”, algo que deveria ser restrito ao mercado profissional. Para o mercado doméstico existe os perfis Baseline e o Mainline, ambos não suportando os 10-bits de cor.

Na scene muitos grupos ainda usam o Xvid como codec principal então acredito que também vai demorar um pouco até eles começarem a adotar o Hi10p, até porque as regras da scene são rígidas e quem não as segue pode ter o lançamento nuked (e ficar com o nome manchado).

A adoção mais forte do Hi10p até agora foi entre os fansubbers de animes, já que animes são um dos tipos de fonte que mais se beneficiam com a redução de artefatos como banding. Mas mesmo entre os fansubbers a adoção não é universal: alguns preferem manter a compatibilidade com aceleração via hardware, outros preferem que se lançamento seja usado em PCs mais antigos (o Hi10p consome mais poder de processamento que o perfil tradicional), outros ainda não viram muita vantagem em fazê-lo.

A verdade é que muitos casos a falta de suporte limita bastante o uso do novo perfil. O Hi10p por enquanto só é suportado de forma decente nas versões mais recentes do ffmpeg/libav. Sem suporte a hardware e consumindo mais poder de processamento, você dificilmente conseguirá rodar um vídeo encodado com esse perfil num PC antigo ou num dispositivo embarcado.

Eu preciso de um monitor de 10-bits para aproveitar os vídeos em Hi10p?

Não, o software de decodificação pode muito bem fazer um dithering para 8-bits caso você tenha um vídeo que originalmente era 10-bits (obviamente que num vídeo de 8-bits encodado em Hi10p não faz nenhuma diferença). Mesmo que você tenha um monitor que suporte 10-bits por canal (a.k.a. 30-bits/Deep Color), provavelmente vai ser necessário utilizar uma placa de vídeo profissional como a Quadro ou FirePro para conseguir uma saída real de 10-bits de cor.

Mas para a maioria das pessoas isso realmente não importa, pois o mercado está inundado de monitores TN+Film que tem “incríveis” 6-bits por canal (para conseguirem os 8-bits que são anunciados eles adotam mecanismos de dithering interno). Fato é que somente monitores S-IPS tem realmente 8-bits de cor por canal, enquanto apenas alguns caros monitores profissionais suportam 10-bits de cor (e a grande maioria via dithering também).

De qualquer jeito, a melhora de qualidade e diminuição de artefatos é visível em qualquer monitor.

O que eu preciso para rodar vídeos em Hi10p hoje?

Como eu disse a falta de suporte limita bastante o que você pode usar hoje para assistir um vídeo em Hi10p. Vou colocar aqui alguns players de vídeo e codecs que eu conheço que tem suporte ao Hi10p. Com exceção do CoreAVC todos são baseados no ffmpeg/libav mais novos, e outros players que usam o ffmpeg/libav também devem funcionar desde que estejam relativamente atualizados.

Erro causado por codec que não suporta o Hi10p completamente (CoreAVC 3)

Primeira opção: mplayer2

É uma das melhores opções porque foi um dos primeiros players a trazerem suporte ao Hi10p, então ele tem suporte mais maduro. Infelizmente a última versão estável (2.0) é meio antiga já e ainda não tem suporte, então você vai ter que compilar a partir do git, mas se você usa Windows pode baixar as compilações não-oficiais lachs0r aqui (baixe o mini_installer.exe se você quiser a interface gráfica SMPlayer2 também).

Segunda opção: LAV Filters/madVR

São duas boas opções, baseadas nas últimas versões do ffmpeg/libav. O primeiro é um pacote de codecs para o DirectShow enquanto o segundo é renderer de vídeo de alta-qualidade. Apesar disso, caso seja configurado o madVR também consegue decodificar arquivos via libav e suporta Hi10p sem problemas. São duas opções para usuários mais avançados e vai precisar um pouco de configuração na mão, mas funcionam.

Segunda opção: CCCP

Se você usa Windows provavelmente é a opção mais simples. O time do CCCP bateu um recorde esse ano ao lançar três versões com o objetivo de melhorar o suporte ao Hi10p. O resultado é um suporte relativamente estável e praticamente sem grandes dores de cabeça. O problema que eu vejo com o CCCP é que eles ainda usam o DirectVobSub como renderizador de legendas padrão, e como ele não suporta 10-bits de cor toda vez que você ver um vídeo com esse perfil e legendas ele vai fazer dithering  para os 8-bits, reduzindo a performance e possivelmente a qualidade de imagem também.

Quarta opção: VLC

Até a pouco tempo atrás o VLC ainda tinha alguns problemas com alguns vídeos H.264@High Profile, então não acho difícil ele ter alguns problemas com o Hi10p. Além disso, a atual versão estável do VLC (1.1.x) não vai suportar o Hi10p (já que agora só são aceitas correções de bugs) e provavelmente a próxima versão (1.2) também não vai. Vai ser necessário compilar o git da versão 1.3, ou pegar as builds para Windows aqui.

Quinta opção: CoreAVC

O CoreAVC 3 adicionou suporte ao Hi10p, mas como a imagem acima mostra ele continua com alguns bugs. Além disso alguns testes mostram que o CoreAVC anda mais lento que o ffdshow. E o codec ainda por cima é pago. Bom, se você comprou esse codec na época de ouro dele talvez valha a pena experimentar, mas os resultados podem ser ruins.

Mais informações

10-bit versus 8-bit video compression: algumas informações interessantes sobre a eficiência do H.264 com 10-bits de cor.

10 bit high quality MPEG4-AVC video compression: papel da Ericsson mostrando as vantagens de profiles de 10-bits de cor.

x264: diversas ferramentas e alguns papéis mostrando a eficiência do Hi10p.

“What is Hi10p” – An infoguide: mais informações, comparativos, o que fazer e o que não fazer.

Imouto.my miscellaneous: informações de como configurar os mais diversos players para usar ou não aceleração via hardware, e claro, como fazer o Hi10p funcionar.

About these ads
  1. Muito obrigado pelo post! Esclarecedor.

  2. Ah, as compilações nightly do VLC para Windows 64-bit estão numa pasta separada:
    http://nightlies.videolan.org/build/win64/last/

    • Rosasdoinferno
    • 2 fevereiro, 2012

    Entedi porra nenhuma se me permite dizer.

    Dá por favor pra explicar o que é esse rolo de h264 e 10 bits e hardware?

    Informações que eu sei:

    Para se rodar um video ou musica dvd é necessário 2 coisas:

    Hardware e Software.

    Tá até ai eu sei.

    Encoders e Decoders sao da parte de software certo? os defina por favor.

    esse h.264 e x264 e blablablá sao formatos de arquivos e de configurações de video certo?

    Voçes poderiam por favor me falar se existe um guia como dicionario para entender tudo isso?
    Como aprenderam sobre isso?

    E sobre esse 10 bits, “e uma configuração de software de arquivos de video” que tem mais qualidade e é mais precisa para exibição certo?

    Se é apenas software porque precisa de um monitor especifico?
    nao da pra ver a diferença de qualidade, em uma Tela fullHD LED LCD?

    Façam ou me endiquem um dicionario sobre todos esses termos e arquivos de midia, já to ficando doido!!!!

    h.264. containners, divx, xvid, mkv, mpeg 1234 sub configurações internas sub configurações internas , externas, filtros, formatos, compressao sem compressao perda sem perda, hle lle codecs de video encoders decoders háaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaá
    pro inferno!´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´

    • O “rolo” é que a parte da GPU que cuida de aceleração via hardware dos chips atuais não consegue fazer cálculos com precisão mais alta que 8-bits, por isso você não consegue decodificar um vídeo em Hi10p acelerado por hardware num sistema atual (nada impede no futuro dos fabricantes implementarem o que for necessário e os hardwares passem a suportar Hi10p).

      Não precisa ter um monitor específico para ver a diferença de qualidade na maioria dos arquivos que estão em Hi10p, já que eles são encodados a partir de fontes de 8-bits (um vídeo 8-bits encodado em Hi10p fica menor ou com mais qualidade no mesmo tamanho, por causa do aumento de precisão). Agora, se você tiver um vídeo que foi gravado em 10-bits ou mais (esse equipamento é profissional e bem caro), encodar em Hi10p traria um espectro de cores maior. Essas cores extras só seriam visíveis em monitores de 10-bits, que são bem caros e também voltados ao mercado profissional (somente monitores de IPS chegam realmente aos 8-bits, a maioria dos monitores do mercado é TN+Film que não passa de 6-bits). Mas a diferença não seria algo tão absurdo assim, na verdade acredito que é imperceptível em ação, mas essa precisão extra é útil na hora da edição (por isso é mais voltado ao mercado profissional). As outras vantagens que o Hi10p traz (diminuição de artefatos, aumento de qualidade) é perceptível em qualquer monitor.

  1. 23 janeiro, 2012
  2. 3 outubro, 2012

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Junte-se a 271 outros seguidores

%d blogueiros gostam disto: