{"id":54312,"date":"2019-12-23T00:00:00","date_gmt":"2019-12-22T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/kak-rabotaet-videokodek-chast-1-osnovy"},"modified":"2020-02-18T14:02:18","modified_gmt":"2020-02-18T11:02:18","slug":"kak-rabotaet-videokodek-chast-1-osnovy","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/news\/kak-rabotaet-videokodek-chast-1-osnovy","title":{"rendered":"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h3>segunda parte:<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/480430\/\"> Princ\u00edpios de funcionamento do codec de v\u00eddeo<\/a><\/noindex><\/h3>\n<p>Qualquer imagem rasterizada <b>pode ser representada como<\/b> uma matriz bidimensional <b>. Quando falamos sobre cores, a ideia pode ser desenvolvida considerando a imagem como uma<\/b>matriz tridimensional <b>, onde dimens\u00f5es adicionais s\u00e3o utilizadas para armazenar dados sobre cada uma das cores.<\/b>Se considerarmos a cor final como uma combina\u00e7\u00e3o dos chamados cores prim\u00e1rias (vermelho, verde e azul), em nossa matriz tridimensional definimos tr\u00eas planos: o primeiro para a cor vermelha, o segundo para a verde e o \u00faltimo para a azul.<\/p>\n<p>Chamaremos cada ponto dessa matriz de pixel (elemento da imagem). Cada pixel cont\u00e9m informa\u00e7\u00f5es sobre a intensidade (geralmente em forma de um valor num\u00e9rico) de cada cor. Por exemplo,<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/481418\/\"><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/ce37dd683a4c3ed434dae1d488646716.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\num pixel vermelho <b>significa que ele tem 0 de verde, 0 de azul e o m\u00e1ximo de vermelho.<\/b> Um pixel rosa <b>pode ser formado atrav\u00e9s da combina\u00e7\u00e3o das tr\u00eas cores. Usando uma faixa num\u00e9rica de 0 a 255, um pixel rosa \u00e9 definido como<\/b> Vermelho = 255 <b>Verde = 192<\/b>, <b>Azul = 203<\/b> e <b>Este artigo foi publicado com o apoio da empresa EDISON.<\/b>.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.edsd.ru\/\" title=\"EDISON Software - desenvolvimento web\"><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/e5063b9a32248767cb0702e7aa2e7f9e.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br clear=\"right\"><br \/>\nDesenvolvemos<\/p>\n<p>aplicativos para vigil\u00e2ncia, v\u00eddeo sob demanda <noindex><a rel=\"nofollow\" href=\"https:\/\/www.edsd.ru\/ru\/portfolio\/tehnologiya\/video\">grava\u00e7\u00e3o de v\u00eddeo na sala de cirurgia<\/a><\/noindex>, al\u00e9m de nos dedicarmos <noindex><a rel=\"nofollow\" href=\"https:\/\/www.edsd.ru\/videozapis-v-bolnichnoj-operacionnoj-s-vozmozhnostyu-obsuzhdeniya-na-forume\">Maneiras alternativas de codifica\u00e7\u00e3o de imagens coloridas<\/a><\/noindex>.<\/p><\/blockquote>\n<h3>Para representar as cores que comp\u00f5em a imagem, h\u00e1 v\u00e1rias outras modelos. Por exemplo, \u00e9 poss\u00edvel usar uma paleta indexada, onde apenas um byte \u00e9 necess\u00e1rio para representar cada pixel, ao inv\u00e9s de tr\u00eas exigidos pela modelo RGB. Neste modelo, uma matriz 2D pode ser usada no lugar da matriz 3D para representar cada cor. Isso economiza mem\u00f3ria, mas oferece uma gama de cores menor.<\/h3>\n<p>\nRGB<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/573a39c53527b4ec0403f019becf2d22.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Por exemplo, veja esta imagem abaixo. O primeiro rosto \u00e9 totalmente colorido. Os outros s\u00e3o os planos vermelho, verde e azul (intensidade das cores correspondentes mostrada em tons de cinza).<\/h2>\n<p>Nota-se que os matizes de vermelho no original estar\u00e3o nos mesmos lugares onde as partes mais brilhantes do segundo rosto s\u00e3o observadas. Enquanto a contribui\u00e7\u00e3o da cor azul pode ser vista principalmente apenas nos olhos de Mario (o \u00faltimo rosto) e nos elementos de suas roupas. Observe onde todos os tr\u00eas planos de cores contribuem menos (as partes mais escuras das imagens) \u2014 isso est\u00e1 nos bigodes de Mario.<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/cf1f802d4381e062005490f5f9f26911.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPodemos ver que os tons de vermelho no original estar\u00e3o nos mesmos locais onde s\u00e3o observadas as partes mais brilhantes do segundo rosto. Enquanto a contribui\u00e7\u00e3o da cor azul pode ser vista principalmente apenas nos olhos de Mario (o \u00faltimo rosto) e em elementos de suas roupas. Note onde todas as tr\u00eas superf\u00edcies de cor t\u00eam a menor contribui\u00e7\u00e3o (as partes mais escuras das imagens) \u2014 isso est\u00e1 nos bigodes de Mario.<\/p>\n<p>Para armazenar a intensidade de cada cor, \u00e9 necess\u00e1rio um determinado n\u00famero de bits \u2014 essa quantidade \u00e9 chamada de <b>profundidade de bits<\/b>. Suponha que sejam utilizados 8 bits (considerando valores de 0 a 255) para um plano de cor. Ent\u00e3o, temos uma profundidade de cor de 24 bits (8 bits * 3 planos R\/G\/B).<\/p>\n<p>Outra propriedade da imagem \u00e9 <b>resolu\u00e7\u00e3o<\/b>, que representa o n\u00famero de pixels em uma dimens\u00e3o. Frequentemente \u00e9 indicado como <b>largura \u00d7 altura<\/b>, como mostrado na imagem de exemplo 4 por 4.<br \/>\n<img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/51a4d948e6d44e4058e346fdbaf9d6c2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMais uma propriedade que lidamos ao trabalhar com imagens\/v\u00eddeos \u00e9 <b>a propor\u00e7\u00e3o<\/b>, descrevendo a rela\u00e7\u00e3o proporcional comum entre a largura e a altura da imagem ou do pixel.<\/p>\n<p>Quando se diz que um filme ou imagem possui um tamanho de 16 por 9, geralmente se refere \u00e0 <b>propor\u00e7\u00e3o de exibi\u00e7\u00e3o<\/b> (<b>DAR<\/b> \u2014 da <i>Display Aspect Ratio<\/i>). No entanto, \u00e0s vezes podem haver diferentes formas de pixels individuais \u2014 nesse caso, fala-se sobre <b>a propor\u00e7\u00e3o de pixels<\/b> (<b>PAR<\/b> \u2014 da <i>Pixel Aspect Ratio<\/i>).<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/1158c6e98247a1a1084440969f9400c6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/a610f0f77bdb245c05799d3de4147302.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote><p>Dica para as donas de casa: <b>DVD<\/b> -n\u00f3, e o outro \u2014 <b>DAR 4 por 3<\/b><\/p>\n<p>Embora a resolu\u00e7\u00e3o real do DVD seja 704\u00d7480, ela mant\u00e9m a propor\u00e7\u00e3o de aspecto 4:3, uma vez que o PAR \u00e9 10:11 (704\u00d710 \/ 480\u00d711).<\/p><\/blockquote>\n<p>\nE, finalmente, podemos definir <b>v\u00eddeo<\/b> como uma sequ\u00eancia de <b>n<\/b> quadros ao longo de um <b>per\u00edodo de tempo<\/b>, que pode ser considerado uma dimens\u00e3o adicional. E <b>n<\/b> ent\u00e3o \u2014 \u00e9 a taxa de quadros ou o n\u00famero de quadros por segundo (<b>FPS<\/b> \u2014 da <i>Frames per Second<\/i>).<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/f940932bbd66aa361c7966f8b44ed431.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nO n\u00famero de bits por segundo necess\u00e1rio para exibir o v\u00eddeo \u00e9 sua <b>taxa de transfer\u00eancia<\/b> \u2014 <b>bitrate<\/b>.<\/p>\n<blockquote><p>bitrate = largura * altura * profundidade de bits * quadros por segundo<\/p><\/blockquote>\n<p>\nPor exemplo, para v\u00eddeo a 30 quadros por segundo, com 24 bits por pixel, uma resolu\u00e7\u00e3o de 480\u00d7240 exigir\u00e1 82.944.000 bits por segundo ou 82.944 Mbit\/s (30x480x240x24) \u2014 mas isso \u00e9 sem utilizar qualquer um dos m\u00e9todos de compress\u00e3o.<\/p>\n<p>Se a taxa de transfer\u00eancia <i>for quase constante<\/i>, ela \u00e9 chamada de <b>taxa de transfer\u00eancia constante<\/b> (<b>CBR<\/b> \u2014 da <i>constant bit rate<\/i>). Mas tamb\u00e9m pode variar, nesse caso \u00e9 chamada de <b>taxa de transfer\u00eancia vari\u00e1vel<\/b> (<b>VBR<\/b> \u2014 da <i>variable bit rate<\/i>).<\/p>\n<p>Este gr\u00e1fico demonstra um VBR limitado, onde n\u00e3o s\u00e3o utilizados muitos bits em um quadro totalmente escuro.<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/f307dde8da9ef1e017646ebcad0c4062.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nInicialmente, os engenheiros desenvolveram um m\u00e9todo para dobrar a frequ\u00eancia percebida dos quadros do v\u00eddeo sem usar largura de banda adicional. Esse m\u00e9todo \u00e9 conhecido como <b>v\u00eddeo entrela\u00e7ado<\/b>; essencialmente, ele envia metade da tela no primeiro \"quadro\", e a outra metade no pr\u00f3ximo \"quadro\".<\/p>\n<p>Atualmente, a visualiza\u00e7\u00e3o de cenas ocorre principalmente usando <b>tecnologia de varredura progressiva<\/b>. \u00c9 uma forma de exibir, armazenar ou transmitir imagens em movimento, onde todas as linhas de cada quadro s\u00e3o desenhadas sequencialmente.<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/434afd828d803ec1e4c87a3827c07dde.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBem! Agora sabemos como uma imagem \u00e9 apresentada digitalmente, como suas cores s\u00e3o compostas, quantos bits por segundo gastamos para mostrar um v\u00eddeo, se a taxa de transmiss\u00e3o \u00e9 constante (CBR) ou vari\u00e1vel (VBR). Conhecemos a resolu\u00e7\u00e3o estabelecida com uma taxa de quadros determinada e familiarizamos-nos com muitos outros termos, como v\u00eddeo entrela\u00e7ado, PAR e alguns outros.<\/p>\n<h2>Remo\u00e7\u00e3o de redund\u00e2ncia<\/h2>\n<p>\n\u00c9 sabido que v\u00eddeos sem compress\u00e3o n\u00e3o podem ser usados normalmente. Um v\u00eddeo de uma hora com resolu\u00e7\u00e3o 720p e taxa de 30 quadros por segundo ocuparia 278 GB. Chegamos a esse valor multiplicando 1280 x 720 x 24 x 30 x 3600 (largura, altura, bits por pixel, FPS e tempo em segundos).<\/p>\n<p>Uso <b>algoritmos de compress\u00e3o sem perdas<\/b>, como DEFLATE (usado em PKZIP, Gzip e PNG), n\u00e3o proporcionar\u00e1 uma redu\u00e7\u00e3o de largura de banda suficiente. Precisamos procurar outras formas de compress\u00e3o de v\u00eddeo.<\/p>\n<p>Para isso, podemos usar caracter\u00edsticas da nossa vis\u00e3o. N\u00f3s percebemos melhor a luminosidade do que as cores. O v\u00eddeo \u00e9 um conjunto de imagens sequenciais que se repetem com o tempo. Entre quadros adjacentes de uma cena, as diferen\u00e7as s\u00e3o pequenas. Al\u00e9m disso, cada quadro cont\u00e9m muitas \u00e1reas que usam a mesma (ou similar) cor.<\/p>\n<h2>Cor, luminosidade e nossos olhos<\/h2>\n<p>\nNossos olhos s\u00e3o mais sens\u00edveis \u00e0 luminosidade do que \u00e0 cor. Voc\u00ea pode verificar isso pessoalmente, observando esta imagem.<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/bf50b7dfd54ebbdb66556bbf5e304090.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Se voc\u00ea n\u00e3o v\u00ea que na metade esquerda da imagem as cores dos quadrados <b>A<\/b> e <b>B<\/b> s\u00e3o na verdade iguais, isso \u00e9 normal. Nosso c\u00e9rebro nos faz prestar mais aten\u00e7\u00e3o \u00e0s sombras e \u00e0 luz do que \u00e0 cor. \u00c0 direita, entre os quadrados destacados, h\u00e1 um espa\u00e7o da mesma cor \u2014 por isso n\u00f3s (ou seja, nosso c\u00e9rebro) facilmente determinamos que, na verdade, ali est\u00e1 a mesma cor.<\/p>\n<blockquote><p>Vamos analisar (simplificadamente) como funcionam nossos olhos. O olho \u00e9 um \u00f3rg\u00e3o complexo, composto por muitas partes. No entanto, o que mais nos interessa s\u00e3o os cones e bastonetes. O olho cont\u00e9m cerca de 120 milh\u00f5es de bastonetes e 6 milh\u00f5es de cones.<\/p>\n<p>Vamos considerar a percep\u00e7\u00e3o de cor e luminosidade como fun\u00e7\u00f5es separadas de determinadas partes do olho (na verdade, a situa\u00e7\u00e3o \u00e9 um pouco mais complexa, mas vamos simplificar). As c\u00e9lulas do tipo bastonete s\u00e3o principalmente respons\u00e1veis pela luminosidade, enquanto as c\u00e9lulas do tipo cone respondem pela cor. Os cones s\u00e3o divididos em tr\u00eas tipos, dependendo do pigmento contido: cones S (azul), cones M (verde) e cones L (vermelho).<\/p>\n<p>Como temos muito mais bastonetes (luminosidade) do que cones (cor), podemos concluir que somos mais capazes de distinguir transi\u00e7\u00f5es entre escurid\u00e3o e luz do que entre cores.<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/d344365d45e43b36635ce29baa1132b4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Fun\u00e7\u00f5es de sensibilidade ao contraste<\/h2>\n<p>\nPesquisadores de psicologia experimental e de muitas outras \u00e1reas desenvolveram diversas teorias sobre a vis\u00e3o humana. E uma delas se chama <b>fun\u00e7\u00f5es de sensibilidade ao contraste<\/b>. Elas est\u00e3o relacionadas \u00e0 ilumina\u00e7\u00e3o espacial e temporal. Em resumo, trata-se de quantas mudan\u00e7as s\u00e3o necess\u00e1rias antes que o observador as perceba. Observe que a palavra \"fun\u00e7\u00e3o\" est\u00e1 no plural. Isso se deve ao fato de que podemos medir fun\u00e7\u00f5es de sensibilidade ao contraste n\u00e3o apenas para imagens em preto e branco, mas tamb\u00e9m para imagens coloridas. Os resultados desses experimentos mostram que, na maioria das vezes, nossos olhos s\u00e3o mais sens\u00edveis \u00e0 luminosidade do que \u00e0 cor.<\/p><\/blockquote>\n<p>Sabendo que somos mais sens\u00edveis \u00e0 luminosidade da imagem, podemos tentar utilizar esse fato.<\/p>\n<h2>Modelo de cor<\/h2>\n<p>\nN\u00f3s entendemos um pouco sobre como trabalhar com imagens coloridas usando o esquema RGB. Existem outros modelos. H\u00e1 um modelo que separa a luminosidade da cromaticidade e \u00e9 conhecido como <b>YCbCr<\/b>. A prop\u00f3sito, existem outros modelos que fazem separa\u00e7\u00f5es semelhantes, mas vamos considerar apenas este.<\/p>\n<p>Neste modelo de cor <b>Y<\/b> \u2014 \u00e9 a representa\u00e7\u00e3o da luminosidade, e tamb\u00e9m s\u00e3o utilizados dois canais de cor: <b>Cb<\/b> (azul saturado) e <b>Cr<\/b> (vermelho vibrante). YCbCr pode ser derivado do RGB, assim como a convers\u00e3o inversa \u00e9 poss\u00edvel. Usando este modelo, podemos criar imagens coloridas, como vemos abaixo:<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/e7458471caf7ef071bb0362e96b44f11.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Convers\u00e3o entre YCbCr e RGB<\/h2>\n<p>\nAlgu\u00e9m pode argumentar: como \u00e9 poss\u00edvel obter todas as cores sem o verde?<\/p>\n<p>Para responder a essa pergunta, vamos converter RGB em YCbCr. Usaremos os coeficientes aceitos no padr\u00e3o <b>BT.601<\/b>, que foi recomendado pela divis\u00e3o <b>ITU-R<\/b>. Esta divis\u00e3o define normas para v\u00eddeo digital. Por exemplo: o que \u00e9 4K? Quais devem ser a taxa de quadros, a resolu\u00e7\u00e3o, o modelo de cores?<\/p>\n<p>Primeiro, vamos calcular o brilho. Usaremos as constantes sugeridas pela ITU e substituiremos os valores RGB.<\/p>\n<p><b>Y<\/b> = 0.299<b>R<\/b> + 0.587<b>G<\/b> + 0.114<b>B<\/b> <\/p>\n<p>Depois de obtermos o brilho, separaremos as cores azul e vermelha:<\/p>\n<p><b>Cb<\/b> = 0.564(<b>B<\/b> \u2014 <b>Y<\/b>)<\/p>\n<p><b>Cr<\/b> = 0.713(<b>R<\/b> \u2014 <b>Y<\/b>) <\/p>\n<p>E tamb\u00e9m podemos converter de volta e at\u00e9 obter o verde usando YCbCr:<\/p>\n<p><b>R<\/b> = <b>Y<\/b> + 1.402<b>Cr<\/b><\/p>\n<p><b>B<\/b> = <b>Y<\/b> + 1.772<b>Cb<\/b><\/p>\n<p><b>G<\/b> = <b>Y<\/b> \u2014 0.344<b>Cb<\/b> \u2014 0.714<b>Cr<\/b><\/p>\n<p>Geralmente, os displays (monitores, televisores, telas etc.) utilizam apenas o modelo RGB. Mas esse modelo pode ser organizado de v\u00e1rias maneiras:<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/8736e59d3a7606494fe6a7718d5b4aa2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Subamostragem de cor<\/h2>\n<p>\nCom a imagem representada como uma combina\u00e7\u00e3o de brilho e cromaticidade, podemos usar a maior sensibilidade do sistema visual humano ao brilho do que \u00e0 cromaticidade, ao eliminar seletivamente informa\u00e7\u00f5es. A subsampla\u00e7agem de cores \u00e9 um m\u00e9todo de codifica\u00e7\u00e3o de imagens que usa uma resolu\u00e7\u00e3o menor para cromaticidade do que para brilho.<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/11b5b602ab1374896df296f787932ace.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Qu\u00e3o aceit\u00e1vel \u00e9 reduzir a resolu\u00e7\u00e3o da cromaticidade?! Aparentemente, j\u00e1 existem alguns esquemas que descrevem como manipular a resolu\u00e7\u00e3o e a fus\u00e3o (Cor final = Y + Cb + Cr).<\/p>\n<p>Esses esquemas s\u00e3o conhecidos como <b>sistemas de subsampla\u00e7agem<\/b> e s\u00e3o expressos como uma raz\u00e3o de 3 a <b>a<\/b>:<b>x<\/b>:<b>y<\/b>, que define o n\u00famero de amostras dos sinais de brilho e diferen\u00e7a de cor.<\/p>\n<p><b>a<\/b> \u2014 amostra horizontal padr\u00e3o (normalmente igual a 4)<br \/>\n<b>x<\/b> \u2014 n\u00famero de amostras de cromaticidade na primeira linha de pixels (resolu\u00e7\u00e3o horizontal em rela\u00e7\u00e3o a <b>a<\/b>)<br \/>\n<b>y<\/b> \u2014 n\u00famero de mudan\u00e7as nas amostras de cromaticidade entre a primeira e a segunda linha de pixels.<\/p>\n<blockquote><p>A exce\u00e7\u00e3o \u00e9 <b>4<\/b>:<b>1<\/b>:<b>0<\/b>, que fornece uma amostra de cromaticidade em cada bloco de resolu\u00e7\u00e3o de brilho 4 por 4.<\/p><\/blockquote>\n<p>Esquemas comuns usados em codecs modernos:<\/p>\n<ul>\n<li><b>4<\/b>:<b>4<\/b>:<b>4<\/b> (sem subsampla\u00e7agem)<\/li>\n<li><b>4<\/b>:<b>2<\/b>:<b>2<\/b><\/li>\n<li><b>4<\/b>:<b>1<\/b>:<b>1<\/b><\/li>\n<li><b>4<\/b>:<b>2<\/b>:<b>0<\/b><\/li>\n<li><b>4<\/b>:<b>1<\/b>:<b>0<\/b><\/li>\n<li><b>3<\/b>:<b>1<\/b>:<b>1<\/b><\/li>\n<\/ul>\n<blockquote>\n<h3>YCbCr 4:2:0 \u2014 exemplo de fus\u00e3o<\/h3>\n<p>\nEste \u00e9 um fragmento de imagem combinado usando YCbCr 4:2:0. Observe que estamos utilizando apenas 12 bits por pixel.<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/67e288b0a46fca88452addaef736f4cd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p><\/blockquote>\n<p>Aqui est\u00e1 a mesma imagem, codificada com os principais tipos de subamostragem de cores. A primeira linha \u00e9 o YCbCr final, e a linha inferior mostra a resolu\u00e7\u00e3o da cor. Resultados bastante dignos, considerando as pequenas perdas de qualidade.<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/fb54b6fcdbbb63cb19d19b89df9f6d85.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLembre-se de que calculamos 278 GB de espa\u00e7o em disco para armazenar uma hora de v\u00eddeo com resolu\u00e7\u00e3o 720p a 30 quadros por segundo? Usando YCbCr 4:2:0, esse tamanho ser\u00e1 reduzido pela metade \u2014 139 GB. Ainda est\u00e1 longe de um resultado aceit\u00e1vel.<\/p>\n<p>Voc\u00ea pode gerar um histograma YCbCr usando o FFmpeg. Nesta imagem, o azul prevalece sobre o vermelho, como pode ser visto no pr\u00f3prio histograma.<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/6e74cb646cabc77079aea7eaee846fd1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote>\n<h4>Satura\u00e7\u00e3o, brilho, paleta de cores \u2014 v\u00eddeo de revis\u00e3o<\/h4>\n<p>\nRecomendamos assistir a este v\u00eddeo incr\u00edvel. Ele explica o que \u00e9 brilho e esclarece v\u00e1rios pontos sobre <i>o brilho e a cor.<\/i> Tipos de quadros<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"Ymt47wXUDEU\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/Ymt47wXUDEU\/hqdefault.jpg\" alt=\"Por que no hosting comum a administra\u00e7\u00e3o do PrestaShop \u00e9 lenta, e no seu n\u00e3o \u00e9?\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p><\/blockquote>\n<h2>Vamos em frente. Tentaremos eliminar a redund\u00e2ncia temporal. Mas primeiro, vamos definir alguma terminologia b\u00e1sica. Suponha que temos um filme com 30 quadros por segundo, aqui est\u00e3o seus primeiros 4 quadros:<\/h2>\n<p>\nPodemos ver muitas repeti\u00e7\u00f5es nos quadros: por exemplo, o fundo azul, que n\u00e3o muda de um quadro para outro. Para resolver esse problema, podemos classificar abstratamente esses quadros em tr\u00eas tipos.<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/103dc714d756d014e1d2c1bfb33751b1.png\" style=\"display:block;margin: 0 auto;\" \/> <img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/fdd7d89b884b2f77fea7c386c0d29fef.png\" style=\"display:block;margin: 0 auto;\" \/> <img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/61746b829025d5abcb7db072a54400c0.png\" style=\"display:block;margin: 0 auto;\" \/> <img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/c65ee526ec4539996f6bb94463d0cf2d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nQuadro I (<\/p>\n<h3>ntro Frame)<b>I<\/b>O Quadro I (quadro-chave) \u00e9 aut\u00f4nomo. Independentemente do que precisa ser visualizado, o Quadro I \u00e9, na ess\u00eancia, uma foto est\u00e1tica. O primeiro quadro \u00e9 geralmente um Quadro I, no entanto, veremos regularmente Quadros I entre quadros que n\u00e3o s\u00e3o os primeiros.<\/h3>\n<p>\nQuadro P (<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/44f2a7d6154f1a40fdb1174a443a9c3f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>redicted Frame)<b>P<\/b>O Quadro P (quadro predito) tira proveito do fato de que quase sempre a imagem atual pode ser reproduzida usando o quadro anterior. Por exemplo, no segundo quadro, a \u00fanica mudan\u00e7a \u00e9 a bola se movendo para frente. Podemos obter o quadro 2 apenas modificando um pouco o quadro 1, usando apenas a diferen\u00e7a entre esses quadros. Para construir o quadro 2, referimos ao quadro anterior, que \u00e9 o quadro 1.<\/h3>\n<p>\n\u2190<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/1245857fd8406a24da02d0c71beb7b4d.png\" style=\"display:block;margin: 0 auto;\" \/> Quadro B ( <img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/ab8e8f6020825830c4d03004528af1a4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>i-predictive Frame)<b>B<\/b>Bi-predictive Frame)<\/h3>\n<p>\nE quanto \u00e0s refer\u00eancias n\u00e3o apenas a quadros passados, mas tamb\u00e9m a futuros, para garantir uma compress\u00e3o ainda melhor?! Isso \u00e9, basicamente, o que chamamos de quadro B (quadro bidirecional).<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/f28d4e02836e9b37f0f21937dd1ba660.png\" style=\"display:block;margin: 0 auto;\" \/> Quadro B ( <img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/7a6b3a329db155c94a91f58a99874bb9.png\" style=\"display:block;margin: 0 auto;\" \/> \u2192 <img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/09df4bc5a35df89575c7b51349be4340.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Resultado Intermedi\u00e1rio<\/h2>\n<p>\nEsses tipos de quadros s\u00e3o usados para garantir a melhor compress\u00e3o. Vamos discutir como isso acontece na pr\u00f3xima se\u00e7\u00e3o. Mas, por enquanto, notamos que o tipo mais \"caro\" em termos de mem\u00f3ria \u00e9 o quadro I, enquanto o quadro P custa significativamente menos e o quadro B \u00e9 a op\u00e7\u00e3o mais econ\u00f4mica para v\u00eddeos.<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/97b9177ffff302881deb1c86ce416166.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Redund\u00e2ncia Temporal (Previs\u00e3o Inter-quadro)<\/h2>\n<p>\nVamos explorar quais op\u00e7\u00f5es temos para minimizar repeti\u00e7\u00f5es ao longo do tempo. Esse tipo de redund\u00e2ncia ser\u00e1 abordado atrav\u00e9s de m\u00e9todos de previs\u00e3o m\u00fatua.<\/p>\n<p>O objetivo \u00e9 gastar o menor n\u00famero de bits poss\u00edvel para codificar a sequ\u00eancia de quadros 0 e 1.<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/f0dc2df33a5297622a77a4ca09b19af8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPodemos realizar <b>subtra\u00e7\u00e3o<\/b>, simplesmente subtraindo o quadro 1 do quadro 0. Obtemos o quadro 1, mas usamos apenas a diferen\u00e7a entre ele e o quadro anterior, efetivamente codificando apenas o restante resultante.<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/c14981c3a3a0459a02620805c4a0f2db.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMas e se eu te disser que existe um m\u00e9todo ainda melhor que usa menos bits?! Primeiro, vamos dividir o quadro 0 em uma grade clara composta por blocos. Ent\u00e3o, tentaremos corresponder os blocos do quadro 0 com os do quadro 1. Em outras palavras, vamos avaliar o movimento entre os quadros.<\/p>\n<blockquote><p> Da Wikip\u00e9dia \u2014 <b>compensa\u00e7\u00e3o de movimento em blocos<\/b><\/p>\n<p>A compensa\u00e7\u00e3o de movimento em blocos divide o quadro atual em blocos n\u00e3o sobrepostos e o vetor de compensa\u00e7\u00e3o de movimento indica a origem dos blocos (um equ\u00edvoco comum \u00e9 que <i>o quadro anterior<\/i> \u00e9 dividido em blocos n\u00e3o sobrepostos, e os vetores de compensa\u00e7\u00e3o de movimento dizem para onde esses blocos v\u00e3o. Na verdade, \u00e9 o contr\u00e1rio \u2014 n\u00e3o se analisa o quadro anterior, mas o seguinte, e n\u00e3o se verifica para onde os blocos se movem, mas de onde eles vieram). Normalmente, os blocos de origem se sobrep\u00f5em no quadro original. Alguns algoritmos de compress\u00e3o de v\u00eddeo constroem o quadro atual a partir de partes de v\u00e1rios quadros transmitidos anteriormente.<\/p><\/blockquote>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/0c34e84b318be2d250bade240fad80ed.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDurante a avalia\u00e7\u00e3o, vemos que a bola se moveu de (<b>x<\/b>=0, <b>y<\/b>=25) para (<b>x<\/b>=6, <b>y<\/b>=26), os valores <b>x<\/b> e <b>y<\/b> definem a dire\u00e7\u00e3o do movimento. Outro passo que podemos dar para economizar bits \u00e9 codificar apenas a diferen\u00e7a nos vetores de movimento entre a \u00faltima posi\u00e7\u00e3o do bloco e a prevista, assim o vetor de movimento final ser\u00e1 (x=6-0=6, y=26-25=1).<\/p>\n<p>Na situa\u00e7\u00e3o real, esta bolinha seria dividida em <b>n<\/b> blocos, mas a ess\u00eancia do assunto n\u00e3o muda.<\/p>\n<p>Os objetos na cena se movem em tr\u00eas dimens\u00f5es, portanto, ao mover a bolinha, ela pode parecer visualmente menor (ou maior, se se mover em dire\u00e7\u00e3o ao espectador). \u00c9 normal que n\u00e3o haja uma correspond\u00eancia perfeita entre os blocos. Aqui est\u00e1 uma vis\u00e3o combinada da nossa estimativa e da imagem real.<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/0fb4737e1076221e786fd6a78357422d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMas vemos que quando aplicamos a estimativa de movimento, os dados para codifica\u00e7\u00e3o s\u00e3o significativamente menores do que ao usar um m\u00e9todo mais simples de calcular a diferen\u00e7a entre os quadros.<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/319507ad7197b7693efff11dcd7e4df4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Como seria a verdadeira compensa\u00e7\u00e3o de movimento<\/h2>\n<p>\nEsta t\u00e9cnica \u00e9 aplicada a todos os blocos de uma vez. Muitas vezes, nossa bolinha em movimento hipot\u00e9tica ser\u00e1 dividida imediatamente em v\u00e1rios blocos.<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/978b5612dbd164d2865ccdec4474fdb4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVoc\u00ea pode explorar esses conceitos por conta pr\u00f3pria, usando <noindex><a rel=\"nofollow\" href=\"https:\/\/jupyter.org\/\">Jupyter<\/a><\/noindex>.<\/p>\n<p>Para ver os vetores de movimento, pode-se criar um v\u00eddeo com previs\u00e3o externa usando <noindex><a rel=\"nofollow\" href=\"https:\/\/www.ffmpeg.org\/\">ffmpeg<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/056d6dfd2c18baaabc70655edfe3d609.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAinda \u00e9 poss\u00edvel utilizar <noindex><a rel=\"nofollow\" href=\"https:\/\/software.intel.com\/en-us\/video-pro-analyzer\">Intel Video Pro Analyzer<\/a><\/noindex> (\u00e9 pago, mas h\u00e1 uma vers\u00e3o de teste gratuita, limitada apenas aos primeiros dez quadros).<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/5e28ccc6e6101b8d613f94d326a685f2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Redund\u00e2ncia espacial (previs\u00e3o interna)<\/h2>\n<p>\nSe analisarmos cada quadro no v\u00eddeo, encontraremos v\u00e1rias \u00e1reas interconectadas.<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/24bff6d64704cf0c8e1010832ea8f6ea.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVamos utilizar este exemplo. Esta cena consiste principalmente de cores azul e branca.<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/12edf221c61e064674ad363db9f3342c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEste \u00e9 o quadro I. N\u00e3o podemos usar os quadros anteriores para previs\u00e3o, mas conseguimos compact\u00e1-lo. Vamos codificar a sele\u00e7\u00e3o do bloco vermelho. Se olharmos para os seus vizinhos, notamos que h\u00e1 algumas tend\u00eancias de cor ao seu redor.<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/b67b3fba3d1792db81d0f1cb52c7c29b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVamos supor que as cores no quadro se espalhem verticalmente. O que significa que as cores dos pixels desconhecidos conter\u00e3o valores de seus vizinhos.<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/6fe8f6ed7ebc66940fca27b8cd2c5915.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTal previs\u00e3o pode estar errada. \u00c9 exatamente por isso que este m\u00e9todo deve ser aplicado (previs\u00e3o interna), e ent\u00e3o os valores reais devem ser subtra\u00eddos. Isso nos dar\u00e1 um bloco residual, que resultar\u00e1 em uma matriz muito mais compacta em compara\u00e7\u00e3o com a original.<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/52fd77c96aa8445af12fca468c72c844.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSe voc\u00ea quiser praticar com previs\u00f5es internas, pode criar um v\u00eddeo com macrobloques e suas previs\u00f5es usando ffmpeg. Para entender o significado de cada cor do bloco, ser\u00e1 necess\u00e1rio consultar a documenta\u00e7\u00e3o do ffmpeg.<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/0399473c538a550f9317fd59c347a565.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOu voc\u00ea pode usar o Intel Video Pro Analyzer (como mencionei acima, na vers\u00e3o de teste gratuita h\u00e1 um limite para os primeiros 10 quadros, mas isso ser\u00e1 suficiente para come\u00e7ar).<\/p>\n<p><img decoding=\"async\" alt=\"Como funciona um codec de v\u00eddeo. Parte 1. Fundamentos\" src=\"\/wp-content\/uploads\/2019\/12\/abcdf1eb4b7dbdcf2a7a64154f3052ba.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>segunda parte:<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/480430\/\"> Princ\u00edpios de funcionamento do codec de v\u00eddeo<\/a><\/noindex><\/h3>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/481418\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u044c: \u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u0434\u0435\u043a\u0430 \u041b\u044e\u0431\u043e\u0435 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u044b. \u041a\u043e\u0433\u0434\u0430 \u0440\u0435\u0447\u044c \u0437\u0430\u0445\u043e\u0434\u0438\u0442 \u043e \u0446\u0432\u0435\u0442\u0430\u0445, \u0438\u0434\u0435\u044e \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0442\u044c, \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u0432\u0438\u0434\u0435 \u0442\u0440\u0435\u0445\u043c\u0435\u0440\u043d\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0438\u0437 \u0446\u0432\u0435\u0442\u043e\u0432. \u0415\u0441\u043b\u0438 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0446\u0432\u0435\u0442 \u043a\u0430\u043a \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044e \u0442.\u043d. \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0446\u0432\u0435\u0442\u043e\u0432 (\u043a\u0440\u0430\u0441\u043d\u043e\u0433\u043e, \u0437\u0435\u043b\u0435\u043d\u043e\u0433\u043e \u0438 \u0441\u0438\u043d\u0435\u0433\u043e), \u0432 \u043d\u0430\u0448\u0435\u0439 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-54312","post","type-post","status-publish","format-standard","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u044c: \u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u0434\u0435\u043a\u0430 \u041b\u044e\u0431\u043e\u0435 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pt\/blog\/news\/kak-rabotaet-videokodek-chast-1-osnovy\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u0434\u0435\u043a. \u0427\u0430\u0441\u0442\u044c 1. \u041e\u0441\u043d\u043e\u0432\u044b | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u044c: \u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u0434\u0435\u043a\u0430 \u041b\u044e\u0431\u043e\u0435 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pt\/blog\/news\/kak-rabotaet-videokodek-chast-1-osnovy\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-12-22T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:02:18+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Como funciona o codec de v\u00eddeo. Parte 1. Fundamentos | ProHoster","description":"Parte dois: Princ\u00edpios de funcionamento do codec de v\u00eddeo. Qualquer imagem rasterizada pode ser representada em forma.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/news\/kak-rabotaet-videokodek-chast-1-osnovy","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u0434\u0435\u043a. \u0427\u0430\u0441\u0442\u044c 1. \u041e\u0441\u043d\u043e\u0432\u044b | ProHoster","og:description":"\u0412\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u044c: \u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u0434\u0435\u043a\u0430 \u041b\u044e\u0431\u043e\u0435 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435.","og:url":"https:\/\/prohoster.info\/pt\/blog\/news\/kak-rabotaet-videokodek-chast-1-osnovy","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-12-22T21:00:00+00:00","article:modified_time":"2020-02-18T11:02:18+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"54312","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 10:53:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 15:31:31","updated":"2026-01-24 10:53:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/54312","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=54312"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/54312\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=54312"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=54312"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=54312"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}