Lenna adora ficar bonita - afinal, uma modelo. Existem lendas que, ao adicioná-lo ao título de um artigo relacionado ao processamento de dados visuais, dão +5 a chance de vantagens.Continuo divulgando os recursos dos serviços de vídeo. Hoje observa sobre opções de codificação e sua seleção.
Primeira parteA maioria dos codecs oferece valores padrão bastante equilibrados, permitindo que você obtenha um resultado normal sem uma longa seleção de parâmetros. No entanto, quando se trata de um grande arquivo de material de vídeo, limitações na taxa de bits, considerações de compatibilidade com o equipamento do cliente e um desejo razoável de manter a qualidade do original, tudo fica mais interessante.
Infelizmente, o botão mágico "codificar muito bem" não é fornecido. Como o analógico
caniuse para codificar parâmetros. Tem que entender os recursos dos codecs.
Introdução: Perfis
Existem tantas configurações e parâmetros para o H264 que os próprios desenvolvedores, para não ficarem confusos, decidiram fazer uma lista de perfis - configurações “boas” para diferentes propósitos. Os perfis padrão identificaram muito; Além disso, ao definir seus próprios parâmetros de codificação, você cria seu próprio perfil, confundindo todo mundo completamente. Infelizmente, acabou como sempre.

Inicialmente, foram criados perfis para determinar se o vídeo final será reproduzido no tipo de dispositivo desejado, mas agora não há separação inequívoca de players por tipo e perfil de dispositivo.
Na prática, eu destacaria, pelo nível de intensidade dos recursos de decodificação, três grupos de parâmetros:
- com CABAC desativado; perfis condicionalmente principais e de linha de base. Eles ainda podem ser usados para streaming sensível a atrasos;
- com CABAC ativado; perfil relativamente alto. Para tudo. A maioria dos equipamentos modernos (e nem tanto) pode desempenhar esse papel. O aumento da eficiência em comparação com o principal - 20% +;
- com suporte para amostragem de dez bits e outros parâmetros avançados. Condicionalmente Hi10P. O problema com esses perfis é a quase completa falta de suporte de hardware e o aumento dos requisitos para equipamentos de decodificação; Telefones, mesmo os de última geração, não conseguem lidar com esses arquivos. Pode ser usado para uma biblioteca pessoal se você estiver confiante no seu equipamento. Outro aumento de 10 a 20% na eficiência.
O conceito de perfis para outros codecs não é tão desenvolvido quanto no H264. Para eles, podemos assumir que, se o codec for suportado, ele será totalmente suportado, e a restrição durante a reprodução poderá ser apenas uma taxa de bits excessivamente alta ou outro parâmetro claramente exagerado. No entanto, com a proliferação de decodificadores de hardware VP8 e VP9, a situação pode mudar.
Agora para os parâmetros individuais.
Espaço de cor
A escolha do espaço de cores praticamente não afeta a eficiência da codificação; esse parâmetro pode ser deixado à escolha do codec (é importante ao processar dados brutos e não codificados) se não fosse um recurso: muitos players processam informações do espaço de cores de maneira muito específica, para que, para a maioria dos usuários, o vídeo seja exibido com distorções de cores (em principalmente verde).
Para preservar as cores da maioria dos players, é necessário codificar diferentes vídeos H264 em diferentes espaços:
- para SD (largura <1280) - BT.601
- para HD (largura> = 1280) - BT.709
Há um excelente
estudo a partir de 2012. sobre este assunto. Infelizmente, a situação com esses erros está mudando muito lentamente e, embora alguns dos resultados do teste desse artigo não sejam mais relevantes, esses recursos ainda precisam ser levados em consideração. Há uma chance de você assistir ao vídeo com as cores erradas o tempo todo - e acontece que essa não foi uma decisão do diretor.
O problema é conhecido pelos decodificadores H264; outros formatos podem não ter esse problema.
Taxa de quadros
Se sua fonte não é um fluxo de jogos ou vídeos de ação, faz sentido limitar a taxa de quadros superior a 25 a 30 quadros - quanto menos houver, mais dados restam para descrever um único quadro. É melhor diminuir esse valor por um fator - para que o salto do quadro seja uniforme; caso contrário, o vídeo poderá sofrer uma desaceleração.
Existe uma taxa de quadros variável. Trabalhar com VFR é inconveniente por dois motivos: em primeiro lugar, fornece picos de taxa de bits em áreas de alta frequência que esvaziam instantaneamente o buffer; segundo, a VFR complica a preparação do plano de conversão, forçando o uso de parâmetros Q (escrevi sobre eles no primeiro artigo).
Tamanho Gop
Grupos de imagens são blocos nos quais algumas imagens podem se referir aos dados de outras. Um aumento no tamanho do GOP melhora o desempenho do codec em troca de um aumento nos requisitos de memória. Valores maiores são especialmente eficazes para arquivos com o mesmo tipo de movimentos cíclicos (você entende o que quero dizer). Além disso, com valores grandes, pode haver problemas ao rebobinar o vídeo, porque mais dados precisarão ser restaurados.
O nome do parâmetro, bem como as unidades de medida, podem diferir de codec para codec - consulte a documentação.
Fatias
Para acelerar a decodificação (e codificação), o vídeo pode ser dividido em partes de menor resolução. A ideia é que processar quatro vídeos com uma resolução de, por exemplo, 1280x720 seja mais fácil que um, mas 2560x1440. Faz sentido em resoluções superiores a FHD. Quanto mais partes, menor a eficiência do codec. Além disso, o uso dessa separação simplifica o processamento multithread.
Pixels anamórficos
Os pixels retangulares aparecem quando a proporção e a largura e a altura dos pixels diferem - DVDs widescreen, em que o vídeo 16: 9 tem uma resolução de 704 × 480 (3: 2 com IVA analógico e correção do vento). A reprodução desses vídeos não causará problemas; no entanto, ao codificar, é necessário levar em consideração a resolução e a proporção, caso contrário, é fácil converter anamórficos em pixels quadrados padrão com perda de eficiência (até ~ 35%!), Ou até mesmo obter algo achatado horizontalmente.
Controle de taxa de bits
Existem três modos principais de codecs associados à taxa de bits:
- taxa de bits constante, CBR, quando a qualidade cai proporcionalmente à complexidade da cena;
- qualidade constante, const Q VBR, quando a taxa de bits aumenta proporcionalmente à complexidade da cena;
- taxa de bits e qualidade limitadas - VBR clássico.
É importante notar que a maioria dos codificadores (incluindo ffmpeg) não define os codecs no modo CBR ao definir uma taxa de bits - os arquivos são criados pelo VBR, com restrições nem sempre definidas na documentação (o modo CBR é ativado, geralmente definindo a mesma minrate e maxrate).
Para reprodução on-line (e para streaming), o VBR restrito é bem adequado. fornece melhor qualidade que o CBR e permite que você encaixe o fluxo no canal da Internet.
A escolha de maxrate / minrate depende do canal do cliente; é melhor não fazer um spread de mais de 20%.
Codificação multi-passe
É difícil prever a distribuição de dados em um arquivo no modo VBR, os codecs precisam adivinhar o que nem sempre acontece. No modo de passagem múltipla, o codec primeiro mapeia a taxa de bits necessária e depois codifica. Dessa maneira, a qualidade do vídeo em cenas complexas e dinâmicas é aprimorada (
exemplo: preste atenção ao número de elementos “moiré” e ao número de transições entre cenas). Como na primeira passagem, o codec analisa apenas o arquivo de origem, ao contrário da crença popular, o processamento nesse modo requer não mais que o dobro do tempo, mas apenas 10 a 15%.
-tune
Para vários tipos de material de origem, foram preparadas várias predefinições que ajustam alguns parâmetros básicos de codificação - como desbloquear níveis de filtro, parâmetros de otimização psico-visual. O uso dessas predefinições melhora a percepção do vídeo e funciona bem se você souber o tipo de fonte com antecedência ou se tiver um conjunto estruturado de vídeos (no caso de processamento em massa).
Predefinições:
- filme - para filmes e tudo com uma estrutura de quadro complexa. Este é definitivamente um filme;
- animação - para vídeos com grandes áreas sólidas. Ou seja, é melhor codificar com a predefinição de animação, e isso é filme, apesar do fato de que a animação;
- imagem fixa - para vídeos em que quase não há movimento; boa otimização para essas músicas no formato mp4, onde a capa do álbum é o fundo inteiro do vídeo (alguém, diga a eles que nem o flac pode pesar 300 MB por 10 minutos!);
- grão - para codificar fontes "barulhentas", como câmeras de vigilância;
- psnr / ssim - para avaliar a eficácia dos demais parâmetros do codec;
- fastdecode - perfil principal forçado para dispositivos fracos;
- zerolatência - como o nome indica, para streaming de baixa latência.
Formato de pixel
O formato e a taxa de bits afetam fortemente como os arquivos são compactados e descompactados, de que forma a qualidade é perdida. Os principais parâmetros que o formato de pixel descreve são:
- uma maneira de decompor cores em componentes - YUV, RGB;
- parâmetros de subamostragem de cores (oh, como é mais familiar a subamostragem! chroma) quando alguns componentes de cores são salvos com resolução menor;
- profundidade dos componentes de cores em bits.
Uma escolha consciente do formato de pixel requer uma análise separada, coleção de material e é altamente dependente do tipo de material de origem.
Resumidamente:
- nem todos os codecs (e, principalmente, decodificadores) suportam possíveis formatos;
- trabalhar com alguns formatos é mais exigente em recursos - o Hi10P difere apenas de alto nível nisso;
- trabalhar com formatos subamostrados pode dar um aumento notável na eficiência da compactação, mas é mais difícil controlar a perda de qualidade.
Entrelaçamento
O entrelaçamento foi inventado para dobrar a taxa de quadros percebida a um custo mínimo - a taxa de bits e a resolução são as mesmas, mas a frequência é mais alta. No entanto, com movimentos rápidos, os dentes se tornam visíveis - as linhas do quadro anterior. Você pode se livrar do efeito sem deixar cair os quadros e não reduzir a resolução vertical com os filtros, mas eles reduzirão a clareza. Se o vídeo for reproduzido no navegador, é melhor filtrar o entrelaçamento durante a codificação, como a filtragem em tempo real no cliente não fornecerá os melhores resultados visuais.
Juntando tudo
Exemplo para x264:
ffmpeg -i [] -c:v libx264 -b:v [bitrate]
Obviamente, em um artigo não foi possível cobrir tudo, mas tenho certeza de que esse material será suficiente para melhorar a qualidade de muitos vídeos.
Leia a documentação e experimente.
Materiais:
ffmpeg.org/ffmpeg-all.htmlen.wikipedia.org/wiki/H.264/MPEG-4_AVC#Profilesen.wikipedia.org/wiki/Chroma_subsamplingen.wikipedia.org/wiki/Color_spaceen.wikipedia.org/wiki/YUVAlém do
exemplo do último artigo, aprendi sobre outra instalação do meu código -
clique . Eu tentei pegar exemplos no artigo desses sites, mas apesar disso:
* Não tenho uma relação direta com os autores dos sites mencionados e não posso compartilhar seus pontos de vista e opiniões. Não posso comentar sobre as decisões sobre quem e como o acesso ao código é concedido.Pronto para responder a perguntas.