ఏం? వీడియో కోడెక్ అనేది డిజిటల్ వీడియోను కంప్రెస్ చేసే మరియు/లేదా డీకంప్రెస్ చేసే సాఫ్ట్వేర్/హార్డ్వేర్ యొక్క భాగం.
దేనికోసం? బ్యాండ్విడ్త్ మరియు రెండింటి పరంగా కొన్ని పరిమితులు ఉన్నప్పటికీ
మరియు డేటా నిల్వ స్థలం పరంగా, మార్కెట్ అధిక నాణ్యత గల వీడియోను డిమాండ్ చేస్తుంది. గత పోస్ట్లో మేము 30x24 రిజల్యూషన్తో సెకనుకు 480 ఫ్రేమ్లు, పిక్సెల్కు 240 బిట్ల కోసం అవసరమైన కనిష్టాన్ని ఎలా లెక్కించామో మీకు గుర్తుందా? మేము కంప్రెషన్ లేకుండా 82,944 Mbit/sని అందుకున్నాము. టెలివిజన్ స్క్రీన్లు మరియు ఇంటర్నెట్కు సాధారణంగా HD/FullHD/4Kని ప్రసారం చేయడానికి కంప్రెషన్ ప్రస్తుతం ఏకైక మార్గం. ఇది ఎలా సాధించబడింది? ఇప్పుడు ప్రధాన పద్ధతులను క్లుప్తంగా చూద్దాం.
కొత్తవారు చేసే సాధారణ తప్పు డిజిటల్ వీడియో కోడెక్ మరియు డిజిటల్ వీడియో కంటైనర్ను గందరగోళానికి గురిచేస్తుంది. కంటైనర్ అనేది ఒక నిర్దిష్ట ఆకృతి. వీడియో (మరియు బహుశా ఆడియో) మెటాడేటాను కలిగి ఉన్న రేపర్. కంప్రెస్ చేయబడిన వీడియోను కంటైనర్ పేలోడ్గా భావించవచ్చు.
సాధారణంగా, వీడియో ఫైల్ యొక్క పొడిగింపు దాని రకమైన కంటైనర్ను సూచిస్తుంది. ఉదాహరణకు, ఫైల్ video.mp4 బహుశా ఒక కంటైనర్ MPEG-4 పార్ట్ 14, మరియు video.mkv అనే ఫైల్ ఎక్కువగా ఉండవచ్చు మాట్రియోష్కా. కోడెక్ మరియు కంటైనర్ ఆకృతిని పూర్తిగా నిర్ధారించుకోవడానికి, మీరు ఉపయోగించవచ్చు FFmpeg లేదా MediaInfo.
ఒక బిట్ చరిత్ర
మేము చేరుకోవడానికి ముందు ఎలా?, కొన్ని పాత కోడెక్లను కొంచెం మెరుగ్గా అర్థం చేసుకోవడానికి చరిత్రలోకి కొంచెం డైవ్ చేద్దాం.
వీడియో కోడెక్ H.261 1990లో కనిపించింది (సాంకేతికంగా - 1988లో) మరియు 64 Kbps డేటా బదిలీ రేటుతో పనిచేయడానికి సృష్టించబడింది. ఇది ఇప్పటికే రంగు ఉప నమూనా, మాక్రోబ్లాక్లు మొదలైన ఆలోచనలను ఉపయోగించింది. వీడియో కోడెక్ ప్రమాణం 1995లో ప్రచురించబడింది H.263, ఇది 2001 వరకు అభివృద్ధి చెందింది.
మొదటి వెర్షన్ 2003లో పూర్తయింది H.264 / AVC. అదే సంవత్సరం, TrueMotion దాని ఉచిత లాస్సీ వీడియో కోడెక్ని విడుదల చేసింది VP3. గూగుల్ కంపెనీని 2008లో కొనుగోలు చేసి, విడుదల చేసింది VP8 అదే సంవత్సరంలో. డిసెంబర్ 2012లో, గూగుల్ విడుదల చేసింది VP9, మరియు బ్రౌజర్ మార్కెట్లో (మొబైల్ పరికరాలతో సహా) సుమారు ¾లో దీనికి మద్దతు ఉంది.
AV1 అభివృద్ధి చేసిన కొత్త ఉచిత మరియు ఓపెన్ సోర్స్ వీడియో కోడెక్ ఓపెన్ మీడియా కోసం కూటమి (AOMedia), ఇందులో Google, Mozilla, Microsoft, Amazon, Netflix, AMD, ARM, NVidia, Intel మరియు Cisco వంటి అత్యంత ప్రసిద్ధ కంపెనీలు ఉన్నాయి. కోడెక్ యొక్క మొదటి వెర్షన్, 0.1.0, ఏప్రిల్ 7, 2016న ప్రచురించబడింది.
AV1 జననం
2015 ప్రారంభంలో, Google పని చేస్తోంది VP10Xiph (ఇది మొజిల్లా యాజమాన్యంలో ఉంది) పని చేస్తోంది Daala, మరియు సిస్కో తన స్వంత ఉచిత వీడియో కోడెక్ని తయారు చేసింది థోర్.
అప్పుడు MPEG LA మొదట వార్షిక పరిమితులను ప్రకటించింది HEVC (H.265) మరియు H.8 కంటే 264 రెట్లు ఎక్కువ రుసుము, కానీ వారు త్వరలో నిబంధనలను మళ్లీ మార్చారు:
వార్షిక పరిమితి లేదు,
కంటెంట్ రుసుము (రాబడిలో 0,5%) మరియు
యూనిట్ రుసుము H.10 కంటే దాదాపు 264 రెట్లు ఎక్కువ.
ఓపెన్ మీడియా కోసం కూటమి వివిధ రంగాలకు చెందిన కంపెనీలు సృష్టించబడ్డాయి: పరికరాల తయారీదారులు (ఇంటెల్, AMD, ARM, Nvidia, Cisco), కంటెంట్ ప్రొవైడర్లు (Google, Netflix, Amazon), బ్రౌజర్ సృష్టికర్తలు (Google, Mozilla) మరియు ఇతరులు.
కంపెనీలకు ఉమ్మడి లక్ష్యం ఉంది - రాయల్టీ రహిత వీడియో కోడెక్. అప్పుడు కనిపిస్తుంది AV1 చాలా సరళమైన పేటెంట్ లైసెన్స్తో. తిమోతీ B. టెర్రీబెర్రీ ఒక అద్భుతమైన ప్రదర్శనను అందించారు, ఇది ప్రస్తుత AV1 భావన మరియు దాని లైసెన్సింగ్ మోడల్కు మూలంగా మారింది.
మీరు బ్రౌజర్ ద్వారా AV1 కోడెక్ను విశ్లేషించవచ్చని తెలిస్తే మీరు ఆశ్చర్యపోతారు (ఆసక్తి ఉన్నవారు దీనికి వెళ్లవచ్చు aomanalyzer.org).
యూనివర్సల్ కోడెక్
యూనివర్సల్ వీడియో కోడెక్లో ఉన్న ప్రధాన మెకానిజమ్లను చూద్దాం. ఈ భావనలలో చాలా వరకు ఉపయోగకరమైనవి మరియు ఆధునిక కోడెక్లలో ఉపయోగించబడతాయి VP9, AV1 и HEVC. వివరించిన అనేక విషయాలు సరళీకృతం చేయబడతాయని నేను మిమ్మల్ని హెచ్చరిస్తున్నాను. సాంకేతికతలను ప్రదర్శించడానికి కొన్నిసార్లు వాస్తవ ప్రపంచ ఉదాహరణలు (H.264 వలె) ఉపయోగించబడతాయి.
1వ దశ - చిత్రాన్ని విభజించడం
ఫ్రేమ్ను అనేక విభాగాలు, ఉపవిభాగాలు మరియు అంతకు మించి విభజించడం మొదటి దశ.
దేనికోసం? చాలా కారణాలున్నాయి. మేము చిత్రాన్ని విభజించినప్పుడు, చిన్న కదిలే భాగాల కోసం చిన్న విభాగాలను ఉపయోగించడం ద్వారా మోషన్ వెక్టర్ను మరింత ఖచ్చితంగా అంచనా వేయవచ్చు. స్టాటిక్ బ్యాక్గ్రౌండ్ కోసం మీరు మిమ్మల్ని పెద్ద విభాగాలకు పరిమితం చేసుకోవచ్చు.
కోడెక్లు సాధారణంగా ఈ విభాగాలను విభాగాలు (లేదా భాగాలు), మాక్రోబ్లాక్లు (లేదా కోడింగ్ ట్రీ బ్లాక్లు) మరియు బహుళ ఉపవిభాగాలుగా నిర్వహిస్తాయి. ఈ విభజనల గరిష్ట పరిమాణం మారుతూ ఉంటుంది, HEVC దీన్ని 64x64కి సెట్ చేస్తుంది, అయితే AVC 16x16ని ఉపయోగిస్తుంది మరియు ఉపవిభజనలను 4x4 పరిమాణాల వరకు విభజించవచ్చు.
గత కథనంలోని ఫ్రేమ్ల రకాలు మీకు గుర్తున్నాయా?! అదే బ్లాక్లకు వర్తించవచ్చు, కాబట్టి మనం I-ఫ్రాగ్మెంట్, B-బ్లాక్, P-మాక్రోబ్లాక్ మొదలైనవాటిని కలిగి ఉండవచ్చు.
ప్రాక్టీస్ చేయాలనుకునే వారి కోసం, చిత్రం ఎలా విభాగాలుగా మరియు ఉపవిభాగాలుగా విభజించబడిందో చూడండి. దీన్ని చేయడానికి, మీరు మునుపటి వ్యాసంలో ఇప్పటికే పేర్కొన్నదాన్ని ఉపయోగించవచ్చు. ఇంటెల్ వీడియో ప్రో ఎనలైజర్ (చెల్లించబడినది, కానీ మొదటి 10 ఫ్రేమ్లకు పరిమితం చేయబడిన ఉచిత ట్రయల్ వెర్షన్తో). విభాగాలు ఇక్కడ విశ్లేషించబడ్డాయి VP9:
2వ దశ - అంచనా
మనకు విభాగాలు వచ్చిన తర్వాత, వాటి కోసం జ్యోతిష్య భవిష్య సూచనలు చేయవచ్చు. కోసం INTER అంచనాలు బదిలీ చేయాలి చలన వెక్టర్స్ మరియు మిగిలినవి, మరియు INTRA అంచనా కోసం ఇది ప్రసారం చేయబడుతుంది సూచన దిశ మరియు మిగిలినవి.
3 వ దశ - పరివర్తన
మనకు అవశేష బ్లాక్ (అంచనా విభాగం → నిజమైన విభాగం) ఉన్న తర్వాత, మొత్తం నాణ్యతను కొనసాగిస్తూ ఏ పిక్సెల్లను విస్మరించవచ్చో మనకు తెలిసిన విధంగా మార్చడం సాధ్యమవుతుంది. ఖచ్చితమైన ప్రవర్తనను అందించే కొన్ని పరివర్తనలు ఉన్నాయి.
ఇతర పద్ధతులు ఉన్నప్పటికీ, వాటిని మరింత వివరంగా చూద్దాం. వివిక్త కొసైన్ రూపాంతరం (DCT - నుండి వివిక్త కొసైన్ రూపాంతరం) DCT యొక్క ప్రధాన విధులు:
పిక్సెల్ల బ్లాక్లను ఫ్రీక్వెన్సీ కోఎఫీషియంట్స్ యొక్క సమాన-పరిమాణ బ్లాక్లుగా మారుస్తుంది.
ప్రాదేశిక రిడెండెన్సీని తొలగించడంలో సహాయపడే శక్తిని ఘనీభవిస్తుంది.
రివర్సిబిలిటీని అందిస్తుంది.
ఫిబ్రవరి 2, 2017 సింట్రా ఆర్.జె. (సింట్రా, R.J.) మరియు బేయర్ F.M. (బేయర్ F.M.) కేవలం 14 జోడింపులు అవసరమయ్యే ఇమేజ్ కంప్రెషన్ కోసం DCT-వంటి పరివర్తన గురించి ఒక కథనాన్ని ప్రచురించింది.
ప్రతి పాయింట్ యొక్క ప్రయోజనాలను మీరు అర్థం చేసుకోకపోతే చింతించకండి. ఇప్పుడు వాటి వాస్తవ విలువను చూడటానికి నిర్దిష్ట ఉదాహరణలను ఉపయోగించుకుందాం.
ఈ 8x8 పిక్సెల్ల బ్లాక్ని తీసుకుందాం:
ఈ బ్లాక్ కింది 8 బై 8 పిక్సెల్ ఇమేజ్కి రెండర్ చేయబడింది:
ఈ పిక్సెల్ల బ్లాక్కి DCTని వర్తింపజేయండి మరియు 8x8 బ్లాక్ కోఎఫీషియంట్లను పొందండి:
మరియు మేము ఈ గుణకాల బ్లాక్ను రెండర్ చేస్తే, మేము ఈ క్రింది చిత్రాన్ని పొందుతాము:
మీరు గమనిస్తే, ఇది అసలు చిత్రం వలె కనిపించడం లేదు. మొదటి గుణకం అన్నింటికంటే చాలా భిన్నంగా ఉందని మీరు చూడవచ్చు. ఈ మొదటి గుణకం DC కోఎఫీషియంట్ అని పిలుస్తారు, ఇది ఇన్పుట్ శ్రేణిలోని అన్ని నమూనాలను సూచిస్తుంది, సగటు వంటిది.
గుణకాల యొక్క ఈ బ్లాక్ ఒక ఆసక్తికరమైన ఆస్తిని కలిగి ఉంది: ఇది తక్కువ-ఫ్రీక్వెన్సీ వాటి నుండి అధిక-ఫ్రీక్వెన్సీ భాగాలను వేరు చేస్తుంది.
ఒక చిత్రంలో, చాలా శక్తి తక్కువ పౌనఃపున్యాల వద్ద కేంద్రీకృతమై ఉంటుంది, కాబట్టి మీరు చిత్రాన్ని దాని ఫ్రీక్వెన్సీ భాగాలుగా మార్చినట్లయితే మరియు అధిక ఫ్రీక్వెన్సీ కోఎఫీషియంట్లను విస్మరిస్తే, మీరు చాలా చిత్ర నాణ్యతను త్యాగం చేయకుండా చిత్రాన్ని వివరించడానికి అవసరమైన డేటా మొత్తాన్ని తగ్గించవచ్చు.
ఫ్రీక్వెన్సీ సిగ్నల్ ఎంత త్వరగా మారుతుందో సూచిస్తుంది.
DCTని ఉపయోగించి అసలు చిత్రాన్ని దాని ఫ్రీక్వెన్సీకి (కోఎఫీషియంట్స్ బ్లాక్) మార్చడం ద్వారా పరీక్ష సందర్భంలో పొందిన జ్ఞానాన్ని వర్తింపజేయడానికి ప్రయత్నిద్దాం, ఆపై అతి ముఖ్యమైన గుణకాలలో కొంత భాగాన్ని విస్మరించండి.
ముందుగా మనం దానిని ఫ్రీక్వెన్సీ డొమైన్గా మారుస్తాము.
తరువాత, మేము గుణకాల యొక్క భాగాన్ని (67%) విస్మరిస్తాము, ప్రధానంగా దిగువ కుడి భాగం.
చివరగా, మేము ఈ విస్మరించిన గుణకాల బ్లాక్ నుండి చిత్రాన్ని పునర్నిర్మిస్తాము (గుర్తుంచుకోండి, అది విలోమంగా ఉండాలి) మరియు దానిని అసలైన దానితో పోల్చండి.
ఇది అసలైన చిత్రాన్ని పోలి ఉందని మేము చూస్తాము, కానీ అసలు నుండి చాలా తేడాలు ఉన్నాయి. మేము 67,1875%ని విసిరివేసాము మరియు అసలైనదానిని పోలి ఉండేవి ఇంకా పొందాము. మరింత మెరుగైన నాణ్యత గల చిత్రాన్ని పొందేందుకు గుణకాలను మరింత ఆలోచనాత్మకంగా విస్మరించడం సాధ్యమైంది, కానీ అది తదుపరి అంశం.
ప్రతి గుణకం అన్ని పిక్సెల్లను ఉపయోగించి ఉత్పత్తి చేయబడుతుంది
ముఖ్యమైనది: ప్రతి గుణకం నేరుగా ఒక పిక్సెల్కు మ్యాప్ చేయబడదు, అయితే ఇది అన్ని పిక్సెల్ల బరువున్న మొత్తం. ఈ అద్భుతమైన గ్రాఫ్ ప్రతి సూచికకు ప్రత్యేకమైన బరువులను ఉపయోగించి మొదటి మరియు రెండవ గుణకాలు ఎలా లెక్కించబడతాయో చూపిస్తుంది.
మీరు దాని ఆధారంగా ఒక సాధారణ చిత్ర నిర్మాణాన్ని చూడటం ద్వారా DCTని దృశ్యమానం చేయడానికి కూడా ప్రయత్నించవచ్చు. ఉదాహరణకు, ప్రతి గుణకం బరువును ఉపయోగించి రూపొందించబడిన చిహ్నం A ఇక్కడ ఉంది:
4వ దశ - పరిమాణీకరణ
మేము మునుపటి దశలో కొన్ని కోఎఫీషియంట్లను విసిరిన తర్వాత, చివరి దశలో (పరివర్తన) మేము పరిమాణీకరణ యొక్క ప్రత్యేక రూపాన్ని చేస్తాము. ఈ దశలో సమాచారాన్ని కోల్పోవడం ఆమోదయోగ్యమైనది. లేదా, మరింత సరళంగా, మేము కుదింపు సాధించడానికి కోఎఫీషియంట్లను పరిమాణం చేస్తాము.
మీరు గుణకాల బ్లాక్ను ఎలా లెక్కించవచ్చు? సరళమైన పద్ధతుల్లో ఒకటి ఏకరీతి పరిమాణీకరణ, మేము ఒక బ్లాక్ను తీసుకున్నప్పుడు, దానిని ఒక విలువతో (10 ద్వారా) విభజించి ఫలితాన్ని రౌండ్ చేయండి.
మేము ఈ గుణకాల బ్లాక్ని రివర్స్ చేయగలమా? అవును, మనం విభజించిన అదే విలువతో గుణించవచ్చు.
ఈ విధానం ఉత్తమమైనది కాదు ఎందుకంటే ఇది ప్రతి గుణకం యొక్క ప్రాముఖ్యతను పరిగణనలోకి తీసుకోదు. ఒకరు ఒకే విలువకు బదులుగా క్వాంటిజర్ల మాతృకను ఉపయోగించవచ్చు మరియు ఈ మాతృక దిగువ కుడివైపు మెజారిటీని మరియు ఎగువ ఎడమవైపు మైనారిటీని లెక్కించడం ద్వారా DCT ఆస్తిని ఉపయోగించుకోవచ్చు.
దశ 5 - ఎంట్రోపీ కోడింగ్
మేము డేటాను (ఇమేజ్ బ్లాక్లు, ఫ్రాగ్మెంట్స్, ఫ్రేమ్లు) పరిమాణీకరించిన తర్వాత, మనం దానిని నష్టపోకుండా కుదించవచ్చు. డేటాను కుదించడానికి అనేక అల్గారిథమిక్ మార్గాలు ఉన్నాయి. మేము వాటిలో కొన్నింటిని శీఘ్రంగా పరిశీలించబోతున్నాము, లోతైన అవగాహన కోసం మీరు అండర్స్టాండింగ్ కంప్రెషన్: ఆధునిక డెవలపర్ల కోసం డేటా కంప్రెషన్ ("కంప్రెషన్ను అర్థం చేసుకోవడం: ఆధునిక డెవలపర్ల కోసం డేటా కంప్రెషన్").
VLC ఉపయోగించి వీడియో ఎన్కోడింగ్
మనకు పాత్రల ప్రవాహం ఉందని చెప్పండి: a, e, r и t. స్ట్రీమ్లో ప్రతి అక్షరం ఎంత తరచుగా కనిపిస్తుంది అనే సంభావ్యత (0 నుండి 1 వరకు) ఈ పట్టికలో ప్రదర్శించబడుతుంది.
a
e
r
t
సంభావ్యత
0,3
0,3
0,2
0,2
మేము చాలా అవకాశం ఉన్న వాటికి ప్రత్యేకమైన బైనరీ కోడ్లను (ప్రాధాన్యంగా చిన్నవి) మరియు తక్కువ అవకాశం ఉన్న వాటికి పెద్ద కోడ్లను కేటాయించవచ్చు.
a
e
r
t
సంభావ్యత
0,3
0,3
0,2
0,2
బైనరీ కోడ్
0
10
110
1110
మేము ప్రతి పాత్ర కోసం 8 బిట్లను ఖర్చు చేస్తాము అని ఊహిస్తూ, స్ట్రీమ్ను కుదించాము. కుదింపు లేకుండా, ఒక్కో అక్షరానికి 24 బిట్లు అవసరమవుతాయి. మీరు ప్రతి అక్షరాన్ని దాని కోడ్తో భర్తీ చేస్తే, మీరు పొదుపు పొందుతారు!
మొదటి దశ పాత్రను ఎన్కోడ్ చేయడం e, ఇది 10కి సమానం మరియు రెండవ అక్షరం a, ఇది జోడించబడింది (గణిత మార్గంలో కాదు): [10][0], చివరకు మూడవ అక్షరం t, ఇది మా చివరి కంప్రెస్డ్ బిట్స్ట్రీమ్ను [10][0][1110]కి సమానంగా చేస్తుంది లేదా 1001110, దీనికి 7 బిట్లు మాత్రమే అవసరం (అసలు కంటే 3,4 రెట్లు తక్కువ స్థలం).
దయచేసి ప్రతి కోడ్ తప్పనిసరిగా ఉపసర్గతో కూడిన ప్రత్యేక కోడ్ అయి ఉండాలి. హఫ్ఫ్మన్ అల్గోరిథం ఈ సంఖ్యలను కనుగొనడంలో మీకు సహాయం చేస్తుంది. ఈ పద్ధతి దాని లోపాలు లేకుండా లేనప్పటికీ, ఇప్పటికీ కుదింపు కోసం ఈ అల్గోరిథమిక్ పద్ధతిని అందించే వీడియో కోడెక్లు ఉన్నాయి.
ఎన్కోడర్ మరియు డీకోడర్ రెండూ తప్పనిసరిగా వాటి బైనరీ కోడ్లతో కూడిన సింబల్ టేబుల్కి యాక్సెస్ కలిగి ఉండాలి. అందువల్ల, పట్టికను ఇన్పుట్గా పంపడం కూడా అవసరం.
అంకగణిత కోడింగ్
మనకు పాత్రల ప్రవాహం ఉందని చెప్పండి: a, e, r, s и t, మరియు వాటి సంభావ్యత ఈ పట్టికలో ప్రదర్శించబడింది.
a
e
r
s
t
సంభావ్యత
0,3
0,3
0,15
0,05
0,2
ఈ పట్టికను ఉపయోగించి, మేము అతిపెద్ద సంఖ్య ద్వారా క్రమబద్ధీకరించబడిన అన్ని సాధ్యమైన అక్షరాలను కలిగి ఉన్న పరిధులను నిర్మిస్తాము.
ఇప్పుడు మూడు అక్షరాల స్ట్రీమ్ని ఎన్కోడ్ చేద్దాం: తినడానికి.
మొదట మొదటి అక్షరాన్ని ఎంచుకోండి e, ఇది 0,3 నుండి 0,6 వరకు ఉపపరిధిలో ఉంది (సహా కాదు). మేము ఈ ఉపశ్రేణిని తీసుకొని, దాన్ని మళ్లీ మునుపటి అదే నిష్పత్తిలో విభజించాము, కానీ ఈ కొత్త పరిధి కోసం.
మన స్ట్రీమ్ని కోడింగ్ని కొనసాగిద్దాం తినడానికి. ఇప్పుడు రెండవ పాత్రను తీసుకోండి a, ఇది 0,3 నుండి 0,39 వరకు కొత్త సబ్రేంజ్లో ఉంది, ఆపై మన చివరి అక్షరాన్ని తీసుకోండి t మరియు అదే విధానాన్ని మళ్లీ పునరావృతం చేస్తే, మేము 0,354 నుండి 0,372 వరకు తుది ఉప-పరిధిని పొందుతాము.
మేము 0,354 నుండి 0,372 వరకు ఉన్న చివరి ఉపశ్రేణిలో ఒక సంఖ్యను ఎంచుకోవాలి. 0,36ని ఎంచుకుందాం (కానీ మీరు ఈ ఉపపరిధిలో ఏదైనా ఇతర సంఖ్యను ఎంచుకోవచ్చు). ఈ నంబర్తో మాత్రమే మేము మా అసలు ప్రసారాన్ని పునరుద్ధరించగలము. మేము మా స్ట్రీమ్ను ఎన్కోడ్ చేయడానికి పరిధులలో ఒక గీతను గీసినట్లు అనిపిస్తుంది.
రివర్స్ ఆపరేషన్ (అంటే, డీకోడింగ్) చాలా సులభం: మా సంఖ్య 0,36 మరియు మా ప్రారంభ పరిధితో, మేము అదే విధానాన్ని అమలు చేయవచ్చు. కానీ ఇప్పుడు, ఈ నంబర్ని ఉపయోగించి, ఈ నంబర్ని ఉపయోగించి ఎన్కోడ్ చేయబడిన స్ట్రీమ్ను మేము గుర్తిస్తాము.
మొదటి శ్రేణితో, మా సంఖ్య స్లైస్కు అనుగుణంగా ఉందని మేము గమనించాము, కాబట్టి ఇది మా మొదటి అక్షరం. ఇప్పుడు మనం ఈ ఉప-శ్రేణిని మళ్లీ మునుపటి విధానాన్ని అనుసరించడం ద్వారా విభజిస్తాము. ఇక్కడ మీరు 0,36 గుర్తుకు అనుగుణంగా ఉన్నట్లు చూడవచ్చు a, మరియు ప్రక్రియను పునరావృతం చేసిన తర్వాత మేము చివరి పాత్రకు చేరుకున్నాము t (మా అసలు ఎన్కోడ్ చేసిన స్ట్రీమ్ను ఏర్పరుస్తుంది తినడానికి).
ఎన్కోడర్ మరియు డీకోడర్ రెండూ తప్పనిసరిగా సింబల్ ప్రాబబిలిటీల పట్టికను కలిగి ఉండాలి, కాబట్టి ఇన్పుట్ డేటాలో కూడా దీన్ని పంపడం అవసరం.
చాలా సొగసైనది, కాదా? ఈ పరిష్కారంతో ఎవరు వచ్చినా తిట్టు తెలివితేటలు. కొన్ని వీడియో కోడెక్లు ఈ టెక్నిక్ని ఉపయోగిస్తాయి (లేదా కనీసం దీన్ని ఎంపికగా అందిస్తాయి).
పరిమాణాత్మక బిట్ స్ట్రీమ్ను నష్టం లేకుండా కుదించడం ఆలోచన. ఖచ్చితంగా ఈ కథనంలో టన్నుల కొద్దీ వివరాలు, కారణాలు, ట్రేడ్-ఆఫ్లు మొదలైనవి లేవు. కానీ మీరు డెవలపర్ అయితే, మీరు మరింత తెలుసుకోవాలి. కొత్త కోడెక్లు వివిధ ఎంట్రోపీ ఎన్కోడింగ్ అల్గారిథమ్లను ఉపయోగించడానికి ప్రయత్నిస్తాయి ANS.
దశ 6 - బిట్స్ట్రీమ్ ఫార్మాట్
ఇవన్నీ చేసిన తర్వాత, ప్రదర్శించిన దశల సందర్భంలో కంప్రెస్డ్ ఫ్రేమ్లను అన్ప్యాక్ చేయడం మాత్రమే మిగిలి ఉంది. ఎన్కోడర్ తీసుకున్న నిర్ణయాల గురించి డీకోడర్కు స్పష్టంగా తెలియజేయాలి. డీకోడర్ తప్పనిసరిగా అన్ని అవసరమైన సమాచారాన్ని అందించాలి: బిట్ డెప్త్, కలర్ స్పేస్, రిజల్యూషన్, ప్రిడిక్షన్ సమాచారం (మోషన్ వెక్టర్స్, డైరెక్షనల్ INTER ప్రిడిక్షన్), ప్రొఫైల్, లెవెల్, ఫ్రేమ్ రేట్, ఫ్రేమ్ రకం, ఫ్రేమ్ నంబర్ మరియు మరిన్ని.
మేము బిట్స్ట్రీమ్ను త్వరగా పరిశీలిస్తాము H.264. కనిష్ట H.264 బిట్స్ట్రీమ్ను సృష్టించడం మా మొదటి దశ (FFmpeg డిఫాల్ట్గా అన్ని ఎన్కోడింగ్ ఎంపికలను జోడిస్తుంది SEI NAL - అది ఏమిటో మేము కొంచెం ముందుకు కనుగొంటాము). మేము దీన్ని మా స్వంత రిపోజిటరీ మరియు FFmpeg ఉపయోగించి చేయవచ్చు.
ఈ కమాండ్ ముడి బిట్స్ట్రీమ్ను ఉత్పత్తి చేస్తుంది H.264 ఒక ఫ్రేమ్తో, 64×64 రిజల్యూషన్, కలర్ స్పేస్తో YUV420. ఈ సందర్భంలో, కింది చిత్రం ఫ్రేమ్గా ఉపయోగించబడుతుంది.
H.264 బిట్స్ట్రీమ్
ప్రామాణిక AVC (H.264) అనే సమాచారం మాక్రోఫ్రేమ్లలో (నెట్వర్క్ కోణంలో) పంపబడుతుందని నిర్ణయిస్తుంది nal (ఇది నెట్వర్క్ సంగ్రహణ స్థాయి). NAL యొక్క ప్రధాన లక్ష్యం "వెబ్-ఫ్రెండ్లీ" వీడియో ప్రదర్శనను అందించడం. ఈ ప్రమాణం టీవీలు (స్ట్రీమ్ ఆధారిత), ఇంటర్నెట్ (ప్యాకెట్ ఆధారిత)లో పని చేయాలి.
NAL మూలకాల సరిహద్దులను నిర్వచించడానికి సింక్రొనైజేషన్ మార్కర్ ఉంది. ప్రతి సమకాలీకరణ టోకెన్ విలువను కలిగి ఉంటుంది 0x00 0x00 0x01, మొదటిది తప్ప, ఇది సమానంగా ఉంటుంది 0x00 0x00 0x00 0x01. మేము లాంచ్ చేస్తే హెక్స్డంప్ ఉత్పత్తి చేయబడిన H.264 బిట్స్ట్రీమ్ కోసం, మేము ఫైల్ ప్రారంభంలో కనీసం మూడు NAL నమూనాలను గుర్తిస్తాము.
పేర్కొన్నట్లుగా, డీకోడర్ తప్పనిసరిగా ఇమేజ్ డేటాను మాత్రమే కాకుండా, వీడియో, ఫ్రేమ్, రంగులు, ఉపయోగించిన పారామితులు మరియు మరెన్నో వివరాలను కూడా తెలుసుకోవాలి. ప్రతి NAL యొక్క మొదటి బైట్ దాని వర్గం మరియు రకాన్ని నిర్వచిస్తుంది.
NAL రకం ఐడెంటిఫైయర్
వివరణ
0
తెలియని రకం
1
IDR లేకుండా ఎన్కోడ్ చేయబడిన చిత్ర భాగం
2
కోడెడ్ స్లైస్ డేటా విభాగం A
3
కోడెడ్ స్లైస్ డేటా విభాగం B
4
కోడెడ్ స్లైస్ డేటా విభాగం C
5
IDR చిత్రం యొక్క ఎన్కోడ్ చేయబడిన IDR భాగం
6
SEI పొడిగింపు గురించి మరింత సమాచారం
7
SPS సీక్వెన్స్ పరామితి సెట్
8
PPS ఇమేజ్ పారామితుల సెట్
9
యాక్సెస్ సెపరేటర్
10
క్రమం ముగింపు
11
థ్రెడ్ ముగింపు
...
...
సాధారణంగా బిట్ స్ట్రీమ్ యొక్క మొదటి NAL SPS. ప్రొఫైల్, స్థాయి, రిజల్యూషన్ మొదలైన సాధారణ ఎన్కోడింగ్ వేరియబుల్స్ గురించి తెలియజేయడానికి ఈ రకమైన NAL బాధ్యత వహిస్తుంది.
మేము మొదటి సమకాలీకరణ మార్కర్ను దాటవేస్తే, ఏ NAL రకం మొదట ఉందో తెలుసుకోవడానికి మొదటి బైట్ను డీకోడ్ చేయవచ్చు.
ఉదాహరణకు, సమకాలీకరణ టోకెన్ తర్వాత మొదటి బైట్ 01100111, ఎక్కడ మొదటి బిట్ (0) ఫీల్డ్ f లో ఉందిorbidden_zero_bit. తదుపరి 2 బిట్లు (11) మాకు ఫీల్డ్ చెబుతుంది nal_ref_idc, ఇది ఈ NAL రిఫరెన్స్ ఫీల్డ్ కాదా అని సూచిస్తుంది. మరియు మిగిలిన 5 బిట్లు (00111) మాకు ఫీల్డ్ చెబుతుంది nal_unit_type, ఈ సందర్భంలో ఇది SPS బ్లాక్ (7) NAL.
రెండవ బైట్ (బైనరీ=01100100, హెక్స్=0x64, Dec=100) SPSలో NAL అనేది ఫీల్డ్ profile_idc, ఇది ఎన్కోడర్ ఉపయోగించిన ప్రొఫైల్ను చూపుతుంది. ఈ సందర్భంలో, పరిమిత హై ప్రొఫైల్ ఉపయోగించబడింది (అంటే, ద్వి దిశాత్మక B-సెగ్మెంట్ మద్దతు లేని అధిక ప్రొఫైల్).
మీరు బిట్స్ట్రీమ్ స్పెసిఫికేషన్ను పరిశీలిస్తే H.264 SPS NAL కోసం, మేము పరామితి పేరు, వర్గం మరియు వివరణ కోసం అనేక విలువలను కనుగొంటాము. ఉదాహరణకు, క్షేత్రాలను చూద్దాం pic_width_in_mbs_minus_1 и pic_height_in_map_units_minus_1.
పరామితి పేరు
వర్గం
వివరణ
pic_width_in_mbs_minus_1
0
ue(v)
pic_height_in_map_units_minus_1
0
ue(v)
మేము ఈ ఫీల్డ్ల విలువలతో కొన్ని గణిత కార్యకలాపాలను చేస్తే, మేము రిజల్యూషన్ పొందుతాము. ఒకటి ఉపయోగించి 1920 x 1080ని సూచించవచ్చు pic_width_in_mbs_minus_1 119 విలువతో ((119 + 1) * మాక్రోబ్లాక్_సైజ్ = 120 * 16 = 1920). మళ్ళీ, స్థలాన్ని ఆదా చేయడానికి, 1920ని ఎన్కోడింగ్ చేయడానికి బదులుగా, మేము దీన్ని 119తో చేసాము.
మేము సృష్టించిన వీడియోను బైనరీ రూపంలో తనిఖీ చేయడం కొనసాగిస్తే (ఉదాహరణకు: xxd -b -c 11 v/minimal_yuv420.h264), అప్పుడు మీరు ఫ్రేమ్లోని చివరి NALకి వెళ్లవచ్చు.
ఇక్కడ మనం దాని మొదటి 6 బైట్ విలువలను చూస్తాము: 01100101 10001000 10000100 00000000 00100001 11111111. మొదటి బైట్ NAL రకాన్ని సూచిస్తుందని తెలిసినందున, ఈ సందర్భంలో (00101) అనేది IDR భాగం (5), ఆపై మీరు దీన్ని మరింత అన్వేషించవచ్చు:
స్పెసిఫికేషన్ సమాచారాన్ని ఉపయోగించి, ఫ్రాగ్మెంట్ రకాన్ని డీకోడ్ చేయడం సాధ్యమవుతుంది (స్లైస్_రకం) మరియు ఫ్రేమ్ సంఖ్య (ఫ్రేమ్_సంఖ్య) ఇతర ముఖ్యమైన రంగాలలో.
కొన్ని ఫీల్డ్ల విలువలను పొందడానికి (ue(v), me(v), se(v) లేదా te(v)), మేము ఆధారంగా ఒక ప్రత్యేక డీకోడర్ ఉపయోగించి భాగాన్ని డీకోడ్ చేయాలి ఘాతాంక గోలోంబ్ కోడ్. వేరియబుల్ విలువలను ఎన్కోడింగ్ చేయడానికి ఈ పద్ధతి చాలా ప్రభావవంతంగా ఉంటుంది, ప్రత్యేకించి చాలా డిఫాల్ట్ విలువలు ఉన్నప్పుడు.
అర్థం స్లైస్_రకం и ఫ్రేమ్_సంఖ్య ఈ వీడియోలో 7 (I-ఫ్రాగ్మెంట్) మరియు 0 (మొదటి ఫ్రేమ్) ఉన్నాయి.
ఒక బిట్ స్ట్రీమ్ను ప్రోటోకాల్గా భావించవచ్చు. మీరు బిట్స్ట్రీమ్ గురించి మరింత తెలుసుకోవాలనుకుంటే, మీరు స్పెసిఫికేషన్ను చూడాలి ITU H.264. ఇమేజ్ డేటా ఎక్కడ ఉందో చూపే స్థూల రేఖాచిత్రం ఇక్కడ ఉంది (YUV సంపీడన రూపంలో).
వంటి ఇతర బిట్స్ట్రీమ్లను పరిశీలించవచ్చు VP9, H.265 (HEVC) లేదా మా కొత్త ఉత్తమ బిట్స్ట్రీమ్ కూడా AV1. అవన్నీ ఒకేలా ఉన్నాయా? లేదు, కానీ మీరు కనీసం ఒకదానిని అర్థం చేసుకున్న తర్వాత, మిగిలిన వాటిని అర్థం చేసుకోవడం చాలా సులభం.
సాధన చేయాలనుకుంటున్నారా? H.264 బిట్స్ట్రీమ్ను అన్వేషించండి
మీరు బిట్స్ట్రీమ్ను పరిశీలించడానికి ఒకే ఫ్రేమ్ వీడియోని రూపొందించవచ్చు మరియు MediaInfoని ఉపయోగించవచ్చు H.264. వాస్తవానికి, బిట్ స్ట్రీమ్ను విశ్లేషించే సోర్స్ కోడ్ను చూడకుండా కూడా మిమ్మల్ని ఏదీ నిరోధించదు H.264 (AVC).
అభ్యాసం కోసం, మీరు ఇంటెల్ వీడియో ప్రో ఎనలైజర్ని ఉపయోగించవచ్చు (ప్రోగ్రామ్ చెల్లించబడిందని నేను ఇప్పటికే చెప్పాను, అయితే 10 ఫ్రేమ్ల పరిమితితో ఉచిత ట్రయల్ వెర్షన్ ఉందా?).
పర్యావలోకనం
అనేక ఆధునిక కోడెక్లు మనం ఇప్పుడే అధ్యయనం చేసిన అదే మోడల్ను ఉపయోగిస్తాయని గమనించండి. ఇక్కడ, వీడియో కోడెక్ యొక్క బ్లాక్ రేఖాచిత్రాన్ని పరిశీలిద్దాం థోర్. ఇది మనం దాటిన అన్ని దశలను కలిగి ఉంటుంది. ఈ పోస్ట్ యొక్క మొత్తం ఉద్దేశ్యం ఏమిటంటే, ఈ ప్రాంతంలోని ఆవిష్కరణలు మరియు డాక్యుమెంటేషన్ గురించి మీకు కనీసం మంచి అవగాహన కల్పించడం.
మునుపు, 139p నాణ్యత మరియు 720 fpsతో ఒక గంట పాటు ఉండే వీడియో ఫైల్ను నిల్వ చేయడానికి 30 GB డిస్క్ స్థలం అవసరమని లెక్కించారు. మీరు ఈ కథనంలో చర్చించిన పద్ధతులను ఉపయోగిస్తే (ఇంటర్-ఫ్రేమ్ మరియు అంతర్గత అంచనాలు, రూపాంతరం, పరిమాణీకరణ, ఎంట్రోపీ కోడింగ్ మొదలైనవి), అప్పుడు మీరు సాధించవచ్చు (మేము ప్రతి పిక్సెల్కు 0,031 బిట్లు ఖర్చు చేసిన వాస్తవం ఆధారంగా), చాలా వీడియో సంతృప్తికరమైన నాణ్యత, కేవలం 367,82 MB మాత్రమే ఆక్రమించింది, 139 GB మెమరీ కాదు.
H.265 కంటే మెరుగైన కుదింపు నిష్పత్తిని H.264 ఎలా సాధిస్తుంది?
ఇప్పుడు మేము కోడెక్లు ఎలా పని చేస్తాయనే దాని గురించి మరింత తెలుసుకున్నాము, కొత్త కోడెక్లు తక్కువ బిట్లతో అధిక రిజల్యూషన్లను ఎలా అందించగలవో అర్థం చేసుకోవడం సులభం.
మనం పోల్చుకుంటే AVC и HEVC, ఇది దాదాపు ఎల్లప్పుడూ ఎక్కువ CPU లోడ్ మరియు కుదింపు నిష్పత్తి మధ్య ఎంపిక అని గుర్తుంచుకోవాలి.
HEVC కంటే ఎక్కువ విభాగం (మరియు ఉపవిభాగం) ఎంపికలను కలిగి ఉంది AVC, మరిన్ని అంతర్గత అంచనా దిశలు, మెరుగైన ఎంట్రోపీ కోడింగ్ మరియు మరిన్ని. ఈ మెరుగుదలలన్నీ జరిగాయి H.265 కంటే 50% ఎక్కువ కుదించగల సామర్థ్యం H.264.