Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Առաջին մասը ` Տեսանյութերի և պատկերների հետ աշխատելու հիմունքները

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Ինչ? Տեսակոդեկը ծրագրային/ապարատային մի մաս է, որը սեղմում և/կամ ապակոմպրեսում է թվային տեսանյութը:

Ինչի համար: Չնայած որոշակի սահմանափակումների՝ թե՛ թողունակության, թե՛
իսկ պահեստային տարածքի առումով շուկան պահանջում է ավելի ու ավելի բարձր որակի տեսանյութ։ Հիշո՞ւմ եք, թե ինչպես նախորդ գրառման մեջ հաշվարկեցինք վայրկյանում 30 կադրի, մեկ պիքսելի համար 24 բիթ, 480x240 լուծաչափով պահանջվող նվազագույնը։ Ստացվել է 82,944 Մբ/վ՝ առանց սեղմման։ Սեղմումը ներկայումս HD/FullHD/4K-ը հեռուստացույցների էկրաններին և ինտերնետին փոխանցելու միակ միջոցն է։ Ինչպե՞ս է դա ձեռք բերվում։ Հիմա եկեք համառոտ անդրադառնանք հիմնական մեթոդներին։

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Թարգմանությունը կատարվել է EDISON Software-ի աջակցությամբ։

Մենք զբաղվում ենք տեսահսկման համակարգերի ինտեգրումԻսկ Մենք մշակում ենք միկրոտոմոգրաֆ.

Կոդեկն ընդդեմ կոնտեյների

Սկսնակների կողմից թույլ տրված տարածված սխալներից մեկը թվային տեսակոդեկը թվային տեսակոնտեյի հետ շփոթելն է։ Կոնտեյները որոշակի ձևաչափ ունի։ Տեսանյութի (և հնարավոր է՝ աուդիո) մետատվյալներ պարունակող փաթեթավորում։ Սեղմված տեսանյութը կարելի է դիտարկել որպես կոնտեյների օգտակար բեռ։

Սովորաբար, տեսանյութի ֆայլի ընդլայնումը ցույց է տալիս դրա կոնտեյների տեսակը։ Օրինակ, video.mp4 ֆայլը, ամենայն հավանականությամբ, կոնտեյներ է։ MPEG-4 Մաս 14, և video.mkv անունով ֆայլը, ամենայն հավանականությամբ, Մատրյոշկա. Կոդեկի և կոնտեյների ձևաչափի վերաբերյալ լիովին վստահ լինելու համար կարող եք օգտագործել FFmpeg կամ MediaInfo- ն.

Մի քիչ պատմություն

Մինչև անցնելը Ինչպես?, եկեք խորանանք պատմության մեջ՝ ավելի հին կոդեկներից մի քանիսն ավելի լավ հասկանալու համար։

Տեսանյութի կոդեկ H.261 հայտնվեց 1990 թվականին (տեխնիկապես՝ 1988 թվականին) և նախագծված էր 64 կբիթ/վրկ տվյալների փոխանցման արագությամբ աշխատելու համար։ Այն արդեն օգտագործում էր այնպիսի գաղափարներ, ինչպիսիք են քրոմային ենթանմուշառումը, մակրոբլոկները և այլն: 1995 թվականին հրապարակվեց տեսակոդեկի ստանդարտը: H.263, որը զարգացավ մինչև 2001 թվականը։

Առաջին տարբերակը ավարտվել է 2003 թվականին։ H.264 / AVCՆույն թվականին TrueMotion-ը թողարկեց իր անվճար, կորստային տեսակոդեկը, որը կոչվում է VP3. 2008 թվականին Google-ը գնեց ընկերությունը՝ թողարկելով VP8 նույն տարում։ 2012 թվականի դեկտեմբերին Google-ը թողարկեց VP9, և այն աջակցվում է բրաուզերների շուկայի մոտ ¾-ի կողմից (ներառյալ բջջային սարքերը):

AV1 նոր անվճար և բաց կոդով վիդեո կոդեկ է, որը մշակվել է Բաց լրատվամիջոցների դաշինք (AOMmedia), որը ներառում է այնպիսի հայտնի ընկերություններ, ինչպիսիք են Google-ը, Mozilla-ն, Microsoft-ը, Amazon-ը, Netflix-ը, AMD-ն, ARM-ը, NVidia-ն, Intel-ը և Cisco-ն։ Կոդեկի 0.1.0 առաջին տարբերակը հրապարակվել է 7 թվականի ապրիլի 2016-ին։

AV1-ի ծնունդը

2015 թվականի սկզբին Google-ը աշխատում էր VP10, Xiph-ը (որը պատկանում է Mozilla-ին) աշխատում էր դրա վրա Դաալա, և Cisco-ն ստեղծեց իր սեփական անվճար տեսակոդեկը, որը կոչվում է Thor.

Ապա MPEG-LA առաջին անգամ հայտարարվեցին տարեկան սահմանաչափերը HEVC (H.265) և վճարը 8 անգամ ավելի բարձր էր, քան H.264-ի համար, բայց շուտով նրանք կրկին փոխեցին կանոնները։

տարեկան սահմանափակում չկա,
բովանդակության վճար (եկամտի 0,5%) և
Մեկ միավորի արժեքը մոտավորապես 10 անգամ ավելի բարձր է, քան H.264-ինը։

Բաց լրատվամիջոցների դաշինք ստեղծվել է տարբեր ոլորտների ընկերությունների կողմից՝ սարքավորումների արտադրողներ (Intel, AMD, ARM, Nvidia, Cisco), բովանդակության մատակարարներ (Google, Netflix, Amazon), զննարկիչների ստեղծողներ (Google, Mozilla) և այլն։

Ընկերություններն ունեին ընդհանուր նպատակ՝ հոնորարից զերծ տեսակոդեկ։ Ապա այն հայտնվում է AV1 շատ ավելի պարզ արտոնագրային լիցենզիայով։ Թիմոթի Բ. Թերիբերին ներկայացրեց ապշեցուցիչ ներկայացում, որը դարձավ AV1-ի ներկայիս հայեցակարգի և դրա լիցենզավորման մոդելի աղբյուրը։

Դուք կզարմանաք, երբ իմանաք, որ կարող եք վերլուծել AV1 կոդեկը զննարկչի միջոցով (ցանկացողները կարող են այցելել aomanalyzer.org).

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Համընդհանուր կոդեկ

Եկեք նայենք համընդհանուր տեսակոդեկի հիմքում ընկած հիմնական մեխանիզմներին: Այս հասկացությունների մեծ մասը օգտակար է և օգտագործվում է ժամանակակից կոդեկներում, ինչպիսիք են՝ VP9, AV1 и HEVCԶգուշացե՛ք, որ բացատրված շատ բաներ պարզեցված կլինեն։ Երբեմն իրական օրինակներ կօգտագործվեն (ինչպես H.264-ի դեպքում)՝ տեխնոլոգիաները ցուցադրելու համար։

Քայլ 1 - Պատկերի բաժանում

Առաջին քայլը շրջանակը մի քանի բաժինների, ենթաբաժինների և այլնի բաժանելն է։

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Ինչի՞ համար։ Կան բազմաթիվ պատճառներ։ Պատկերը մասնատելով՝ մենք կարող ենք ավելի ճշգրիտ կանխատեսել շարժման վեկտորը՝ օգտագործելով փոքր հատվածներ փոքր շարժվող մասերի համար։ Մինչդեռ ստատիկ ֆոնի համար կարող եք սահմանափակվել ավելի մեծ հատվածներով։

Սովորաբար, կոդեկները այս բաժինները կազմակերպում են բաժինների (կամ ֆրագմենտների), մակրոբլոկների (կամ կոդավորման ծառի բլոկների) և բազմաթիվ ենթաբաժինների։ Այս բաժինների առավելագույն չափը տարբեր է. HEVC-ը սահմանում է այն 64x64, մինչդեռ AVC-ն օգտագործում է 16x16, իսկ ենթաբաժինները կարող են լինել մինչև 4x4։

Հիշո՞ւմ եք նախորդ հոդվածից շրջանակների տեսակները։ Նույնը կարելի է կիրառել բլոկների համար, այսինքն՝ կարող ենք ունենալ I-բեկոր, B-բլոկ, P-մակրոբլոկ և այլն։

Նրանց համար, ովքեր ցանկանում են պարապել, տեսեք, թե ինչպես է պատկերը բաժանված բաժինների և ենթաբաժինների: Դրա համար կարող եք օգտագործել նախորդ հոդվածում արդեն նշվածը։ Intel Video Pro անալիզատոր (վճարովի է, բայց ունի անվճար փորձաշրջանի տարբերակ, որը սահմանափակում ունի առաջին 10 կադրերի վրա): Ահա վերլուծված հատվածները VP9:

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Քայլ 2 - Կանխատեսում

Երբ բաժիններ ունենանք, կարող ենք աստղագուշակական կանխատեսումներ անել դրանց համար։ Համար INTER-կանխատեսում անհրաժեշտ է փոխանցել շարժման վեկտորներ և մնացածը, իսկ INTRA-կանխատեսման համար այն փոխանցվում է կանխատեսման ուղղություն և մնացածը։

Քայլ 3 - Փոխակերպում

Երբ մենք ունենանք մնացորդային բլոկը (կանխատեսված բաժանում → իրական բաժանում), մենք կարող ենք այն վերափոխել այնպես, որ իմանանք, թե որ պիքսելները կարելի է անտեսել՝ պահպանելով ընդհանուր որակը։ Կան որոշ փոխակերպումներ, որոնք ապահովում են ճշգրիտ վարքագիծը։

Չնայած կան այլ մեթոդներ, եկեք դրանք ավելի մանրամասն քննարկենք։ դիսկրետ կոսինուսային ձևափոխություն (DCT - ից դիսկրետ կոսինուսային ձևափոխություն)։ DCT-ի հիմնական գործառույթները.

  • Փիքսելների բլոկները փոխակերպում է հաճախականության գործակիցների հավասար չափի բլոկների։
  • Խտացնում է հզորությունը՝ օգնելով վերացնել տարածական ավելորդությունը։
  • Ապահովում է շրջելիություն։

2 թվականի փետրվարի 2017 Սինտրա Ռ.Ջ. (Ցինտրա, ՌՋ) և Բայեր Ֆ.Մ. (Bayer FM) հրատարակեց մի հոդված պատկերի սեղմման համար նախատեսված DCT-անման ձևափոխության մասին, որը պահանջում է ընդամենը 14 լրացում։

Մի անհանգստացեք, եթե չեք հասկանում յուրաքանչյուր կետի առավելությունները։ Հիմա եկեք օգտագործենք կոնկրետ օրինակներ՝ դրանց իրական արժեքը ապացուցելու համար։

Եկեք վերցնենք 8x8 պիքսելների բլոկ, այսպիսին՝

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Այս բլոկը վերածվում է հետևյալ 8x8 պիքսելային պատկերի՝

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Մենք կիրառում ենք DCT-ն այս պիքսելների բլոկի վրա և ստանում ենք 8×8 չափի գործակիցների բլոկ։

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Եվ եթե մենք արտապատկերենք այս գործակիցների բլոկը, կստանանք հետևյալ պատկերը՝

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Ինչպես տեսնում եք, սա բնօրինակ պատկերի նման չէ։ Կարող եք տեսնել, որ առաջին գործակիցը շատ տարբերվում է մյուս բոլորից։ Այս առաջին գործակիցը հայտնի է որպես DC գործակից, որը ներկայացնում է մուտքային զանգվածի բոլոր նմուշները, մոտավորապես միջինի պես։

Այս գործակիցների բլոկն ունի հետաքրքիր հատկություն. այն առանձնացնում է բարձր հաճախականության բաղադրիչները ցածր հաճախականության բաղադրիչներից։

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Պատկերում հզորության մեծ մասը կենտրոնացած է ցածր հաճախականությունների վրա, ուստի պատկերը փոխակերպելով իր հաճախականության բաղադրիչների և հրաժարվելով բարձր հաճախականության գործակիցներից, կարող եք նվազեցնել պատկերը նկարագրելու համար անհրաժեշտ տվյալների քանակը՝ առանց պատկերի որակը չափազանց շատ զոհաբերելու։

Հաճախականությունը վերաբերում է ազդանշանի փոփոխության արագությանը։

Փորձենք կիրառել թեստային օրինակում ստացված գիտելիքները՝ DCT-ի միջոցով սկզբնական պատկերը փոխակերպելով իր հաճախականության (գործակիցների բլոկի) և այնուհետև հրաժարվելով որոշ ամենաքիչ կարևոր գործակիցներից։

Սկզբում մենք այն փոխակերպում ենք հաճախականության տիրույթի։

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Հաջորդը մենք մերժում ենք գործակիցների մի մասը (67%), հիմնականում՝ ներքևի աջ մասը։

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Վերջապես, մենք վերակառուցում ենք պատկերը գործակիցների այս անտեսված բլոկից (հիշե՛ք, այն պետք է լինի շրջելի) և համեմատում ենք այն բնօրինակի հետ։

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Մենք տեսնում ենք, որ այն նման է բնօրինակ պատկերին, բայց կան բազմաթիվ տարբերություններ բնօրինակից։ Մենք դեն նետեցինք 67,1875%-ը և միևնույն է ստացանք բնօրինակին նման մի բան։ Կարող էինք ավելի մտածված կերպով դեն նետել գործակիցները՝ ավելի լավ պատկեր ստանալու համար, բայց դա ուրիշ թեմա է։

Յուրաքանչյուր գործակից ձևավորվում է բոլոր պիքսելների օգտագործմամբ։

Կարևոր է. յուրաքանչյուր գործակից ուղղակիորեն չի համապատասխանում մեկ պիքսելի, այլ բոլոր պիքսելների կշռված գումարն է։ Այս զարմանալի գրաֆիկը ցույց է տալիս, թե ինչպես են հաշվարկվում առաջին և երկրորդ գործակիցները՝ օգտագործելով յուրաքանչյուր ինդեքսի համար եզակի կշիռներ։

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Կարող եք նաև փորձել պատկերացնել DCT-ն՝ դիտարկելով դրա վրա հիմնված պարզ պատկերի ձևավորումը։ Օրինակ, ահա A սիմվոլը, որը ձևավորվում է յուրաքանչյուր գործակցի կշռի միջոցով՝

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Քայլ 4 - Քվանտացում

Նախորդ քայլում որոշ գործակիցներ դեն նետելուց հետո, վերջին քայլում (փոխակերպում), մենք կատարում ենք քվանտացման հատուկ ձև։ Այս փուլում ընդունելի է կորցնել տեղեկատվությունը։ Կամ, ավելի պարզ ասած, մենք կքվանտացնենք գործակիցները՝ սեղմում ապահովելու համար։

Ինչպե՞ս կարելի է քվանտացնել գործակիցների բլոկը։ Ամենապարզ մեթոդներից մեկը կլինի միատարր քվանտացումը, որտեղ մենք վերցնում ենք բլոկ, բաժանում այն ​​մեկ արժեքի (10-ի) և կլորացնում արդյունքը։

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Կարո՞ղ ենք այս գործակիցների բլոկը շրջել։ Այո, կարող ենք՝ բազմապատկելով նույն արժեքով, որին բաժանեցինք։

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Այս մոտեցումը լավագույնը չէ, քանի որ այն հաշվի չի առնում յուրաքանչյուր գործակցի կարևորությունը։ Կարելի է օգտագործել քվանտիզատորների մատրից մեկ արժեքի փոխարեն, և այս մատրիցը կարող է օգտագործել DCT-ի հատկությունը՝ քվանտացնելով ներքևի աջ անկյունի մեծամասնությունը և վերին ձախ անկյունի փոքրամասնությունը։

Քայլ 5 - Էնտրոպիայի կոդավորում

Երբ մենք քվանտացնենք տվյալները (պատկերի բլոկներ, կտորներ, կադրեր), մենք դեռ կարող ենք սեղմել դրանք առանց կորստի: Կան տվյալները սեղմելու բազմաթիվ ալգորիթմական եղանակներ: Մենք համառոտ կներկայացնենք դրանցից մի քանիսը, ավելի խորը հասկանալու համար կարող եք կարդալ «Սեղմման ըմբռնումը. Տվյալների սեղմումը ժամանակակից մշակողների համար» գիրքը (Սեղմման հասկացողություն. տվյալների սեղմում ժամանակակից մշակողների համար»).

Տեսանյութերի կոդավորում VLC-ով

Ենթադրենք, որ մենք ունենք նիշերի հոսք՝ a, e, r и t. Այս աղյուսակում ներկայացված է հոսքում յուրաքանչյուր սիմվոլի հաճախականության հավանականությունը (0-ից 1 միջակայքում):

aert
Հավանականություն0,30,30,20,2

Մենք կարող ենք ամենահավանականներին վերագրել եզակի երկուական կոդեր (ցանկալի է՝ փոքր), իսկ ավելի մեծ կոդեր՝ ավելի քիչ հավանականներին։

aert
Հավանականություն0,30,30,20,2
Երկուական կոդ0101101110

Մենք սեղմում ենք հոսքը՝ ենթադրելով, որ յուրաքանչյուր սիմվոլի վրա կծախսենք 8 բիթ։ Առանց սեղմման, յուրաքանչյուր սիմվոլի համար անհրաժեշտ կլինի 24 բիթ։ Եթե յուրաքանչյուր սիմվոլ փոխարինվի իր կոդով, ապա մենք կստանանք խնայողություն։

Առաջին քայլը խորհրդանիշը կոդավորելն է e, որը 10 է, իսկ երկրորդ նշանը՝ a, որը գումարվում է (ոչ մաթեմատիկորեն). [10] [0], և վերջապես՝ երրորդ նիշը t, որը մեր վերջնական սեղմված բիթային հոսքը դարձնում է [10] [0] [1110] կամ 1001110, որը պահանջում է ընդամենը 7 բիթ (3,4 անգամ պակաս տարածք, քան բնօրինակը):

Խնդրում ենք նկատի ունենալ, որ յուրաքանչյուր կոդ պետք է լինի եզակի՝ նախածանցով։ Հաֆմանի ալգորիթմ կօգնի ձեզ գտնել այս թվերը։ Չնայած այս մեթոդը թերություններից զերծ չէ, կան տեսակոդեկներ, որոնք դեռևս առաջարկում են սեղմման այս ալգորիթմական մեթոդը։

Ե՛վ կոդավորիչը, և՛ վերծանիչը պետք է հասանելիություն ունենան իրենց երկուական կոդերով սիմվոլների աղյուսակին։ Հետևաբար, անհրաժեշտ է նաև մուտքային տվյալները աղյուսակում ուղարկել։

Թվաբանական կոդավորում

Ենթադրենք, որ մենք ունենք նիշերի հոսք՝ a, e, r, s и t, և դրանց հավանականությունը ներկայացված է այս աղյուսակում։

aerst
Հավանականություն0,30,30,150,050,2

Այս աղյուսակի միջոցով մենք կկառուցենք միջակայքեր, որոնք կպարունակեն բոլոր հնարավոր նշանները՝ տեսակավորված ըստ ամենամեծ թվի։

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Հիմա եկեք կոդավորենք երեք սիմվոլներից բաղկացած հոսք՝ ուտել.

Նախ ընտրեք առաջին նիշը e, որը գտնվում է 0,3-ից մինչև 0,6 ենթամիջակայքում (բացառությամբ): Մենք վերցնում ենք այս ենթամիջակայքը և կրկին բաժանում ենք այն նույն համամասնություններով, ինչ նախկինում, բայց այս նոր միջակայքի համար։

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Եկեք շարունակենք մեր հոսքի կոդավորումը ուտել. Հիմա վերցնենք երկրորդ խորհրդանիշը a, որը գտնվում է 0,3-ից մինչև 0,39 նոր ենթամիջակայքում, և այնուհետև մենք վերցնում ենք մեր վերջին սիմվոլը t և նույն գործընթացը կրկին կրկնելով՝ ստանում ենք վերջին ենթամիջակայքը 0,354-ից մինչև 0,372:

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Մենք պարզապես պետք է ընտրենք թիվ վերջին ենթամիջակայքից՝ 0,354-ից մինչև 0,372։ Եկեք ընտրենք 0,36 (բայց դուք կարող եք ընտրել ցանկացած այլ թիվ այս ենթամիջակայքում): Միայն այս համարով կարող ենք վերականգնել մեր սկզբնական հոսքը։ Դա այնպիսին է, կարծես մենք գիծ ենք գծում միջակայքերի ներսում՝ մեր հոսքը կոդավորելու համար։

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Հակադարձ գործողությունը (այսինքն՝ վերծանում) նույնքան պարզ է. մեր 0,36 թվի և մեր սկզբնական միջակայքի միջոցով մենք կարող ենք նույն գործընթացը գործարկել։ Բայց հիմա, օգտագործելով այս թիվը, մենք նույնականացնում ենք այս համարով կոդավորված հոսքը։

Առաջին միջակայքում մենք նկատում ենք, որ մեր թիվը համապատասխանում է կտորին, հետևաբար սա մեր առաջին նշանն է։ Հիմա մենք կրկին բաժանում ենք այս ենթամիջակայքը՝ հետևելով նախկինում կատարված նույն գործընթացին։ Այստեղ կարող եք տեսնել, որ 0,36-ը համապատասխանում է նշանին a, և գործընթացը կրկնելուց հետո մենք հասանք վերջին խորհրդանիշին t (ձևավորելով մեր սկզբնական կոդավորված հոսքը ուտել).

Ե՛վ կոդավորիչը, և՛ վերծանիչը պետք է ունենան սիմվոլների հավանականությունների աղյուսակ, ուստի այն պետք է ուղարկվի մուտքային տվյալների մեջ։

Բավականին նրբագեղ է, այնպես չէ՞։ Այս լուծումը մտածողը բավականին խելացի էր։ Որոշ տեսակոդեկներ օգտագործում են այս տեխնիկան (կամ առնվազն առաջարկում են այն որպես լրացուցիչ տարբերակ):

Գաղափարն այն է, որ քվանտացված բիթային հոսքը առանց կորուստների սեղմվի։ Այս հոդվածում, հավանաբար, բազմաթիվ մանրամասներ, պատճառներ, փոխզիջումներ և այլն բացակայում են։ Բայց եթե դուք ծրագրավորող եք, ապա պետք է ավելին իմանաք։ Նոր կոդեկները փորձում են օգտագործել տարբեր էնտրոպիայի կոդավորման ալգորիթմներ, ինչպիսիք են՝ ANS- ը.

Քայլ 6 - Բիթային հոսքի ձևաչափ

Այս ամենն ավարտվելուց հետո մնում է միայն սեղմված կադրերը վերծանել ձեռնարկված քայլերի համատեքստում։ Անհրաժեշտ է հստակորեն տեղեկացնել վերծանողին կոդավորողի կողմից կայացված որոշումների մասին։ Վերծանիչը պետք է ապահովված լինի բոլոր անհրաժեշտ տեղեկություններով՝ բիթային խորություն, գունային տարածություն, լուծաչափ, կանխատեսման տեղեկատվություն (շարժման վեկտորներ, ուղղորդված INTER կանխատեսում), պրոֆիլ, մակարդակ, կադրերի հաճախականություն, կադրերի տեսակ, կադրերի համար և շատ ավելին։

Մենք մակերեսորեն կանդրադառնանք բիթհոսքին։ H.264. Մեր առաջին քայլը նվազագույն H.264 բիթային հոսք ստեղծելն է (FFmpeg-ը լռելյայնորեն ավելացնում է բոլոր կոդավորման տարբերակները, ինչպիսիք են՝ ՍԵԻ ՆԱԼ — մենք մի փոքր ավելի ուշ կիմանանք, թե դա ինչ է)։ Մենք կարող ենք դա անել մեր սեփական պահոցը և FFmpeg-ը օգտագործելով։

./s/ffmpeg -i /files/i/minimal.png -pix_fmt yuv420p /files/v/minimal_yuv420.h264

Այս հրամանը կստեղծի հում բիթային հոսք։ H.264 մեկ կադրով, 64x64 լուծաչափով, գունային տարածությամբ YUV420. Հետևյալ պատկերը օգտագործվում է որպես շրջանակ։

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

H.264 բիթհոսք

Ստանդարտ ՀՎՀ (H.264) նշում է, որ տեղեկատվությունը կուղարկվի մակրոֆրեյմերով (ցանցային իմաստով), որոնք կոչվում են ՆԱԼ (սա ցանցային աբստրակցիայի մի մակարդակ է): NAL-ի հիմնական նպատակն է ապահովել տեսանյութի «ցանցային» ներկայացում։ Այս ստանդարտը պետք է աշխատի հեռուստացույցների վրա (հոսքային), ինտերնետում (փաթեթային):

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

NAL տարրերի սահմանները սահմանելու համար կա համաժամացման նշիչ։ Յուրաքանչյուր համաժամեցման նշիչ պարունակում է արժեք 0x00 0x00 0x01, բացառությամբ առաջինի, որը հավասար է 0x00 0x00 0x00 0x01. Եթե ​​մենք գործարկենք hexdump Ստեղծված H.264 բիթային հոսքի համար մենք ֆայլի սկզբում նույնականացնում ենք առնվազն երեք NAL օրինաչափություն։

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Ինչպես նշվեց, դեկոդերը պետք է իմանա ոչ միայն պատկերի տվյալները, այլև տեսանյութի մանրամասները, կադրի մանրամասները, գույները, օգտագործված պարամետրերը և շատ ավելին։ Յուրաքանչյուր NAL-ի առաջին բայթը սահմանում է դրա կատեգորիան և տեսակը։

NAL տիպի նույնականացուցիչՆկարագրություն
0Անհայտ տեսակ
1Կոդավորված պատկերի հատված առանց IDR-ի
2Կոդավորված տվյալների հատված A
3Կոդավորված տվյալների հատված B
4Կոդավորված տվյալների հատված C
5 IDR պատկերի կոդավորված IDR հատված
6Լրացուցիչ տեղեկություններ SEI ընդլայնման մասին
7SPS հաջորդականության պարամետրերի հավաքածու
8PPS պատկերի պարամետրերի հավաքածու
9Մուտքի բաժանիչ
10Հաջորդականության ավարտ
11Հոսքի վերջը
......

Սովորաբար բիթային հոսքի առաջին NAL-ը հետևյալն է PLC. Այս NAL տեսակը պատասխանատու է կոդավորման տարածված փոփոխականների, ինչպիսիք են պրոֆիլը, մակարդակը, լուծաչափը և այլն, հաղորդակցման համար։

Եթե ​​բաց թողնենք առաջին համաժամեցման նշիչը, կարող ենք վերծանել առաջին բայթը և պարզել, թե NAL տեսակն է առաջինը։

Օրինակ, համաժամեցման նշիչից հետո առաջին բայթը հետևյալն է 01100111, որտեղ առաջին բիթը (0) գտնվում է f դաշտումorbid_zero_bit. Հաջորդ 2 բիթերը (11) մեզ ասում է դաշտը նալ_ռեֆ_իդկ, որը ցույց է տալիս, թե արդյոք այս NAL-ը հղման դաշտ է, թե ոչ։ Եվ մնացած 5 բիթերը (00111) մեզ ասում է դաշտը նալ_միավորի_տեսակ, այս դեպքում դա SPS բլոկն է (7) ՆԱԼ։

Երկրորդ բայթ (Երկուական=01100100, hex=0x64, Dec=100) SPS-ում NAL-ը դաշտ է պրոֆիլի_idc, որը ցույց է տալիս կոդավորիչի օգտագործած պրոֆիլը։ Այս դեպքում օգտագործվել է սահմանափակ բարձր պրոֆիլ (այսինքն՝ բարձր պրոֆիլ՝ առանց երկկողմանի B-սեգմենտի աջակցության):

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Եթե ​​նայեք բիթհոսքի սպեցիֆիկացիային, H.264 SPS NAL-ի համար մենք կգտնենք բազմաթիվ արժեքներ պարամետրի անվան, կատեգորիայի և նկարագրության համար։ Օրինակ, եկեք նայենք դաշտերին pic_width_in_mbs_minus_1 и pic_height_in_map_units_minus_1.

Պարամետրի անվանումըԱստիճանՆկարագրություն
pic_width_in_mbs_minus_10ուե(վ)
pic_height_in_map_units_minus_10ուե(վ)

Եթե ​​մենք որոշ մաթեմատիկական գործողություններ կատարենք այս դաշտերի արժեքների հետ, կստանանք լուծումը։ Դուք կարող եք ներկայացնել 1920 x 1080՝ օգտագործելով pic_width_in_mbs_minus_1 119 արժեքով ((119 + 1) * macroblock_size = 120 * 16 = 1920): Կրկին, տարածք խնայելու համար, 1920-ը կոդավորելու փոխարեն, նրանք դա արեցին 119-ով։

Եթե ​​շարունակենք ստուգել մեր ստեղծված տեսանյութը երկուական տեսքով (օրինակ՝ xxd -b -c 11 v/minimal_yuv420.h264), ապա կարող ենք անցնել վերջին NAL-ին, որը հենց շրջանակն է։

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Ահա նրա առաջին 6 բայթային արժեքները՝ 01100101 10001000 10000100 00000000 00100001 11111111. Քանի որ հայտնի է, որ առաջին բայթը ցույց է տալիս NAL տեսակը, այս դեպքում (00101) սա IDR հատվածն է (5), և այդ դեպքում հնարավոր կլինի այն ավելի մանրամասն ուսումնասիրել։

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Օգտագործելով սպեցիֆիկացիայի տեղեկատվությունը, հնարավոր կլինի վերծանել ֆրագմենտի տեսակը (կտորի_տեսակ) և շրջանակի համարը (շրջանակի_համար) այլ կարևոր ոլորտների շարքում։

Որոշ դաշտերի արժեքները ստանալու համար (ue(v), me(v), se(v), կամ te(v)), մենք պետք է վերծանենք հատվածը՝ օգտագործելով հատուկ վերծանիչ, որը հիմնված է Էքսպոնենցիալ Գոլոմբի կոդ. Այս մեթոդը շատ արդյունավետ է փոփոխականների արժեքները կոդավորելու համար, հատկապես, երբ կան շատ լռելյայն արժեքներ։

Արժեքներ կտորի_տեսակ и շրջանակի_համար Այս տեսանյութում կան 7 (I-հատված) և 0 (առաջին կադր)։

Բիթային հոսքը կարելի է դիտարկել որպես արձանագրություն։ Եթե ​​​​ցանկանում եք ավելին իմանալ բիթհոսքի մասին, պետք է դիմեք սպեցիֆիկացիային ՀՄՄ H.264. Ահա մակրո դիագրամ, որը ցույց է տալիս, թե որտեղ են գտնվում պատկերի տվյալները (YUV սեղմված տեսքով):

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Կարելի է ուսումնասիրել նաև այլ բիթհոսքեր, ինչպիսիք են՝ VP9, H.265 (HEVC) կամ նույնիսկ մեր նոր լավագույն բիթհոսքը AV1. Նրանք բոլորը նման են՞ Ոչ, բայց երբ հասկանում ես գոնե մեկը, շատ ավելի հեշտ է հասկանալ մնացածը։

Ուզու՞մ եք պարապել։ Ուսումնասիրեք H.264 Bitstream-ը

Կարող եք ստեղծել մեկ կադրով տեսանյութ և օգտագործել MediaInfo-ն՝ բիթային հոսքը ուսումնասիրելու համար։ H.264Իրականում, ոչինչ չի խանգարում ձեզ նույնիսկ նայել բիթային հոսքը վերլուծող սկզբնական կոդին։ H.264 (ՀՎՀ).

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Գործնականում կարող եք օգտագործել Intel Video Pro Analyzer-ը (ես արդեն ասացի, որ ծրագիրը վճարովի է, բայց կա՞ արդյոք անվճար փորձաշրջանի տարբերակ՝ 10 կադրի սահմանաչափով):

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Վերանայել

Նկատի ունեցեք, որ շատ ժամանակակից կոդեկներ օգտագործում են նույն մոդելը, որը մենք հենց նոր ուսումնասիրեցինք։ Ահա, եկեք նայենք տեսակոդեկի բլոկ-սխեմային Thor. Այն պարունակում է մեր ձեռնարկած բոլոր քայլերը։ Այս գրառման ամբողջ իմաստն այն է, որ գոնե ավելի լավ պատկերացում կազմեք այս ոլորտի նորարարությունների և փաստաթղթերի մասին։

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Նախկինում հաշվարկվել էր, որ մեկ ժամ տևողությամբ 139p որակով և 720 կադր/վրկ արագությամբ տեսանյութ պահելու համար անհրաժեշտ կլինի 30 ԳԲ սկավառակի տարածք։ Եթե ​​օգտագործենք այս հոդվածում քննարկված մեթոդները (միջկադրային և ներ-կադրային կանխատեսումներ, փոխակերպում, քվանտացում, էնտրոպիայի կոդավորում և այլն), կարող ենք ստանալ (ենթադրելով, որ մենք ծախսում ենք 0,031 բիթ մեկ պիքսելի համար) բավականին բավարար որակի տեսանյութ, որը զբաղեցնում է ընդամենը 367,82 ՄԲ, և ոչ թե 139 ԳԲ հիշողություն։

Ինչպե՞ս է H.265-ը հասնում ավելի լավ սեղմման, քան H.264-ը։

Հիմա, երբ մենք ավելին գիտենք կոդեկների աշխատանքի մասին, ավելի հեշտ է հասկանալ, թե ինչպես են նոր կոդեկները կարողանում ապահովել ավելի բարձր լուծաչափ՝ ավելի քիչ բիթերով։

Եթե ​​համեմատեք ՀՎՀ и HEVC, հարկ է հիշել, որ սա գրեթե միշտ ընտրություն է պրոցեսորի ավելի մեծ բեռի և սեղմման աստիճանի միջև։

HEVC ունի ավելի շատ բաժնի (և ենթաբաժնի) տարբերակներ, քան ՀՎՀ, ներքին կանխատեսման ավելի շատ ուղղություններ, էնտրոպիայի կոդավորման բարելավում և շատ ավելին։ Այս բոլոր բարելավումները նպաստել են H.265 կարող է սեղմել 50%-ով ավելի, քան H.264.

Ինչպես է աշխատում վիդեո կոդեկը։ Մաս 2. Ի՞նչ, ինչու՞, ինչպե՞ս

Առաջին մասը ` Տեսանյութերի և պատկերների հետ աշխատելու հիմունքները

Source: www.habr.com

Գնեք հուսալի հոստինգ DDoS պաշտպանությամբ կայքերի, VPS VDS սերվերների համար 🔥 Գնեք հուսալի կայքերի հոսթինգ՝ DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster