Prima pars:
Quid? Codec video est pars programmatis/apparati quod video digitale comprimit et/vel decomprimit.
Quid enim? Quamvis quibusdam limitibus et quoad latitudinem retis et
Quod ad spatium repositionis attinet, mercatus qualitatem video semper altioris postulat. Meministine quomodo in articulo proximo minimum requisitum pro 30 imaginibus per secundum, 24 bitis per pixel, et resolutione 480x240 computavimus? 82,944 Mbps sine compressione obtinuimus. Compressio nunc sola via est ad HD/FullHD/4K ad monitores televisificos et interrete perferendum. Quomodo hoc efficitur? Nunc breviter methodos principales pertractemus.
Versio facta est auxilio EDISON Software.In sumus occupati Et .
Codec contra Continetor
Error communis quem incipientes faciunt est confundere codec video digitale cum receptaculo video digitali. Receptaculum est formatum specificum, involucrum quod metadata video (et fortasse sonum) continet. Video compressum pro sarcina contenti continentis considerari potest.
Typice, extensio fasciculi video genus continentis indicat. Exempli gratia, fasciculus video.mp4 verisimiliter continens est. MPEG-4 Pars XIV, et fasciculus nomine video.mkv probabilissime est Ut de codec et formato continentis omnino certus sis, uti potes aut .
A paulo historia
Antequam progrediamur ad Quid?, in historiam paulum immergamur ut nonnullos ex codecs vetustioribus paulo melius intellegamus.
Video codicem H.261 Anno 1990 apparuit (technice, anno 1988) et ad celeritatem translationis datorum 64 kbps operandum destinatum erat. Iam notiones tales ut subsampling chroma, macroblocks, etc. utebatur. Anno 1995, norma codec video publicata est. H.263, quae usque ad annum 2001 evoluta est.
Prima versio anno MMIII perfecta est. H.264 / AVCEodem anno, TrueMotion codec video gratuitum cum iactura emisit, qui appellatur... VP3Anno MMVIII, Google societatem emit, edens... VP8 eodem anno. Mense Decembri anni 2012, Google emisit VP9...et a circiter tribus partibus mercatus navigatrorum (instrumentis mobilibus inclusis) sustinetur.
AV1 est novus codec video gratuitus et apertus a [nomen deest] elaboratus a [nomen deest] Foedus pro Apertis Instrumentis Communicationis Socialis (AOMedia), quod societates claras ut Google, Mozilla, Microsoft, Amazon, Netflix, AMD, ARM, NVidia, Intel, et Cisco comprehendit. Prima versio codec, versio 0.1.0, die septimo Aprilis anni MMXVI publicata est.
Ortus AV1
Initio anni 2015, Google laborabat in VP10, Xiph (quod a Mozilla possidetur) laborabat in Daala, et Cisco proprium codec video gratuitum creavit, nomine Thor.
tum MPEG LA primum limites annuos nuntiavit pro HEVC (H.265) et pretium octies maius quam pro H.264, sed mox regulas iterum mutaverunt:
nullus finis annuus,
pretium contenti (0,5% reditus) et
Pretium unitatis est circiter decies maius quam H.264.
Foedus pro Apertis Instrumentis Communicationis Socialis creatum est a societatibus ex variis campis: fabricatoribus instrumentorum (Intel, AMD, ARM, Nvidia, Cisco), praebitoribus contentorum (Google, Netflix, Amazon), creatoribus navigatrorum (Google, Mozilla) et aliis.
Societates communem finem habebant: codec video sine regalitatibus. Tum advenit... AV1 cum licentia patentis multo simpliciori. Timotheus B. Terryberry praesentationem praeclaram habuit quae fons notionis AV1 hodiernae eiusque exemplaris licentiae facta est.
Miraberis te scire posse codec AV1 per navigatrum analysare (qui student ad inscriptionem ire possunt).).

Codex universalis
Mechanismos fundamentales subiacentes codeci video universali examinemus. Pleraque horum conceptuum utilia sunt et in codecis hodiernis adhibentur, ut puta... VP9, AV1 и HEVCScito quaeso multas explanationes simpliciores fore. Interdum exempla ex vita reali (ut in casu H.264) ad demonstrandas technologias adhibebuntur.
Gradus 1 - Imaginem dividere
Primum gradum est dividere structuram in plures sectiones, subsectiones, et cetera.

Cur? Multae sunt causae. Cum imaginem dividimus, accuratius motus vectorem praedicere possumus sectionibus minoribus pro partibus mobilibus parvis utendo. Cum autem pro fundo statico, sectiones maiores sufficere possint.
Codecs has sectiones typice in sectiones (vel fragmenta), macroblocos (vel bloccos arboris codicis), et subsectiones multiplices disponunt. Magnitudo maxima harum sectionum variat: HEVC 64x64 specificat, dum AVC 16x16 utitur, et subsectiones tam parvae quam 4x4 esse possunt.
Meministine genera imaginum ex articulo proximo?! Idem ad segmenta applicari potest, ut fragmentum I, segmentum B, macro-fragmentum P, et cetera habere possimus.
Eis qui exercere volunt, videte quomodo imago in partes et subsectiones divisa sit. Ad hoc, ratione uti potestis quae in articulo priori memorata est. (illa quae solvenda est, sed versionem gratuitam probationis habet quae limitationem in primis decem imaginibus habet). Hic sunt partes quae analysantur. VP9:

Gradus II - Praedictio
Cum partes habebimus, praedictiones astrologicas pro eis facere possumus. INTER-praediction transmittendum est vectores motus et reliqua, et ad INTRA-praedicationem transmittitur directionem praedictam et reliqua.
Gradus III - Transformatio
Postquam residuum segmentum (partitio praedicta → partitio actualis) obtinemus, eum transformare possumus ut determinemus quae elementa elementaria (pixels) abici possint, qualitate generali servata. Sunt quaedam transformationes quae accuratum modum agendi praestant.
Quamquam aliae rationes exstant, eas tamen fusius inspiciamus. transformatio cosinus discreta (DCT - a transformatio cosinus discretaMunera principalia DCT:
- Blocos pixelorum in blocos aequales magnitudinis coefficientium frequentiae convertit.
- Vim compactat, redundantiam spatialem tollendam adiuvans.
- Reversibilitatem praebet.
Die secundo Februarii, anno MMXVII, Cintra, RJ, et Bayer, FM commentarium de transformatione simili DCT ad compressionem imaginum, quae tantum quattuordecim impletiones requirebat, ediderunt.
Noli solliciti esse si utilitates cuiusque puncti non intellegis. Nunc verum eorum valorem exemplis quibusdam concretis videamus.
Sumamus tale blocum pixelorum 8x8:

Hoc quadrum in sequentem imaginem 8 per 8 pixelorum redditur:

DCT huic elementorum pixelorum applicamus et elementum coefficientium magnitudinis 8×8 obtinemus:

Et si hunc coefficientium blocum reddamus, imaginem sequentem obtinemus:

Ut videre possumus, haec imaginem originalem non simulat. Vides primum coefficientem ab omnibus aliis significanter differre. Hic primus coefficiens "coefficiens DC" appellatur, qui omnia exempla in indice input repraesentat, quasi valorem medium.
Hoc coefficientium gregem proprietatem interesantem habet: componentes altae frequentiae a humilis frequentiae separat.

In imagine, maxima pars potentiae in frequentiis inferioribus concentratur, ergo imaginem in partes frequentiae suas convertendo et coefficientibus frequentiae altioribus reiiciendo, quantitatem datorum ad imaginem describendam necessariarum reducere potes sine nimia qualitate imaginis detrimento.
Frequentia celeritatem qua signum mutatur indicat.
Conemur applicare scientiam in exemplo probationis acquisitam, imaginem originalem in frequentiam suam (coefficientium gregem) per DCT transformando, deinde nonnullos coefficientes minime importantes reiciendo.
Primo, ad dominium frequentiae convertimus.

Deinde partem (67%) coefficientium, praesertim partem inferiorem dextram, reicimus.

Denique, imaginem ex hoc reiecto coefficientium blocco reconstruimus (memento, eam invertibilem esse oportet) et cum originali comparamus.

Videmus eam imagini originali similem esse, sed multae differentiae ab originali insunt. 67,1875% reiecimus et nihilominus aliquid originali simile obtinuimus. Coefficientes diligentius reiecimus ut imaginem etiam altioris qualitatis obtineremus, sed hoc argumentum est pro alio die.
Quisque coefficiens omnibus pixelis formatur
Magni momenti: Non quisque coefficiens directe ad unum pixelum assignatur, sed est summa ponderata omnium pixelorum. Hoc mirabile graphum ostendit quomodo primus et secundus coefficientes computantur ponderibus singulis indicibus propriis utentes.
Etiam experiri potes DCT visualizare inspiciendo simplicem formationem imaginis in ea fundatam. Exempli gratia, hic est symbolum A formatum utens quolibet pondere coefficientis:
Gradus IV - Quantizatio
Postquam nonnulli coefficientes in gradu priori reiecti sunt, in gradu ultimo (transformatione), formam specialem quantizationis perficimus. Hoc in gradu, informationem amittere licet. Vel, simpliciter, coefficientes quantizabimus ut compressionem efficiamus.
Quomodo seriem coefficientium quantizare potes? Una ex simplicissimis methodis est quantizatio uniformis, ubi seriem sumis, eam per unum valorem (per 10) dividis, et valorem resultantem rotundas.

Num hunc coefficientium gregem invertere possumus? Ita, possumus, multiplicando per eundem valorem quem divisimus.

Haec methodus non est optima quia momentum cuiusque coefficientis non considerat. Matrix quantificatoria loco unius valoris adhiberi posset, et haec matrix proprietatem DCT uti posset quantificando maximam partem partis inferioris dextrae et minoritatem partis superioris sinistrae.
Gradus V - Codificatio Entropiae
Postquam notitias (imaginum segmenta, fragmenta, imagines) quantificavimus, eas adhuc sine damno comprimere possumus. Multae sunt rationes algorithmicae ad notitias comprimendas. Breviter nonnullas earum tractabimus; ad altius intellegendum, librum "Understanding Compression: Data Compression for Modern Developers" legere potes (").
Codificatio pellicularum utens VLC
Fingamus nos habere fluxum characterum: a, e, r и tProbabilitas (inter 0 et 1) quoties unumquodque symbolum in flumine occurrit in hac tabula exhibetur.
| a | e | r | t | |
|---|---|---|---|---|
| Probabilitas | 0,3 | 0,3 | 0,2 | 0,2 |
Codices binarios singulares (praesertim parvos) probabilissimis, maiores autem minus probabilibus assignare possumus.
| a | e | r | t | |
|---|---|---|---|---|
| Probabilitas | 0,3 | 0,3 | 0,2 | 0,2 |
| Codex binarius | 0 | 10 | 110 | 1110 |
Flumen comprimimus, assumentes nos octo biti per symbolum consumere. Sine compressione, viginti quattuor biti per symbolum requirerentur. Si unumquodque symbolum suo codice substituimus, spatium nobis servatur!
Primum gradum est symbolum codificare e, quod est 10, et secundum symbolum est a, quod additur (non mathematice): [10] [0], et denique tertius character t, quod fluxum binarium compressum finalem aequalem reddit [10] [0] [1110] vel 1001110, quae tantum 7 bita requirit (spatium 3,4 vicibus minus quam originale).
Nota bene unumquemque codicem singularem cum praefixo esse debere. adiuvabit te hos numeros invenire. Quamquam haec methodus non caret vitiis suis, sunt tamen codecs video qui hanc methodum compressionis algorithmicae offerunt.
Tam codificator quam decodificator ad tabulam symbolorum cum suis codicibus binariis accessum habere debent. Ergo, tabula etiam in datis inputatis includi debet.
Codificatio arithmetica
Fingamus nos habere fluxum characterum: a, e, r, s и t, et probabilitas eorum in hac tabula exhibetur.
| a | e | r | s | t | |
|---|---|---|---|---|---|
| Probabilitas | 0,3 | 0,3 | 0,15 | 0,05 | 0,2 |
Hac tabula, series construemus quae omnia symbola possibilia, secundum maximum numerum ordinata, continent.

Nunc fluxum trium symbolorum codificemus: manducare.
Primum, primum characterem elige e, quod in subambitu a 0,3 ad 0,6 (excluso) iacet. Hoc subambitum accipimus et iterum dividimus eisdem proportionibus ac antea, sed pro hoc novo ambitu.

Pergamus indicem fluminis nostri facere. manducareNunc secundum symbolum accipimus. a, quae est in novo subambitu a 0,3 ad 0,39, deinde ultimum symbolum nostrum accipimus t et eundem processum iterum repetendo, ultimam subintervallum a 0,354 ad 0,372 obtinemus.

Simpliciter numerum in ultimo subambitu inter 0,354 et 0,372 eligere debemus. Elige 0,36 (sed quilibet alius numerus in hoc subambitu etiam possibilis est). Hoc solo numero fluxum nostrum originalem reconstruere possumus. Ac si lineam intra intervalla duceremus ad fluxum nostrum codificandum.

Operatio inversa (id est, decodificatio) aeque simplex est: cum numero nostro 0,36 et ambitu initiali, eundem processum exsequi possumus. Sed nunc, hoc numero utentes, rivum ab hoc numero encodatum identificamus.
In primo spatio, animadvertimus numerum nostrum segmentum congruere, ergo hoc est primum symbolum nostrum. Nunc hoc subspatium iterum dividimus, eodem processu quo antea usi. Hic videre potes 0,36 symbolo congruere. a, et post repetitionem processus ad ultimum symbolum pervenimus t (formans nostrum fluxum originalem encodatum) manducare).
Et codificator et decodificator tabulam probabilitatum symbolorum habere debent, ergo ea in datis ingressus mitti debet.
Satis elegans, nonne? Quicumque hanc solutionem excogitavit, perquam callidus erat. Nonnullae machinae codec video hanc artem utuntur (vel saltem eam ut optionem offerunt).
Consilium est fluxum bitrum quantificatum sine damno comprimere. Hic articulus fortasse multas res, causas, compromissa, et cetera omittit. Sed si artifex programmatoris es, plura scire debes. Novi codecs conantur uti variis algorithmis codificationis entropicae, ut... ANS.
Gradus VI - Formatum Fluminis Bitari
His omnibus perfectis, nihil restat nisi imagines compressas decomprimere intra gradus peractos. Decodificator de decisionibus a codificatore factis explicite certior fieri debet. Decodificatori omnes informationes necessariae praebendae sunt: profunditate bit, spatio coloris, resolutione, informatione praedictionis (vectores motus, praedictione INTER directionali), profilo, gradu, frequentia imaginum, genere imaginum, numero imaginum, et multis aliis.
Flumen bit superficialiter inspiciemus. H.264Primum nostrum gradum est creare minimam H.264 bitstream (FFmpeg per default omnes optiones codificationis addit, ut... SEI NAL — quid id sit paulo post cognoscemus. Hoc facere possumus utentes nostro proprio repositorio et FFmpeg.
./s/ffmpeg -i /files/i/minimal.png -pix_fmt yuv420p /files/v/minimal_yuv420.h264
Hoc mandatum fluxum bitaridum crudum generabit. H.264 cum imagine singulari, resolutione 64×64, cum spatio colorum YUV420Hoc in casu, imago sequens ut quadrum adhibetur.

Fluxus binarius H.264
Standard AVC (H.264) determinat informationem in macroframis (sensu retiario) missam iri, quae appellantur nal (Hoc est stratum abstractionis retialis). Finis principalis NAL est repraesentationem imaginum "reti amicam" praebere. Haec norma et in televisionibus (per fluxum) et in interrete (per fasciculos) functionem praebere debet.
![]()
Signum synchronizationis adest ad fines elementorum NAL definiendos. Quisque signum synchronizationis valorem continet. 0x00 0x00 0x01, excepto primo, qui aequalis est 0x00 0x00 0x00 0x01. Si incipimus hexdump Pro flumine binari H.264 generato, saltem tria exempla NAL initio fasciculi identificamus.

Ut dictum est, decodificator non solum data imaginis sed etiam video, imaginem, colorem, parametros adhibitos, et alia multa scire debet. Primus octetus cuiusque NAL categoriam et genus eius definit.
| Identificator generis NAL | Description |
|---|---|
| 0 | Typus ignotus |
| 1 | Fragmentum imaginis codificatum sine IDR |
| 2 | Sectio datorum segmentorum codificatorum A |
| 3 | Sectio datorum segmentorum codificatorum B |
| 4 | Sectio datorum segmentorum codificatorum C |
| 5 | Fragmentum IDR imaginis IDR codificatum |
| 6 | Informationes additionales de extensione SEI |
| 7 | Series parametrorum sequentiae SPS |
| 8 | Series parametrorum imaginis PPS |
| 9 | Separator accessus |
| 10 | Finis seriei |
| 11 | Finis fluminis |
| ... | ... |
Typice primum NAL fluxus bitari est SPSHoc genus NAL responsabilis est pro communicandis variabilibus codificationis communibus, ut profilo, gradu, resolutione, et cetera.
Si primum signum synchronizationis omittimus, primum octetum decodificare possumus ut inveniamus quis typus NAL primus sit.
Exempli gratia, primus octetus post signum synchronizationis est 01100111, ubi primum frustum est (0) in agro f estorbiden_zero_bit. Duo partes sequentes (11) nobis agrum narrat nal_ref_idc, quod indicat utrum haec NAL sit campus referentialis necne. Et reliqui quinque biti (00111) nobis agrum narrat genus_unitatis_nalis, in hoc casu est blocus SPS (7) NAL.
Secundus octetus (binarii=01100100, omnis hexagonis traversa=0x64, Dec=100) in SPS NAL est ager `profile_idc` Quod formam a codificatore adhibitam ostendit. Hoc in casu, forma Limitata Alta adhibita est (id est, forma alta sine auxilio segmenti B bidirectionalis).

Si specificationem fluxus bit inspicias H.264 Pro SPS NAL, inveniemus multos valores pro nomine parametri, categoria, et descriptione. Exempli gratia, inspiciamus campos... latitudo_imaginis_in_mbs_minus_1 и altitudo_imaginis_in_unitatibus_mappae_minus_1.
| Nomen parametri | Category | Description |
|---|---|---|
| latitudo_imaginis_in_mbs_minus_1 | 0 | ue(v) |
| altitudo_imaginis_in_unitatibus_mappae_minus_1 | 0 | ue(v) |
Si quasdam operationes mathematicas in valoribus horum agrorum peragimus, resolutionem obtinemus. Repraesentare possumus 1920 x 1080 utens... latitudo_imaginis_in_mbs_minus_1 cum valore 119 ((119 + 1) * macroblock_size = 120 * 16 = 1920). Iterum, ad spatium conservandum, loco codificationis 1920, id cum 119 fecimus.
Si pergemus inspicere pelliculam nostram creatam in forma binaria (exempli gratia: xxd -b -c 11 v/minim_yuv420.h264), deinde ad ultimam NAL, quae est ipsa structura, progredi possumus.

Hic primos valores sex octetorum videmus: 01100101 10001000 10000100 00000000 00100001 11111111Quoniam notum est primum octetum genus NAL indicare, hoc in casu (00101) hoc est fragmentum IDR (5), et deinde ulterius investigare licebit:

Utente informatione specificationis, genus fragmenti interpretari poterit (genus_sectionis) et numerus quadri (numerus_frame) inter alia campis magni momenti.
Ad valores aliquorum agrorum obtinendos (ue(v), me(v), se(v), vel te(v)), fragmentum decodificare debemus utens decodificatore speciali innixo Haec methodus ad valores variabiles encodandos valde efficax est, praesertim cum multi valores impliciti sint.
idest genus_sectionis и numerus_frame Huius video sunt 7 (fragmentum I) et 0 (prima imago).
Fluxus binarius (bitstream) quasi protocollum considerari potest. Si plura de flumine binario discere vis, ad specificationem consulere debes. ITU H.264Ecce diagramma macro monstrans ubi data imaginis sita sunt (YUV in forma compressa).

Aliae etiam viae bitariae explorari possunt, ut puta VP9, H.265 (HEVC) vel etiam novum nostrum optimum fluxum bitrum AV1Suntne omnia similia? Minime, sed cum unum saltem intellexeris, reliqua multo facilius intelleges.
Visne exercere? Flumen bitrum H.264 explora.
Pelliculam unius imaginis generare et MediaInfo ad fluxum bitorum examinandum uti potes. H.264Re vera, nihil te impedit quominus codicem fontem qui fluxum binariam analizat etiam inspicias. H.264 (AVC).
Ad exercitationem, Intel Video Pro Analyzer uti potes (iam dixi programma pretio emptum esse, sed estne versio gratuita cum limite decem imaginum?).
Overview
Nota bene multos codecs modernos eodem exemplo uti quod modo studuimus. Diagramma obstructum codec video inspiciamus. ThorOmnes gradus quos fecimus continet. Totum huius nuntii propositum est saltem tibi meliorem intellectum innovationum et documentorum in hac re praebere.

Antehac computavimus spatium disci 139 GB requiri ad fasciculum video unius horae qualitate 720p et 30 fps conservandum. Methodis in hoc articulo tractatis (praedictione interframe et intraframe, transformatione, quantizatione, codificatione entropica, etc.) utentes, possumus consequi (densitate pixelorum 0,031 bit assumpta) video qualitatis satis satisfactoriae tantum 367,82 MB occupantem, potius quam 139 GB.
Quomodo H.265 compressionem meliorem quam H.264 assequitur?
Nunc cum plura de functione codecorum scimus, facilius est intellegere quomodo novi codeci resolutionem maiorem cum paucioribus fragmentis (bits) praebere possint.
Si compares AVC и HEVC, meminisse utile est fere semper electionem esse inter maiorem onus CPU et rationem compressionis.
HEVC plures optiones pro sectionibus (et subsectionibus) habet quam AVC, plures directiones ad praedictionem internam, emendata codificatio entropiae, et multo plura. Hae omnes emendationes factae H.265 capax comprimendi 50% plus quam H.264.

Prima pars:
Source: www.habr.com




