පළමු කොටස: වීඩියෝ සහ රූප සමඟ වැඩ කිරීමේ මූලික කරුණු
මොකක්ද? වීඩියෝ කෝඩෙක් යනු ඩිජිටල් වීඩියෝ සම්පීඩනය සහ/හෝ විසංයෝජනය කරන මෘදුකාංග/දෘඪාංග කොටසකි.
කුමක් සඳහා ද? කලාප පළල සහ දෙකම අනුව යම් සීමාවන් තිබියදීත්
සහ දත්ත ගබඩා කිරීමේ ඉඩ ප්රකාරව, වෙළඳපලට වැඩි වැඩියෙන් උසස් තත්ත්වයේ වීඩියෝ අවශ්ය වේ. 30x24 විභේදනයකින් තත්පරයට රාමු 480ක්, පික්සලයකට බිටු 240ක් සඳහා අවශ්ය අවම අගය අපි පසුගිය පෝස්ටුවේදී ගණනය කළ ආකාරය ඔබට මතකද? අපි සම්පීඩනයකින් තොරව 82,944 Mbit/s ලබා ගත්තෙමු. සාමාන්යයෙන් HD/FullHD/4K රූපවාහිනී තිර සහ අන්තර්ජාලය වෙත සම්ප්රේෂණය කිරීමේ එකම ක්රමය සම්පීඩනයයි. මෙය සාක්ෂාත් කර ගන්නේ කෙසේද? දැන් අපි කෙටියෙන් ප්රධාන ක්රම දෙස බලමු.
පරිවර්තනය EDISON මෘදුකාංගයේ සහාය ඇතිව සිදු කරන ලදී.අපි විවාහ ගිවිසගෙන ඉන්නේ
වීඩියෝ නිරීක්ෂණ පද්ධති ඒකාබද්ධ කිරීම , මෙන්මඅපි microtomograph එකක් සංවර්ධනය කරනවා .
කෝඩෙක් එදිරිව බහාලුම්
නවකයින් කරන පොදු වැරැද්දක් වන්නේ ඩිජිටල් වීඩියෝ කෝඩෙක් සහ ඩිජිටල් වීඩියෝ බහාලුම් ව්යාකූල කිරීමයි. බහාලුමක් යනු නිශ්චිත ආකෘතියකි. වීඩියෝ (සහ සමහරවිට ශ්රව්ය) පාර-දත්ත අඩංගු දවටනයක්. සම්පීඩිත වීඩියෝව බහාලුම් ගෙවීමක් ලෙස සැලකිය හැකිය.
සාමාන්යයෙන්, වීඩියෝ ගොනුවක දිගුව එහි බහාලුම් වර්ගය පෙන්නුම් කරයි. උදාහරණයක් ලෙස, video.mp4 ගොනුව සමහරවිට බහාලුමක් විය හැකිය MPEG-4 14 කොටස, සහ video.mkv නම් ගොනුවක් බොහෝ දුරට ඉඩ ඇත
ඉතිහාසය ටිකක්
අපි එන්න කලින් කොහොමද?, සමහර පැරණි කෝඩෙක්ස් ටිකක් හොඳින් තේරුම් ගැනීමට ඉතිහාසයට ටිකක් කිමිදෙමු.
වීඩියෝ කෝඩෙක් H.261 1990 දී පෙනී සිටියේය (තාක්ෂණිකව - 1988 දී) සහ 64 Kbps දත්ත හුවමාරු අනුපාතයකින් ක්රියා කිරීමට නිර්මාණය කරන ලදී. එය දැනටමත් වර්ණ උප නියැදීම, මැක්රොබ්ලොක් වැනි අදහස් භාවිතා කර ඇත. වීඩියෝ කෝඩෙක් සම්මතය 1995 දී ප්රකාශයට පත් කරන ලදී H.2632001 දක්වා වර්ධනය විය.
පළමු අනුවාදය 2003 දී නිම කරන ලදී H.264 / AVC. එම වසරේම, TrueMotion එහි නොමිලේ පාඩු සහිත වීඩියෝ codec නමින් නිකුත් කරන ලදී VP3. ගූගල් සමාගම 2008 දී මිලදී ගෙන නිකුත් කළේය VP8 එම වසරේම. 2012 දෙසැම්බර් මාසයේදී ගූගල් විසින් නිකුත් කරන ලදී VP9, සහ එය බ්රවුසර වෙළඳපොලේ (ජංගම උපාංග ඇතුළුව) ¾ පමණ සහය දක්වයි.
AV1 විසින් සංවර්ධනය කරන ලද නව නිදහස් සහ විවෘත කේත වීඩියෝ කෝඩෙක් වේ විවෘත මාධ්ය සඳහා සන්ධානය (AOMedia), Google, Mozilla, Microsoft, Amazon, Netflix, AMD, ARM, NVidia, Intel සහ Cisco වැනි වඩාත් ප්රසිද්ධ සමාගම් ඇතුළත් වේ. කෝඩෙක් හි පළමු අනුවාදය, 0.1.0, 7 අප්රේල් 2016 වන දින ප්රකාශයට පත් කරන ලදී.
AV1 හි උපත
2015 මුලදී, ගූගල් වැඩ කරමින් සිටියේය VP10Xiph (මොසිල්ලා සතු) වැඩ කරමින් සිටියේය ඩාලා, සහ Cisco නමින් තමන්ගේම නොමිලේ වීඩියෝ කෝඩෙක් සාදන ලදී තෝර්.
පසුව MPEG LA සඳහා වාර්ෂික සීමාවන් පළමුව නිවේදනය කළේය HEVC (H.265) සහ H.8 සඳහා වඩා 264 ගුණයකින් වැඩි ගාස්තුවක්, නමුත් ඔවුන් ඉක්මනින්ම නැවත නීති වෙනස් කළහ:
වාර්ෂික සීමාවක් නැත,
අන්තර්ගත ගාස්තුව (ආදායමෙන් 0,5%) සහ
ඒකක ගාස්තුව H.10ට වඩා 264 ගුණයකින් වැඩිය.
විවෘත මාධ්ය සඳහා සන්ධානය විවිධ ක්ෂේත්රවලින් සමාගම් විසින් නිර්මාණය කරන ලදී: උපකරණ නිෂ්පාදකයින් (Intel, AMD, ARM, Nvidia, Cisco), අන්තර්ගත සපයන්නන් (Google, Netflix, Amazon), බ්රව්සර් නිර්මාපකයින් (Google, Mozilla) සහ වෙනත් අය.
සමාගම්වලට පොදු ඉලක්කයක් තිබුණි - රාජකීයත්වය-රහිත වීඩියෝ කෝඩෙක්. එවිට දිස්වේ AV1 වඩා සරල පේටන්ට් බලපත්රයක් සමඟ. Timothy B. Terryberry වත්මන් AV1 සංකල්පයේ සහ එහි බලපත්ර ආකෘතියේ මූලාරම්භය බවට පත් වූ විශ්මයජනක ඉදිරිපත් කිරීමක් ලබා දුන්නේය.
ඔබට බ්රවුසරයක් හරහා AV1 කෝඩෙක් විශ්ලේෂණය කළ හැකි බව දැනගැනීමෙන් ඔබ පුදුමයට පත් වනු ඇත (කැමති අයට යන්න
විශ්ව කෝඩෙක්
විශ්වීය වීඩියෝ කෝඩෙක්ට යටින් පවතින ප්රධාන යාන්ත්රණයන් දෙස බලමු. මෙම සංකල්ප බොහොමයක් ප්රයෝජනවත් වන අතර නවීන කෝඩෙක්ස් වල භාවිතා වේ VP9, AV1 и HEVC. පැහැදිලි කර ඇති බොහෝ දේ සරල වනු ඇති බවට මම ඔබට අනතුරු අඟවමි. සමහර විට සැබෑ ලෝක උදාහරණ (H.264 සමඟ) තාක්ෂණය ප්රදර්ශනය කිරීමට භාවිතා කරනු ඇත.
1 වන පියවර - රූපය බෙදීම
පළමු පියවර වන්නේ රාමුව කොටස් කිහිපයකට, උප කොටස් සහ ඉන් ඔබ්බට බෙදීමයි.
කුමක් සඳහා ද? බොහෝ හේතු තිබේ. අපි රූපයක් බෙදන විට, කුඩා චලනය වන කොටස් සඳහා කුඩා කොටස් භාවිතා කිරීමෙන් චලන දෛශිකය වඩාත් නිවැරදිව පුරෝකථනය කළ හැකිය. ස්ථිතික පසුබිමක් සඳහා ඔබට විශාල කොටස් වලට සීමා විය හැක.
කෝඩෙක්ස් සාමාන්යයෙන් මෙම කොටස් කොටස් (හෝ කුට්ටි), මැක්රොබ්ලොක් (හෝ කේතීකරණ ගස් කුට්ටි) සහ බහු උප කොටස් වලට සංවිධානය කරයි. මෙම කොටස්වල උපරිම ප්රමාණය වෙනස් වේ, HEVC එය 64x64 ලෙස සකසන අතර AVC 16x16 භාවිතා කරයි, සහ උප කොටස් 4x4 ප්රමාණයන් දක්වා බෙදිය හැක.
පසුගිය ලිපියේ රාමු වර්ග ඔබට මතකද?! බ්ලොක් සඳහාද එය යෙදිය හැකිය, එබැවින් අපට I-ඛණ්ඩයක්, B-බ්ලොක් එකක්, P-මැක්රොබ්ලොක් යනාදිය තිබිය හැකිය.
පුහුණු වීමට කැමති අය සඳහා, රූපය කොටස් සහ උප කොටස් වලට බෙදා ඇති ආකාරය බලන්න. මෙය සිදු කිරීම සඳහා, ඔබට පෙර ලිපියේ දැනටමත් සඳහන් කර ඇති එකක් භාවිතා කළ හැකිය.
2 වන පියවර - අනාවැකි
අංශ ඇති වූ පසු, අපට ඒවා සඳහා ජ්යොතිෂ අනාවැකි කළ හැකිය. සදහා INTER අනාවැකි මාරු කළ යුතුය චලන දෛශික සහ ඉතිරි, සහ INTRA අනාවැකි සඳහා එය සම්ප්රේෂණය වේ අනාවැකි දිශාව සහ ඉතිරිය.
3 වන පියවර - පරිවර්තනය
අපට අවශේෂ බ්ලොක් එකක් (පුරෝකථනය කළ කොටස → සැබෑ කොටස) ලැබුණු පසු, සමස්ත ගුණාත්මක භාවය පවත්වා ගනිමින් ඉවත දැමිය හැකි පික්සෙල් මොනවාදැයි අප දන්නා ආකාරයට එය පරිවර්තනය කළ හැකිය. නිශ්චිත හැසිරීමක් සපයන සමහර පරිවර්තනයන් තිබේ.
වෙනත් ක්රම තිබුණද, අපි ඒවා වඩාත් විස්තරාත්මකව බලමු. විවික්ත කොසයින් පරිවර්තනය (ඩීසීටී - සිට විවික්ත කොසයින් පරිවර්තනය) DCT හි ප්රධාන කාර්යයන්:
- පික්සල් කුට්ටි සමාන ප්රමාණයේ සංඛ්යාත සංගුණක කුට්ටි බවට පරිවර්තනය කරයි.
- අවකාශීය අතිරික්තය ඉවත් කිරීමට උපකාර වන බලය ඝනීභවනය කරයි.
- ආපසු හැරවීමේ හැකියාව ලබා දෙයි.
2 පෙබරවාරි 2017 සින්ට්රා ආර්.ජේ. (Cintra, RJ) සහ Bayer F.M. (Bayer FM) එකතු කිරීම් 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 ක් අවශ්ය වනු ඇත. ඔබ එක් එක් අක්ෂරය එහි කේතය සමඟ ප්රතිස්ථාපනය කරන්නේ නම්, ඔබට ඉතිරියක් ලැබේ!
පළමු පියවර වන්නේ චරිතය සංකේතනය කිරීමයි e10 ට සමාන වන අතර දෙවන අක්ෂරය වේ 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 - bitstream ආකෘතිය
මේ සියල්ල කිරීමෙන් පසු ඉතිරිව ඇත්තේ සිදු කරන ලද පියවරවල සන්දර්භය තුළ සම්පීඩිත රාමු ඉවත් කිරීමයි. කේතකය විසින් ගනු ලබන තීරණ පිළිබඳව විකේතකය පැහැදිලිවම දැනුම් දිය යුතුය. විකේතකයට අවශ්ය සියලුම තොරතුරු සැපයිය යුතුය: බිට් ගැඹුර, වර්ණ අවකාශය, විභේදනය, අනාවැකි තොරතුරු (චලන දෛශික, දිශානුගත INTER අනාවැකිය), පැතිකඩ, මට්ටම, රාමු අනුපාතය, රාමු වර්ගය, රාමු අංකය සහ තවත් බොහෝ දේ.
අපි bitstream ගැන ඉක්මනින් බලමු H.264. අපගේ පළමු පියවර වන්නේ අවම H.264 bitstream එකක් නිර්මාණය කිරීමයි (FFmpeg පෙරනිමියෙන් සියලුම කේතන විකල්ප එකතු කරයි SEI NAL - අපි තව ටිකක් ඉදිරියට එය කුමක්දැයි සොයා බලමු). අපට මෙය අපගේම ගබඩාවක් සහ FFmpeg භාවිතයෙන් කළ හැකිය.
./s/ffmpeg -i /files/i/minimal.png -pix_fmt yuv420p /files/v/minimal_yuv420.h264
මෙම විධානය raw bitstream එකක් ජනනය කරයි H.264 එක් රාමුවක් සමඟ, 64×64 විභේදනය, වර්ණ අවකාශය සමඟ YUV420. මෙම අවස්ථාවේදී, පහත රූපය රාමුවක් ලෙස භාවිතා කරයි.
H.264 bitstream
සම්මත නගරයට ආසන්නව (H.264) මැක්රොෆ්රේම් (ජාල අර්ථයෙන්) ලෙස හඳුන්වනු ලබන තොරතුරු යවනු ඇතැයි තීරණය කරයි nal (මෙය ජාල වියුක්ත මට්ටමකි). NAL හි ප්රධාන අරමුණ වන්නේ "වෙබ් හිතකාමී" වීඩියෝ ඉදිරිපත් කිරීමක් සැපයීමයි. මෙම ප්රමිතිය රූපවාහිනී (ප්රවාහ පාදක), අන්තර්ජාලය (පැකට් මත පදනම් වූ) මත ක්රියා කළ යුතුය.
NAL මූලද්රව්යවල මායිම් නිර්වචනය කිරීම සඳහා සමමුහුර්තකරණ සලකුණක් ඇත. සෑම සමමුහුර්ත ටෝකනයකම අගයක් අඩංගු වේ 0x00 0x00 0x01, සමාන වන පළමු එක හැර 0x00 0x00 0x00 0x01. අපි දියත් කළොත් hexdump උත්පාදනය කරන ලද H.264 bitstream සඳහා, අපි ගොනුවේ ආරම්භයේදී අවම වශයෙන් NAL රටා තුනක් හඳුනා ගනිමු.
ප්රකාශිත පරිදි, විකේතකය රූප දත්ත පමණක් නොව, වීඩියෝව, රාමුව, වර්ණ, භාවිතා කරන ලද පරාමිතීන් සහ තවත් බොහෝ දේ පිළිබඳ විස්තර ද දැන සිටිය යුතුය. එක් එක් NAL හි පළමු බයිටය එහි වර්ගය සහ වර්ගය නිර්වචනය කරයි.
NAL වර්ග හඳුනාගැනීම | විස්තර |
---|---|
0 | නොදන්නා වර්ගය |
1 | IDR නොමැතිව සංකේතාත්මක රූප ඛණ්ඩනය |
2 | සංකේතාත්මක පෙති දත්ත කොටස A |
3 | සංකේතාත්මක පෙති දත්ත කොටස B |
4 | සංකේතාත්මක පෙති දත්ත කොටස C |
5 | IDR රූපයක සංකේතිත IDR කොටස |
6 | SEI දිගුව පිළිබඳ වැඩි විස්තර |
7 | SPS අනුපිළිවෙල පරාමිති කට්ටලය |
8 | PPS රූප පරාමිතීන් කට්ටලයක් |
9 | ප්රවේශ බෙදුම්කරු |
10 | අනුපිළිවෙලේ අවසානය |
11 | නූල් අවසානය |
... | ... |
සාමාන්යයෙන් bitstream එකක පළමු 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, hex=0x64, dec=100) SPS හි NAL යනු ක්ෂේත්රයයි profile_idc, සංකේතකය භාවිතා කළ පැතිකඩ පෙන්වයි. මෙම අවස්ථාවෙහිදී, සීමිත ඉහළ පැතිකඩක් භාවිතා කරන ලදී (එනම්, ද්විපාර්ශ්වික B-කොටස සහය නොමැතිව ඉහළ පැතිකඩක්).
ඔබ bitstream පිරිවිතර දෙස බැලුවහොත් 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) * macroblock_size = 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 (පළමු රාමුව) වේ.
බිට්ස්ට්රීම් එකක් ප්රොටෝකෝලයක් ලෙස සැලකිය හැකිය. ඔබට bitstream ගැන වැඩි විස්තර දැන ගැනීමට අවශ්ය නම්, ඔබ පිරිවිතර වෙත යොමු විය යුතුය ITU H.264. පින්තුර දත්ත තිබෙන තැන පෙන්වන සාර්ව රූප සටහනක් මෙන්න (YUV සම්පීඩිත ආකාරයෙන්).
වැනි අනෙකුත් bitstreams පරීක්ෂා කළ හැක VP9, H.265 (HEVC) හෝ අපගේ නව හොඳම බිට්ස්ට්රීම් පවා AV1. ඔවුන් සියල්ලන්ම සමානද? නැත, නමුත් ඔබ අවම වශයෙන් එකක්වත් තේරුම් ගත් පසු, ඉතිරිය තේරුම් ගැනීම වඩාත් පහසු වේ.
පුහුණු වීමට අවශ්යද? H.264 bitstream ගවේෂණය කරන්න
ඔබට තනි රාමු වීඩියෝවක් ජනනය කළ හැකි අතර bitstream පරීක්ෂා කිරීමට MediaInfo භාවිතා කරන්න H.264. ඇත්ත වශයෙන්ම, බිට් ප්රවාහය විශ්ලේෂණය කරන මූල කේතය දෙස බැලීමෙන් පවා කිසිවක් ඔබව වළක්වන්නේ නැත H.264 (නගරයට ආසන්නව).
පුහුණුවීම් සඳහා, ඔබට Intel Video Pro Analyzer භාවිතා කළ හැකිය (වැඩසටහන ගෙවන බව මම දැනටමත් පවසා තිබේද, නමුත් රාමු 10 ක සීමාවක් සහිත නොමිලේ අත්හදා බැලීමේ අනුවාදයක් තිබේද?).
දළ විශ්ලේෂණය
බොහෝ නවීන කෝඩෙක්ස් අප දැන් අධ්යයනය කළ ආකෘතියම භාවිතා කරන බව සලකන්න. මෙන්න, අපි වීඩියෝ කෝඩෙක්හි බ්ලොක් රූප සටහන දෙස බලමු තෝර්. අප පසු කළ සියලුම පියවර එහි අඩංගු වේ. මෙම සටහනේ සමස්ත කාරණය නම් අවම වශයෙන් ඔබට මෙම ප්රදේශයේ නවෝත්පාදන සහ ලියකියවිලි පිළිබඳ වඩා හොඳ අවබෝධයක් ලබා දීමයි.
මීට පෙර, 139p ගුණාත්මක භාවයෙන් සහ 720 fps හි පැයක් පවතින වීඩියෝ ගොනුවක් ගබඩා කිරීම සඳහා 30 GB තැටි ඉඩක් අවශ්ය වන බව ගණනය කර ඇත. ඔබ මෙම ලිපියේ සාකච්ඡා කර ඇති ක්රම භාවිතා කරන්නේ නම් (අන්තර් රාමු සහ අභ්යන්තර අනාවැකි, පරිවර්තනය, ප්රමාණකරණය, එන්ට්රොපි කේතීකරණය, ආදිය), එවිට ඔබට සාක්ෂාත් කර ගත හැකිය (අපි පික්සලයකට බිටු 0,031 ක් වැය කරන බව මත පදනම්ව), තරමක් වීඩියෝවක් 367,82 GB මතකයක් නොව 139 MB පමණක් වාසය කරන සතුටුදායක ගුණාත්මක භාවය.
H.265 H.264 ට වඩා හොඳ සම්පීඩන අනුපාතයක් ලබා ගන්නේ කෙසේද?
දැන් අපි කෝඩෙක්ස් ක්රියා කරන ආකාරය ගැන වැඩි විස්තර දන්නා නිසා, නව කෝඩෙක්ස් අඩු බිටු සමඟ ඉහළ විභේදන ලබා දිය හැකි ආකාරය තේරුම් ගැනීම පහසුය.
අපි සංසන්දනය කළොත් නගරයට ආසන්නව и HEVC, මෙය සෑම විටම පාහේ වැඩි CPU භාරය සහ සම්පීඩන අනුපාතය අතර තේරීමක් බව මතක තබා ගැනීම වටී.
HEVC වඩා කොටස් (සහ උපවගන්තිය) විකල්ප ඇත නගරයට ආසන්නව, තවත් අභ්යන්තර පුරෝකථන දිශාවන්, වැඩිදියුණු කළ එන්ට්රොපි කේතීකරණය, සහ තවත් දේ. මෙම සියලු වැඩිදියුණු කිරීම් සිදු කර ඇත H.265 වඩා 50% වැඩි සම්පීඩනය කිරීමේ හැකියාව ඇත H.264.
පළමු කොටස: වීඩියෝ සහ රූප සමඟ වැඩ කිරීමේ මූලික කරුණු
මූලාශ්රය: www.habr.com