Configurações de qualidade, buffer VBV e presets do XSplit
O XSplit usa o encoder x264, então vamos começar dizendo que os parâmetros mencionados no título, com exceção dos parâmetros de qualidade, têm o mesmo significado que os parâmetros do wiki do x264 aqui.
Qualidade
Como a qualidade é diferente, vamos começar discutindo exatamente isso. Nos termos do x264, a qualidade é conhecida como fator CRF ou Constant Rate Factor. O encoder aceita qualquer valor de CRF=0 (sem perdas) a CRF=51 (qualidade terrível).
Ao codificar um stream de vídeo, você pode aplicar diferentes esquemas de controle de taxa. O XSplit usa controle baseado em qualidade, que busca uma qualidade específica para o vídeo codificado enquanto respeita um limite superior de bitrate (vbv-maxrate). Há uma enorme diferença no bitrate necessário entre as qualidades (e NÃO é linear). A maioria das pessoas nem conseguiria notar diferença entre CRF=18 e CRF=0, exceto pelo fato de que uma gravação CRF=0 ocupa bastante espaço no disco rígido.
Nos termos do XSplit, usamos uma configuração geral de qualidade para streaming entre 0 e 10, sendo 10 a qualidade mais alta. Qualidade 10 corresponde a CRF=25, geralmente uma qualidade muito boa. A qualidade 0, por sua vez, corresponde a CRF=35, que pode ser aceitável em alguns casos, embora não seja muito bonita.
Embora possa ser discutido, a convenção do XSplit é usar seu próprio parâmetro de qualidade e convertê-lo internamente em CRF. Achamos que as pessoas entendem qualidade e estão acostumadas a valores entre 0 e 10, sendo o último o mais alto. Mas isso pode ser facilmente personalizado por quem quiser seguir esse caminho.
Você perceberá que, para gravações locais, o XSplit oferece apenas uma configuração de qualidade e não define um vbv-maxrate ou vbv-buffer específico. A ideia é que, em uma gravação local, geralmente não nos preocupamos com o uso da largura de banda. Assim, uma gravação que busca uma qualidade específica será criada e, dependendo da qualidade selecionada, os arquivos para a mesma entrada terão tamanhos diferentes, o que parece lógico.
Em cenas complexas (frames), mais bits são usados para garantir uma qualidade visual consistente e, em cenas menos complexas, menos bits. O encoder x264 tenta interpretar a importância das mudanças no frame e otimizar a qualidade visual conforme as configurações (CRF, também chamado configuração de qualidade). A base de FPS para qualidade é de 25 frames por segundo. O x264 ajusta a qualidade conforme a taxa de quadros do vídeo, então uma configuração específica dará menos qualidade por frame em um stream de 60 FPS do que em um de 25 FPS. O motivo é simples: um frame a 25 FPS é mais importante que um frame a 60 FPS quando o objetivo geral é manter a mesma qualidade visual nos dois streams.
Para gravações locais, ainda pode ser desejável controlar a largura de banda máxima usada, então a interface do XSplit permite definir vbv-maxrate e vbv-buffer. Voltaremos a isso em breve.
VBV buffer e VBV maxrate
Os dois principais mecanismos de controle de taxa de dados usados pelo encoder x264 são
- Modo de bitrate médio- Modo de qualidade média
Na interface do XSplit, permitimos apenas o modo de qualidade média discutido acima, pois ele costuma ser um mecanismo muito mais eficaz.
Porém, para os dois esquemas principais, costuma-se usar outro controle de taxa complementar, que é até obrigatório para fazer streaming ao vivo com sucesso no XSplit: o controle de taxa VBV. Com codificação baseada em qualidade, você tem garantia de uma qualidade específica, mas não de um uso específico de largura de banda. No streaming ao vivo, é importante não exceder sua largura de banda de upload disponível, nem a velocidade de download dos espectadores.
Fazer streaming com largura de banda constante é uma opção usada por alguns encoders, mas esse mecanismo de controle de taxa (ou sua ausência) desperdiça largura de banda e costuma exigir uma conexão de maior qualidade tanto para o transmissor quanto para os espectadores.
O XSplit usa codificação baseada em qualidade e define um VBV-maxrate e um VBV-buffer. Isso significa, basicamente, que o encoder x264 do XSplit tenta manter uma qualidade constante no stream e pode usar menos largura de banda em cenas menos complexas ou menos importantes. O VBV-maxrate estabelece um teto para a largura de banda que o encoder pode usar, mas em relação ao VBV-buffer.
Se definir VBV-maxrate=2000 e VBV-buffer=4000, seu buffer VBV (buffer de decodificação) será preenchido a uma taxa máxima de 2000 Kbps. Assim, o bitrate do vídeo ainda pode ultrapassar o valor discreto de 2000 Kbps, MAS você não ultrapassará 4000 Kbit em um período de 2 segundos. Ou seja, VBV-maxrate não é realmente o bitrate de pico que pode existir no stream, mas apenas o bitrate máximo que pode entrar no buffer.
Se entender esse conceito, também entenderá a flexibilidade oferecida pelo vbv-buffer. Ele permite que o encoder olhe à frente em uma sequência de frames e use mais bits para codificar alguns e menos para outros, desde que o buffer não seja excedido.
Agora você precisa entender que vbv-buffer é um buffer do lado da decodificação e depende do decoder, que no nosso caso geralmente é o Flash Player. É possível configurar o Flash Player com um buffer de 0 segundos até, hum, qualquer valor, imagino. Mas a maioria dos provedores fixa o buffer em 1 ou 2 segundos. Por isso os plugins de streaming do XSplit costumam ajustar automaticamente vbv-buffer para X ou 2 * X quilobits quando vbv-maxrate é definido como X quilobits por segundo (Kbps). Espero que tudo comece a fazer sentido! Se o buffer do Flash Player do seu provedor estivesse em algo como 10 segundos, você poderia aumentar bastante o meu vbv-buffer e obter a mesma qualidade com menos largura de banda total ou qualidade melhor com a mesma largura de banda. Basicamente, daria ao encoder mais liberdade para criar picos de bitrate quando necessário. Portanto, você pode esperar que a equipe do XSplit converse com nossos parceiros para ver se conseguimos que ajustem o buffer do Flash Player ao buffer VBV definido no XSplit.
Para concluir esta parte, quero voltar às gravações locais. Nesse caso, não há uma taxa máxima padrão, vbv-maxrate, definida para a gravação e, consequentemente, também não há vbv-buffer. Porém, se você quiser colocar o vídeo gravado em um site e permitir que os visitantes o reproduzam com o Flash Player pela internet, talvez seja melhor pensar duas vezes. Se você espera que os espectadores finais tenham no máximo 1000 Kbps de largura de banda de download e quer que o vídeo comece a ser reproduzido depois de cerca de 4 segundos, basta aplicar as restrições VBV adequadas além da qualidade atribuída à gravação local.
No nosso exemplo acima, usaríamos as seguintes configurações do XSplit:
VBV Max Rate:1000 kbpsVBV Buffer:4000 kbps
Provavelmente também devemos compensar o áudio, mas neste caso basta subtrair 1 x o bitrate de áudio do seu VBV Max Rate e 4 x o bitrate de áudio do seu VBV Buffer, e pronto.
Preset do encoder
Vários presets integrados vão de “Ultrafast” a “Placebo”. O XSplit usa um preset personalizado chamado “XSplit Default”. No futuro, você pode esperar que o padrão seja definido como “Veryfast”.
Mas o que tudo isso significa?
H.264 especifica um conjunto de recursos de compressão que um decoder deve poder suportar ou decodificar. Conforme as capacidades dos decoders, eles são separados em grupos de perfis: High Profile, Medium Profile e Base Line Profile. Por enquanto, consideraremos apenas High Profile, suportado pelo Flash Player.
Ao usar um preset específico, o encoder x264 utiliza vários recursos avançados para comprimir melhor o fluxo de bits do vídeo. Qualquer preset mais lento que “Superfast” resultará em um fluxo compatível com High Profile, a menos que outras restrições personalizadas sejam adicionadas, mas não se preocupe com isso agora. Você só precisa saber que quanto mais lento o preset, mais o stream será comprimido e melhor será a qualidade com largura de banda limitada. MAS tudo isso exige bastante potência de CPU, dependendo da taxa de quadros e da resolução.
O preset padrão é “XSplit Default” ou “Veryfast”, que são mais ou menos equivalentes. Se nenhum outro processo intensivo de CPU estiver rodando ao mesmo tempo e você quiser transmitir ou codificar 30 FPS a 1280 x 720 usando “Veryfast”, um processador i5 deve ser suficiente. Se o uso de CPU ultrapassar 70% em algum núcleo, será necessário:
a) Usar uma resolução menorb) Usar um preset mais rápido (como superfast)c) Comprar uma boa máquina Core i7
Para encurtar a história, o preset escolhido equivale à quantidade de compressão que você pede ao encoder. Mais lento = mais compressão = mais uso de CPU.
Para explicar o que você deveria ter aprendido acima, vamos dar a resposta à única pergunta que provavelmente está na sua cabeça agora -:):
Pergunta: Se eu fizer uma gravação local, definir a qualidade como 8 e NÃO definir nenhuma restrição de VBV, obterei um vídeo de melhor qualidade se selecionar um preset mais lento?
Resposta: NÃO, VOCÊ NÃO OBTERÁ. A qualidade será exatamente a mesma, mas quanto mais rápido o preset, menos comprimido será o vídeo gravado (arquivo maior). MAS, se houver restrições VBV-maxrate suficientemente restritivas, você verá diferença na qualidade porque o preset mais lento mantém melhor o bitrate abaixo do VBV-maxrate definido.







Comentários