{"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\/ro\/blog\/news\/kak-rabotaet-videokodek-chast-1-osnovy","title":{"rendered":"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h3>Partea a doua:<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/480430\/\"> Principiile de func\u021bionare ale codec-ului video<\/a><\/noindex><\/h3>\n<p>Orice imagine raster <b>poate fi reprezentat\u0103 sub forma<\/b> unei matrice bidimensionale <b>. C\u00e2nd vine vorba de culori, ideea poate fi extins\u0103, consider\u00e2nd imaginea ca pe o<\/b>matrice tridimensional\u0103 <b>, \u00een care dimensiunile suplimentare sunt utilizate pentru a stoca date despre fiecare dintre culori.<\/b>Dac\u0103 lu\u0103m \u00een considerare culoarea final\u0103 ca o combina\u021bie a a\u0219a-numitelor culori de baz\u0103 (ro\u0219u, verde \u0219i albastru), \u00een matricea noastr\u0103 tridimensional\u0103 definim trei plane: primul pentru culoarea ro\u0219ie, al doilea pentru verde \u0219i ultimul pentru albastru.<\/p>\n<p>Vom numi fiecare punct din aceast\u0103 matrice pixel (element al imaginii). Fiecare pixel con\u021bine informa\u021bii despre intensitatea (de obicei sub form\u0103 de valoare numeric\u0103) fiec\u0103rei culori. De exemplu,<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/481418\/\"><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/ce37dd683a4c3ed434dae1d488646716.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\nun pixel ro\u0219u <b>\u00eenseamn\u0103 c\u0103 are 0 verde, 0 albastru \u0219i maxim ro\u0219u.<\/b> Un pixel de culoare roz <b>poate fi format din combina\u021bia celor trei culori. Folosind o gam\u0103 numeric\u0103 de la 0 la 255, pixelul roz este definit ca<\/b> Ro\u0219u = 255 <b>Verde = 192<\/b>, <b>Albastru = 203<\/b> \u0219i <b>Articolul este publicat cu sprijinul companiei 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 - dezvoltare web\"><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/e5063b9a32248767cb0702e7aa2e7f9e.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br clear=\"right\"><br \/>\nDezvolt\u0103m<\/p>\n<p>aplica\u021bii pentru supravegherea video, streaming video <noindex><a rel=\"nofollow\" href=\"https:\/\/www.edsd.ru\/ru\/portfolio\/tehnologiya\/video\">, de asemenea, ne ocup\u0103m cu<\/a><\/noindex>\u00eenregistrarea video \u00een sala de opera\u021bie <noindex><a rel=\"nofollow\" href=\"https:\/\/www.edsd.ru\/videozapis-v-bolnichnoj-operacionnoj-s-vozmozhnostyu-obsuzhdeniya-na-forume\">Modalit\u0103\u021bi alternative de codare a imaginii color<\/a><\/noindex>.<\/p><\/blockquote>\n<h3>Pentru a reprezenta culorile din care este compus\u0103 imaginea, exist\u0103 \u0219i multe alte modele. De exemplu, se poate utiliza o palet\u0103 indexat\u0103, \u00een care este necesar doar un byte pentru a reprezenta fiecare pixel, \u00een loc de trei, necesare \u00een modelul RGB. \u00centr-un astfel de model se poate folosi o matrice 2D \u00een loc de matricea 3D pentru a reprezenta fiecare culoare. Aceasta economise\u0219te memorie, dar ofer\u0103 o gam\u0103 de culori mai mic\u0103.<\/h3>\n<p>\nRGB<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/573a39c53527b4ec0403f019becf2d22.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>De exemplu, privi\u021bi aceast\u0103 imagine de mai jos. Prima fa\u021b\u0103 este complet colorat\u0103. Celelalte sunt planele ro\u0219ie, verde \u0219i albastr\u0103 (intensitatea culorilor corespunz\u0103toare este ar\u0103tat\u0103 \u00een nuan\u021be de gri).<\/h2>\n<p>De exemplu, privi\u021bi imaginea de mai jos. Fa\u021ba principal\u0103 este complet colorat\u0103. Celelalte sunt suprafe\u021be ro\u0219ie, verde \u0219i albastr\u0103 (intensitatea culorilor corespunz\u0103toare este ar\u0103tat\u0103 \u00een grada\u021bia de gri).<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/cf1f802d4381e062005490f5f9f26911.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nObserv\u0103m c\u0103 nuan\u021bele de ro\u0219u din original vor fi \u00een acelea\u0219i locuri \u00een care se observ\u0103 cele mai luminoase p\u0103r\u021bi ale celui de-al doilea personaj. \u00cen timp ce contribu\u021bia culorii albastre poate fi v\u0103zut\u0103 \u00een principal doar \u00een ochii lui Mario (ultimul personaj) \u0219i \u00een elementele vestimenta\u021biei sale. Observa\u021bi unde cele trei planuri de culoare contribuie cel mai pu\u021bin (cele mai \u00eentunecate p\u0103r\u021bi ale imaginilor) \u2014 acestea sunt must\u0103\u021bile lui Mario.<\/p>\n<p>Pentru a stoca intensitatea fiec\u0103rei culori este necesar un anumit num\u0103r de bi\u021bi \u2014 aceast\u0103 m\u0103rime se nume\u0219te <b>ad\u00e2ncimea culorii<\/b>. S\u0103 presupunem c\u0103 se utilizeaz\u0103 8 bi\u021bi (pe baza valorii de la 0 la 255) pentru un plan de culoare. Atunci avem o profunditate a culorii de 24 de bi\u021bi (8 bi\u021bi * 3 planuri R\/G\/B).<\/p>\n<p>O alt\u0103 proprietate a imaginii este <b>rezolu\u021bia<\/b>, care reprezint\u0103 num\u0103rul de pixeli \u00eentr-o dimensiune. Adesea este denumit\u0103 ca <b>l\u0103\u021bime \u00d7 \u00een\u0103l\u021bime<\/b>, dup\u0103 cum se arat\u0103 mai jos \u00een exemplul de imagine 4 la 4.<br \/>\n<img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/51a4d948e6d44e4058e346fdbaf9d6c2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nO alt\u0103 proprietate cu care ne confrunt\u0103m lucr\u00e2nd cu imagini\/Video este <b>raportul de aspect<\/b>, care descrie rela\u021bia propor\u021bional\u0103 obi\u0219nuit\u0103 \u00eentre l\u0103\u021bimea \u0219i \u00een\u0103l\u021bimea imaginii sau pixelului.<\/p>\n<p>Atunci c\u00e2nd se spune c\u0103 un film sau o imagine are dimensiunea 16 la 9, de obicei se face referire la <b>raportul de aspect al ecranului<\/b> (<b>DAR<\/b> \u2014 de la <i>Display Aspect Ratio<\/i>). Cu toate acestea, pot exista forme diferite pentru pixeli separa\u021bi \u2014 \u00een acest caz se discut\u0103 despre <b>raportul pixelilor<\/b> (<b>PAR<\/b> \u2014 de la <i>Pixel Aspect Ratio<\/i>).<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/1158c6e98247a1a1084440969f9400c6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/a610f0f77bdb245c05799d3de4147302.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote><p>Not\u0103 pentru gospodin\u0103: <b>DVD<\/b> corespunde <b>DAR 4 la 3<\/b><\/p>\n<p>De\u0219i rezolu\u021bia real\u0103 a DVD-urilor este de 704&#215;480, aceasta p\u0103streaz\u0103 totu\u0219i raportul de aspect 4:3, deoarece PAR este de 10:11 (704&#215;10 \/ 480&#215;11).<\/p><\/blockquote>\n<p>\n\u0218i, \u00een final, putem defini <b>video<\/b> ca o succesiune de <b>n<\/b> cadre pe o perioad\u0103 <b>timp<\/b>, care poate fi considerat\u0103 o dimensiune suplimentar\u0103. Iar <b>n<\/b> apoi \u2014 este rata de cadre sau num\u0103rul de cadre pe secund\u0103 (<b>FPS<\/b> \u2014 de la <i>Frames per Second<\/i>).<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/f940932bbd66aa361c7966f8b44ed431.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNum\u0103rul de bi\u021bi pe secund\u0103 necesar pentru a reda video este <b>rata de transfer<\/b> \u2014 <b>bitrate<\/b>.<\/p>\n<blockquote><p>bitrate = l\u0103\u021bime * \u00een\u0103l\u021bime * ad\u00e2ncime bit * cadre pe secund\u0103<\/p><\/blockquote>\n<p>\nDe exemplu, pentru un videoclip cu 30 de cadre pe secund\u0103, 24 de bi\u021bi pe pixel, rezolu\u021bia 480&#215;240 va necesita 82,944,000 bi\u021bi pe secund\u0103 sau 82,944 Mb\/s (30x480x240x24) \u2014 dar aceasta nu presupune utilizarea vreunui metod\u0103 de compresie.<\/p>\n<p>Dac\u0103 rata de transfer <i>este aproape constant\u0103<\/i>, atunci aceasta se nume\u0219te <b>rata de transfer constant\u0103<\/b> (<b>CBR<\/b> \u2014 de la <i>constant bit rate<\/i>). Dar poate varia \u0219i \u00een acest caz se nume\u0219te <b>vitez\u0103 variabil\u0103 de transfer<\/b> (<b>VBR<\/b> \u2014 de la <i>rata variabil\u0103 de bi\u021bi<\/i>).<\/p>\n<p>Acest grafic ilustreaz\u0103 VBR limitat, c\u00e2nd nu sunt consumate prea multe bi\u021bi \u00een cazul unui cadru complet \u00eentunecat.<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/f307dde8da9ef1e017646ebcad0c4062.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIni\u021bial, inginerii au dezvoltat o metod\u0103 de dublare a frecven\u021bei percepute a cadrelor pe un ecran de video f\u0103r\u0103 a folosi l\u0103\u021bime de band\u0103 suplimentar\u0103. Aceast\u0103 metod\u0103 este cunoscut\u0103 ca <b>video interlaced<\/b>; \u00een principal, aceasta trimite jum\u0103tate din ecran \u00een primul \u201ecadru\u201d, iar cealalt\u0103 jum\u0103tate \u00een urm\u0103torul \u201ecadru\u201d.<\/p>\n<p>\u00cen prezent, vizualizarea scenelor se efectueaz\u0103 \u00een principal folosind <b>tehnologia de scanare progresiv\u0103<\/b>. Aceasta este o metod\u0103 de afi\u0219are, stocare sau transfer de imagini \u00een mi\u0219care, \u00een care toate liniile fiec\u0103rui cadru sunt desenate secven\u021bial.<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/434afd828d803ec1e4c87a3827c07dde.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA\u0219adar! Acum \u0219tim cum este reprezentat\u0103 o imagine \u00een format digital, cum sunt structurate culorile sale, c\u00e2\u021bi bi\u021bi pe secund\u0103 consum\u0103m pentru a reda un video, fie c\u0103 viteza de transfer este constant\u0103 (CBR) sau variabil\u0103 (VBR). Cunoa\u0219tem rezolu\u021bia dat\u0103 utiliz\u00e2nd o frecven\u021b\u0103 de cadre specificat\u0103 \u0219i am luat contact cu multe alte termeni, cum ar fi video interlaced, PAR \u0219i alte termeni.<\/p>\n<h2>Eliminarea redundan\u021bei<\/h2>\n<p>\nEste cunoscut faptul c\u0103 un video necompresat nu poate fi utilizat \u00een mod normal. Un video de o or\u0103 cu rezolu\u021bie 720p \u0219i 30 de cadre pe secund\u0103 ar ocupa 278 GB. Ajungem la aceast\u0103 valoare \u00eenmul\u021bind 1280 x 720 x 24 x 30 x 3600 (l\u0103\u021bimea, \u00een\u0103l\u021bimea, bi\u021bi pe pixel, FPS \u0219i timpul \u00een secunde).<\/p>\n<p>Utilizare <b>algoritmi de compresie f\u0103r\u0103 pierderi<\/b>, cum ar fi DEFLATE (folosit \u00een PKZIP, Gzip \u0219i PNG), nu va oferi o reducere suficient\u0103 a l\u0103\u021bimii de band\u0103 necesare. Trebuie s\u0103 c\u0103ut\u0103m alte metode de comprimare a video-ului.<\/p>\n<p>Pentru aceasta, putem folosi caracteristicile viziunii noastre. Noi percepem mai bine luminozitatea dec\u00e2t culorile. Un video este un set de imagini secven\u021biale, repet\u00e2ndu-se \u00een timp. \u00centre cadrele adiacente ale acelea\u0219i scene, diferen\u021bele sunt mici. \u00cen plus, fiecare cadru con\u021bine multe zone ce folosesc aceea\u0219i (sau similar\u0103) culoare.<\/p>\n<h2>Culoare, luminozitate \u0219i ochii no\u0219tri<\/h2>\n<p>\nOchii no\u0219tri sunt mai sensibili la luminozitate dec\u00e2t la culoare. Pute\u021bi verifica acest lucru singuri, privind aceast\u0103 imagine.<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/bf50b7dfd54ebbdb66556bbf5e304090.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Dac\u0103 nu vede\u021bi ce este \u00een jum\u0103tatea st\u00e2ng\u0103 a imaginii, culorile p\u0103tratelor <b>A<\/b> \u0219i <b>B<\/b> \u00cen realitate sunt identice, a\u0219a c\u0103 este \u00een regul\u0103. Creierul nostru ne face s\u0103 acord\u0103m mai mult\u0103 aten\u021bie luminilor \u0219i umbrelor, nu culorilor. Pe partea dreapt\u0103, \u00eentre p\u0103tratele marcate, exist\u0103 o leg\u0103tur\u0103 de aceea\u0219i culoare \u2014 de aceea (adic\u0103, creierul nostru) identific\u0103m cu u\u0219urin\u021b\u0103 c\u0103, de fapt, acolo este aceea\u0219i culoare.<\/p>\n<blockquote><p>S\u0103 analiz\u0103m (simplificat) cum func\u021bioneaz\u0103 ochii no\u0219tri. Ochii sunt un organ complex, format din multe p\u0103r\u021bi. Cu toate acestea, ne intereseaz\u0103 cel mai mult conurile \u0219i bastona\u0219ele. Ochii con\u021bin aproximativ 120 de milioane de bastona\u0219e \u0219i 6 milioane de conuri.<\/p>\n<p>S\u0103 examin\u0103m percep\u021bia culorii \u0219i a luminozit\u0103\u021bii ca func\u021bii separate ale anumitor p\u0103r\u021bi ale ochiului (de fapt, lucrurile sunt pu\u021bin mai complexe, dar vom simplifica). Celulele bastona\u0219e r\u0103spund \u00een principal de luminozitate, \u00een timp ce celulele conurilor sunt responsabile cu culoarea. Conurile sunt clasificate \u00een trei tipuri, \u00een func\u021bie de pigmentul con\u021binut: conuri S (blue), conuri M (verzi) \u0219i conuri L (ro\u0219ii).<\/p>\n<p>Deoarece avem mult mai multe bastona\u0219e (luminozitate) dec\u00e2t conuri (culoare), se poate concluziona c\u0103 suntem mai capabili s\u0103 distingem tranzi\u021biile \u00eentre \u00eentuneric \u0219i lumin\u0103 dec\u00e2t culorile.<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/d344365d45e43b36635ce29baa1132b4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Func\u021biile sensibilit\u0103\u021bii la contrast<\/h2>\n<p>\nCercet\u0103torii din domeniul psihologiei experimentale \u0219i din multe alte domenii au dezvoltat numeroase teorii despre vederea uman\u0103. Una dintre acestea se nume\u0219te <b>func\u021biile sensibilit\u0103\u021bii la contrast<\/b>. Acestea sunt legate de iluminarea spa\u021bial\u0103 \u0219i temporal\u0103. Pe scurt, este vorba despre c\u00e2te modific\u0103ri sunt necesare \u00eenainte ca observatorul s\u0103 le observe. Observa\u021bi c\u0103 termenul \u2018func\u021bie\u2019 este la plural. Aceasta se datoreaz\u0103 faptului c\u0103 putem m\u0103sura func\u021biile sensibilit\u0103\u021bii la contrast nu doar pentru imagini alb-negru, ci \u0219i pentru imagini color. Rezultatele acestor experimente arat\u0103 c\u0103, \u00een cele mai multe cazuri, ochii no\u0219tri sunt mai sensibili la luminozitate dec\u00e2t la culoare.<\/p><\/blockquote>\n<p>Deoarece este cunoscut c\u0103 suntem mai sensibili la luminozitatea imaginii, putem \u00eencerca s\u0103 folosim acest fapt.<\/p>\n<h2>Modelul de culoare<\/h2>\n<p>\nAm discutat pu\u021bin despre cum s\u0103 lucr\u0103m cu imagini colorate folosind schema RGB. Exist\u0103 \u0219i alte modele. Exist\u0103 un model care separ\u0103 luminozitatea de cromaticitate \u0219i este cunoscut sub numele de <b>YCbCr<\/b>. Apropo, exist\u0103 \u0219i alte modele care fac o separare similar\u0103, dar ne vom concentra doar asupra acestuia.<\/p>\n<p>\u00cen acest model de culoare <b>Y<\/b> \u2014 este reprezentarea str\u0103lucirii, iar dou\u0103 canale de culoare sunt folosite: <b>Cb<\/b> (albastru saturat) \u0219i <b>Cr<\/b> (ro\u0219u saturat). YCbCr poate fi ob\u021binut din RGB, la fel cum este posibil \u0219i conversia invers\u0103. Folosind acest model, putem crea imagini colorate complet, a\u0219a cum se vede mai jos:<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/e7458471caf7ef071bb0362e96b44f11.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Conversia \u00eentre YCbCr \u0219i RGB<\/h2>\n<p>\nCineva ar putea contesta: cum este posibil s\u0103 ob\u021bii toate culorile, dac\u0103 verdele nu este folosit?<\/p>\n<p>Pentru a r\u0103spunde la aceast\u0103 \u00eentrebare, vom converti RGB \u00een YCbCr. Vom folosi coeficientele acceptate \u00een standardul <b>BT.601<\/b>, care a fost recomandat de divizia <b>CEI-R<\/b>. Aceast\u0103 divizie define\u0219te standardele pentru video digital. De exemplu: ce este 4K? Ce ar trebui s\u0103 fie rata de cadre, rezolu\u021bia, modelul de culoare?<\/p>\n<p>Mai \u00eent\u00e2i, s\u0103 calcul\u0103m str\u0103lucirea. Vom folosi constantele propuse de CEI \u0219i vom \u00eenlocui valorile 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>Dup\u0103 ce am ob\u021binut str\u0103lucirea, vom separa culoarea albastr\u0103 \u0219i pe cea ro\u0219ie:<\/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>\u0218i putem, de asemenea, s\u0103 convertim \u00eenapoi \u0219i chiar s\u0103 ob\u021binem verdele folosind 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>\u00cen general, ecranele (monitoare, televizoare, ecrane etc.) folosesc doar modelul RGB. Dar acest model poate fi organizat \u00een moduri diferite:<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/8736e59d3a7606494fe6a7718d5b4aa2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Subdistant\u0103 de culoare<\/h2>\n<p>\nCu o imagine reprezentat\u0103 ca o combina\u021bie de str\u0103lucire \u0219i cromaticitate, putem utiliza o sensibilitate mai mare a sistemului vizual uman la str\u0103lucire dec\u00e2t la cromaticitate, dac\u0103 elimin\u0103m selectiv informa\u021bia. Subdrapajul culorii este o metod\u0103 de codare a imaginilor, folosind o rezolu\u021bie mai mic\u0103 pentru cromaticitate dec\u00e2t pentru str\u0103lucire.<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/11b5b602ab1374896df296f787932ace.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>C\u00e2t de permisibil este s\u0103 reduci rezolu\u021bia cromaticit\u0103\u021bii?! Se dovede\u0219te c\u0103 exist\u0103 deja scheme care descriu cum s\u0103 trat\u0103m rezolu\u021bia \u0219i combinarea (Culoarea final\u0103 = Y + Cb + Cr ).<\/p>\n<p>Aceste scheme sunt cunoscute ca <b>sisteme de subdrapare<\/b> \u0219i sunt exprimate sub form\u0103 de o rat\u0103 de 3 la 1 \u2014 <b>a<\/b>:<b>x<\/b>:<b>Stabili\u021bi o parol\u0103 \u0219i p\u0103stra\u021bi-o \u00een siguran\u021b\u0103!<\/b>, care determin\u0103 num\u0103rul de e\u0219antioane de semnale de str\u0103lucire \u0219i de diferen\u021be de culoare.<\/p>\n<p><b>a<\/b> \u2014 e\u0219antion de referin\u021b\u0103 orizontal (de obicei, egal cu 4)<br \/>\n<b>x<\/b> \u2014 num\u0103rul de e\u0219antioane de cromaticitate pe prima linie de pixeli (rezolu\u021bia orizontal\u0103 \u00een raport cu <b>a<\/b>)<br \/>\n<b>Stabili\u021bi o parol\u0103 \u0219i p\u0103stra\u021bi-o \u00een siguran\u021b\u0103!<\/b> \u2014 num\u0103rul de modific\u0103ri ale e\u0219antioanelor de cromaticitate \u00eentre prima \u0219i a doua linie de pixeli.<\/p>\n<blockquote><p>Excep\u021bia o reprezint\u0103 <b>4<\/b>:<b>1<\/b>:<b>0<\/b>, care asigur\u0103 un e\u0219antion de cromaticitate \u00een fiecare bloc de 4 pe 4 de rezolu\u021bie a str\u0103lucirii.<\/p><\/blockquote>\n<p>Scheme generale utilizate \u00een codec-urile moderne:<\/p>\n<ul>\n<li><b>4<\/b>:<b>4<\/b>:<b>4<\/b> (f\u0103r\u0103 subdampling)<\/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 exemplu de compresie<\/h3>\n<p>\nIat\u0103 un fragment unificat al imaginii utiliz\u00e2nd YCbCr 4:2:0. Observa\u021bi c\u0103 utiliz\u0103m doar 12 bi\u021bi pe pixel.<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/67e288b0a46fca88452addaef736f4cd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p><\/blockquote>\n<p>A\u0219a arat\u0103 aceea\u0219i imagine, codificat\u0103 cu principalele tipuri de subdampling. Primul r\u00e2nd este YCbCr final, iar r\u00e2ndul inferior arat\u0103 rezolu\u021bia culorilor. Rezultatele sunt destul de acceptabile, av\u00e2nd \u00een vedere pierderile minime de calitate.<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/fb54b6fcdbbb63cb19d19b89df9f6d85.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAm num\u0103rat 278 GB de spa\u021biu pe disc necesar pentru a stoca un fi\u0219ier video de o or\u0103 cu rezolu\u021bia 720p \u0219i 30 de cadre pe secund\u0103, nu-i a\u0219a? Utiliz\u00e2nd YCbCr 4:2:0, dimensiunea se reduce la jum\u0103tate \u2014 139 GB. Totu\u0219i, este \u00eenc\u0103 departe de un rezultat acceptabil.<\/p>\n<p>Pute\u021bi ob\u021bine singur histograma YCbCr folosind FFmpeg. \u00cen aceast\u0103 imagine, albastrul predomin\u0103 asupra ro\u0219ului, ceea ce este evident \u00een histogram\u0103.<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/6e74cb646cabc77079aea7eaee846fd1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote>\n<h4>Culoare, luminozitate, gam\u0103 de culori \u2014 un videoclip explicativ<\/h4>\n<p>\nEste recomandat s\u0103 viziona\u021bi acest videoclip grozav. Aici se explic\u0103 ce este luminozitatea \u0219i se clarific\u0103 totodat\u0103 aspectele legate de <i>luminozitate<\/i> \u0219i culoare.<\/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=\"Reda\u021bi video\" 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>Tipuri de cadre<\/h2>\n<p>\nS\u0103 mergem mai departe. Vom \u00eencerca s\u0103 elimin\u0103m redundan\u021ba temporal\u0103. Dar mai \u00eent\u00e2i, s\u0103 definim ni\u0219te termeni de baz\u0103. S\u0103 presupunem c\u0103 avem un film cu 30 de cadre pe secund\u0103, iat\u0103 primele sale 4 cadre:<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/103dc714d756d014e1d2c1bfb33751b1.png\" style=\"display:block;margin: 0 auto;\" \/> <img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/fdd7d89b884b2f77fea7c386c0d29fef.png\" style=\"display:block;margin: 0 auto;\" \/> <img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/61746b829025d5abcb7db072a54400c0.png\" style=\"display:block;margin: 0 auto;\" \/> <img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/c65ee526ec4539996f6bb94463d0cf2d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPutem observa multe repet\u0103ri \u00een cadre: de exemplu, fundalul albastru, care r\u0103m\u00e2ne neschimbat de la un cadru la altul. Pentru a rezolva aceast\u0103 problem\u0103, putem clasifica abstract aceste cadre \u00een trei tipuri.<\/p>\n<h3>Cadru I (<b>I<\/b>Intro Frame)<\/h3>\n<p>\nCadru I (cadru de referin\u021b\u0103, cadru cheie, cadru intern) este autonom. Indiferent de ceea ce trebuie vizualizat, cadru I este, \u00een esen\u021b\u0103, o fotografie static\u0103. Primul cadru este de obicei un cadru I, dar vom observa frecvent cadre I \u0219i \u00een r\u00e2ndul cadrelor care nu sunt primele.<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/44f2a7d6154f1a40fdb1174a443a9c3f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Cadru P (<b>P<\/b>Predicted Frame)<\/h3>\n<p>\nCadru P (cadru prezis) beneficiaz\u0103 de faptul c\u0103, aproape \u00eentotdeauna, imaginea curent\u0103 poate fi reprodus\u0103 folosind cadrul anterior. De exemplu, \u00een al doilea cadru, singura modificare este mingea care se mi\u0219c\u0103 \u00eenainte. Putem ob\u021bine cadru 2 simplu prin modificarea u\u0219oar\u0103 a cadru 1, utiliz\u00e2nd doar diferen\u021ba dintre aceste cadre. Pentru a construi cadru 2, ne referim la cadrul 1 care \u00eei precede.<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/1245857fd8406a24da02d0c71beb7b4d.png\" style=\"display:block;margin: 0 auto;\" \/> \u2190 <img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/ab8e8f6020825830c4d03004528af1a4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Cadru B (<b>B<\/b>cadru i-predictive)<\/h3>\n<p>\nCe p\u0103rere ave\u021bi despre linkurile nu doar la cadrele anterioare, ci \u0219i la cele viitoare, pentru a asigura o compresie \u0219i mai bun\u0103?! Aceasta este, \u00een esen\u021b\u0103, B-cadru (cadru bidirec\u021bional).<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/f28d4e02836e9b37f0f21937dd1ba660.png\" style=\"display:block;margin: 0 auto;\" \/> \u2190 <img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/7a6b3a329db155c94a91f58a99874bb9.png\" style=\"display:block;margin: 0 auto;\" \/> \u2192 <img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/09df4bc5a35df89575c7b51349be4340.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Ie\u0219ire intermediar\u0103<\/h2>\n<p>\nAceste tipuri de cadre sunt utilizate pentru a asigura cea mai bun\u0103 compresie. Vom analiza cum se \u00eent\u00e2mpl\u0103 acest lucru \u00een sec\u021biunea urm\u0103toare. \u00centre timp, s\u0103 not\u0103m c\u0103 cel mai \u201ecostisitor\u201d din punct de vedere al memoriei este I-cadrul, P-cadrul cost\u0103 semnificativ mai pu\u021bin, iar cel mai rentabil pentru video este B-cadrul.<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/97b9177ffff302881deb1c86ce416166.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Redundan\u021ba temporal\u0103 (prognozarea inter-cadru)<\/h2>\n<p>\nS\u0103 analiz\u0103m ce op\u021biuni avem pentru minimizarea repet\u0103rilor \u00een timp. Acest tip de redundan\u021b\u0103 va fi rezolvat prin metode de prognozare reciproc\u0103.<\/p>\n<p>S\u0103 \u00eencerc\u0103m s\u0103 cheltuim c\u00e2t mai pu\u021bini bi\u021bi pentru a codifica secven\u021ba de cadre 0 \u0219i 1.<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/f0dc2df33a5297622a77a4ca09b19af8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPutem realiza <b>sc\u0103derea<\/b>, pur \u0219i simplu sc\u0103z\u00e2nd cadru 1 din cadru 0. Ob\u021binem cadru 1, folosind de fapt doar diferen\u021ba dintre acesta \u0219i cadrul anterior, codific\u00e2nd efectiv doar restul ob\u021binut.<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/c14981c3a3a0459a02620805c4a0f2db.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDar ce ar fi dac\u0103 v-a\u0219 spune c\u0103 exist\u0103 o metod\u0103 \u0219i mai bun\u0103, care folose\u0219te \u0219i mai pu\u021bini bi\u021bi?! Mai \u00eent\u00e2i, s\u0103 \u00eemp\u0103r\u021bim cadru 0 \u00eentr-o re\u021bea clar\u0103, alc\u0103tuit\u0103 din blocuri. Apoi, s\u0103 \u00eencerc\u0103m s\u0103 potrivim blocurile din cadru 0 cu cadru 1. Cu alte cuvinte, s\u0103 evalu\u0103m mi\u0219carea dintre cadre.<\/p>\n<blockquote><p> Din Wikipedia \u2014 <b>compensarea mi\u0219c\u0103rii pe blocuri<\/b><\/p>\n<p>Compensarea mi\u0219c\u0103rii pe blocuri \u00eemparte cadrul curent \u00een blocuri non-intersectante, iar vectorul de compensare a mi\u0219c\u0103rii arat\u0103 originea blocurilor (o confuzie frecvent\u0103 este c\u0103 <i>cadrul anterior<\/i> este \u00eemp\u0103r\u021bit \u00een blocuri non-intersectante, iar vectorii de compensare a mi\u0219c\u0103rii arat\u0103 unde se mut\u0103 aceste blocuri. De fapt, este invers \u2014 nu este analizat cadrul anterior, ci cel urm\u0103tor, stabilindu-se nu unde se mut\u0103 blocurile, ci de unde au ap\u0103rut). De obicei, blocurile ini\u021biale se suprapun \u00een cadrul original. Unele algoritme de compresie video construiesc cadrul curent din p\u0103r\u021bi din mai multe cadre anterioare \u0219i nu doar din unul.<\/p><\/blockquote>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/0c34e84b318be2d250bade240fad80ed.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00cen procesul de evaluare, observ\u0103m c\u0103 mingea s-a mutat de la (<b>x<\/b>=0, <b>Stabili\u021bi o parol\u0103 \u0219i p\u0103stra\u021bi-o \u00een siguran\u021b\u0103!<\/b>=25) la (<b>x<\/b>=6, <b>Stabili\u021bi o parol\u0103 \u0219i p\u0103stra\u021bi-o \u00een siguran\u021b\u0103!<\/b>=26), valori <b>x<\/b> \u0219i <b>Stabili\u021bi o parol\u0103 \u0219i p\u0103stra\u021bi-o \u00een siguran\u021b\u0103!<\/b> defini\u021bi vectorul de mi\u0219care. Un alt pas pe care \u00eel putem face pentru a economisi bi\u021bi este s\u0103 codific\u0103m doar diferen\u021ba dintre vectorii de mi\u0219care \u00eentre ultima pozi\u021bie a blocului \u0219i cea prognozat\u0103, astfel \u00eenc\u00e2t vectorul final de mi\u0219care va fi (x=6-0=6, y=26-25=1).<\/p>\n<p>\u00centr-o situa\u021bie real\u0103, aceast\u0103 bil\u0103 ar fi \u00eemp\u0103r\u021bit\u0103 \u00een <b>n<\/b> blocuri, dar esen\u021ba nu se schimb\u0103.<\/p>\n<p>Obiectele din cadru se mi\u0219c\u0103 \u00een trei dimensiuni, deci c\u00e2nd bila se mi\u0219c\u0103, aceasta poate deveni vizual mai mic\u0103 (sau mai mare, dac\u0103 se mi\u0219c\u0103 spre spectator). Este normal s\u0103 nu existe o coresponden\u021b\u0103 perfect\u0103 \u00eentre blocuri. Iat\u0103 o vedere combinat\u0103 a evalu\u0103rii noastre \u0219i a imaginii reale.<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/0fb4737e1076221e786fd6a78357422d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDar observ\u0103m c\u0103 atunci c\u00e2nd aplic\u0103m evaluarea mi\u0219c\u0103rii, datele pentru codare sunt vizibil mai pu\u021bine dec\u00e2t atunci c\u00e2nd folosim o metod\u0103 mai simpl\u0103 de calculare a diferen\u021bei \u00eentre cadre.<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/319507ad7197b7693efff11dcd7e4df4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Cum va ar\u0103ta compensarea real\u0103 a mi\u0219c\u0103rii<\/h2>\n<p>\nAceast\u0103 metod\u0103 se aplic\u0103 tuturor blocurilor simultan. De multe ori, bila noastr\u0103 ipotetic\u0103 \u00een mi\u0219care va fi \u00eemp\u0103r\u021bit\u0103 \u00een mai multe blocuri.<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/978b5612dbd164d2865ccdec4474fdb4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPute\u021bi experimenta aceste concepte utiliz\u00e2nd <noindex><a rel=\"nofollow\" href=\"https:\/\/jupyter.org\/\">Jupyter<\/a><\/noindex>.<\/p>\n<p>Pentru a vedea vectorii de mi\u0219care, pute\u021bi crea un video cu o prognoz\u0103 extern\u0103 folosind <noindex><a rel=\"nofollow\" href=\"https:\/\/www.ffmpeg.org\/\">ffmpeg<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/056d6dfd2c18baaabc70655edfe3d609.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDe asemenea, se poate utiliza <noindex><a rel=\"nofollow\" href=\"https:\/\/software.intel.com\/en-us\/video-pro-analyzer\">Intel Video Pro Analyzer<\/a><\/noindex> (este pl\u0103tit, dar exist\u0103 o versiune demo gratuit\u0103, care este limitat\u0103 doar la primele zece cadre).<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/5e28ccc6e6101b8d613f94d326a685f2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Redundan\u021ba spa\u021bial\u0103 (prognoza intern\u0103)<\/h2>\n<p>\nDac\u0103 analiz\u0103m fiecare cadru din video, vom descoperi numeroase zone interconectate.<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/24bff6d64704cf0c8e1010832ea8f6ea.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nS\u0103 trecem prin acest exemplu. Aceast\u0103 scen\u0103 const\u0103 \u00een principal din culori albastre \u0219i albe.<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/12edf221c61e064674ad363db9f3342c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAcesta este cadru I. Nu putem lua cadrele anterioare pentru prognozare, dar putem s\u0103-l comprim\u0103m. S\u0103 codific\u0103m selec\u021bia blocului ro\u0219u. Dac\u0103 ne uit\u0103m la vecinii s\u0103i, observ\u0103m c\u0103 \u00een jurul s\u0103u exist\u0103 unele tendin\u021be de culoare.<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/b67b3fba3d1792db81d0f1cb52c7c29b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPresupunem c\u0103 \u00een cadru culorile se r\u0103sp\u00e2ndesc vertical. Asta \u00eenseamn\u0103 c\u0103 culorile pixelilor necunoscu\u021bi vor con\u021bine valorile vecinilor s\u0103i.<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/6fe8f6ed7ebc66940fca27b8cd2c5915.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAceast\u0103 prognoz\u0103 poate fi, de asemenea, gre\u0219it\u0103. De aceea, este necesar s\u0103 aplic\u0103m aceast\u0103 metod\u0103 (prognoza intern\u0103) \u0219i apoi s\u0103 sc\u0103dem valorile reale. Aceasta ne va oferi un bloc rezidual, ceea ce va duce la o matrice mult mai compact\u0103 \u00een compara\u021bie cu originalul.<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/52fd77c96aa8445af12fca468c72c844.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDac\u0103 dori\u021bi s\u0103 exersa\u021bi cu predic\u021biile interne, pute\u021bi crea un videoclip cu macroblocuri \u0219i predic\u021biile lor folosind ffmpeg. Pentru a \u00een\u021belege semnifica\u021bia fiec\u0103rei culori a blocului, va trebui s\u0103 consulta\u021bi documenta\u021bia ffmpeg.<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/0399473c538a550f9317fd59c347a565.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSau pute\u021bi folosi Intel Video Pro Analyzer (a\u0219a cum am men\u021bionat mai sus, \u00een versiunea de prob\u0103 gratuit\u0103 exist\u0103 o limitare la primele 10 cadre, dar este suficient pentru \u00eenceput).<\/p>\n<p><img decoding=\"async\" alt=\"Cum func\u021bioneaz\u0103 un codec video. Partea 1. No\u021biuni de baz\u0103\" src=\"\/wp-content\/uploads\/2019\/12\/abcdf1eb4b7dbdcf2a7a64154f3052ba.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Partea a doua:<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/480430\/\"> Principiile de func\u021bionare ale codec-ului video<\/a><\/noindex><\/h3>\n<p>Sursa: <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.4 - 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\/ro\/blog\/news\/kak-rabotaet-videokodek-chast-1-osnovy\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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\udd47Cum func\u021bioneaz\u0103 codec-ul video. Partea 1. No\u021biuni de baz\u0103 | ProHoster","description":"Partea a doua: Principiile de func\u021bionare ale codec-ului video Orice imagine raster poate fi reprezentat\u0103 sub form\u0103 de.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/news\/kak-rabotaet-videokodek-chast-1-osnovy","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/54312","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=54312"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/54312\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=54312"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=54312"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=54312"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}