इसका वीडियो प्लेटफॉर्म ffmpeg और वीडियो एन्कोडिंग गुणवत्ता है। भाग २


लेनना को अच्छा दिखना बहुत पसंद है - एक फैशन मॉडल। ऐसी किंवदंतियाँ हैं जो इसे दृश्य डेटा के प्रसंस्करण से संबंधित लेख के शीर्षक में जोड़कर +5 प्लसस के लिए मौका देती हैं।

मैं वीडियो सेवाओं की सुविधाओं का खुलासा करना जारी रखता हूं। आज एन्कोडिंग विकल्पों और उनके चयन के बारे में नोट करते हैं।

पहला भाग

अधिकांश कोडेक्स काफी संतुलित डिफ़ॉल्ट मान प्रदान करते हैं, जिससे आप मापदंडों के लंबे चयन के बिना एक सामान्य परिणाम प्राप्त कर सकते हैं। हालांकि, जब वीडियो सामग्री के एक बड़े संग्रह की बात आती है, तो बिटरेट पर सीमाएं, क्लाइंट उपकरणों के साथ संगतता के विचार और मूल की गुणवत्ता बनाए रखने की एक उचित इच्छा, सब कुछ अधिक दिलचस्प हो जाता है।

दुर्भाग्य से, जादू बटन "बहुत अच्छी तरह से सांकेतिक शब्दों में बदलना" प्रदान नहीं किया गया है। एन्कोडिंग मापदंडों के लिए कैनिअस एनालॉग की तरह। कोडेक्स की विशेषताओं को समझना होगा।

इंट्रो: प्रोफाइल


H264 के लिए इतनी सारी सेटिंग्स और पैरामीटर हैं कि स्वयं डेवलपर्स, भ्रमित न होने के लिए, अलग-अलग उद्देश्यों के लिए प्रोफाइल की एक सूची - "अच्छा" कॉन्फ़िगरेशन बनाने का फैसला किया। मानक प्रोफाइल ने बहुत कुछ पहचाना; इसके अतिरिक्त, अपने स्वयं के एन्कोडिंग मापदंडों को सेट करके, आप, वास्तव में, अपना स्वयं का प्रोफ़ाइल बनाते हैं, सभी को पूरी तरह से भ्रमित करते हैं। इसलिए, दुर्भाग्य से, यह हमेशा की तरह निकला।



प्रारंभ में, यह निर्धारित करने के लिए प्रोफाइल बनाए गए थे कि क्या अंतिम वीडियो को वांछित प्रकार के डिवाइस पर चलाया जाएगा, लेकिन अब डिवाइस प्रकार और प्रोफ़ाइल द्वारा खिलाड़ियों का कोई अलग विभाजन नहीं है।

व्यवहार में, मैं संसाधन की तीव्रता को कम करने के स्तर से, तीन समूहों के मापदंडों के आधार पर एकल करूँगा:

  • अक्षम CABAC के साथ; सशर्त रूप से मुख्य और आधारभूत प्रोफाइल। वे अभी भी देरी के लिए संवेदनशील स्ट्रीमिंग के लिए इस्तेमाल किया जा सकता है;
  • CABAC सक्षम होने के साथ; अपेक्षाकृत उच्च प्रोफ़ाइल। हर चीज के लिए। अधिकांश आधुनिक (और ऐसा नहीं) उपकरण ऐसी चीज खेल सकते हैं। मुख्य की तुलना में दक्षता में वृद्धि - 20% +;
  • दस-बिट नमूने और अन्य उन्नत मापदंडों के लिए समर्थन के साथ। सशर्त रूप से Hi10P। ऐसे प्रोफाइल के साथ समस्या हार्डवेयर समर्थन की लगभग पूर्ण कमी है और डिकोडिंग उपकरण के लिए बढ़ती आवश्यकताएं हैं; फ़ोन, यहां तक ​​कि टॉप-एंड वाले, ऐसी फ़ाइलों से सामना नहीं कर सकते। यह एक निजी पुस्तकालय के लिए इस्तेमाल किया जा सकता है यदि आप अपने उपकरणों में आश्वस्त हैं। एक और 10-20% दक्षता में वृद्धि।

अन्य कोडेक्स के लिए प्रोफाइल की अवधारणा H264 में विकसित नहीं है। उनके लिए, हम मान सकते हैं कि यदि कोडेक समर्थित है, तो यह पूरी तरह से समर्थित है, और प्लेबैक के दौरान प्रतिबंध केवल एक अत्यधिक उच्च बिटरेट हो सकता है, या एक अन्य पैरामीटर जो स्पष्ट रूप से ओवरस्टैट है। हालाँकि, VP8 और VP9 हार्डवेयर डिकोडर के प्रसार के साथ, स्थिति बदल सकती है।

अब व्यक्तिगत मापदंडों के लिए।

रंग स्थान


रंग अंतरिक्ष की पसंद का कोडिंग दक्षता पर लगभग कोई प्रभाव नहीं है; इस पैरामीटर को कोडेक की पसंद पर छोड़ दिया जा सकता है (कच्चे, गैर-एन्कोडेड डेटा को संसाधित करते समय यह महत्वपूर्ण है) यदि यह एक विशेषता के लिए नहीं है: कई खिलाड़ी बहुत विशेष रूप से रंग अंतरिक्ष जानकारी की प्रक्रिया करते हैं, ताकि अधिकांश उपयोगकर्ताओं के लिए वीडियो रंग विकृतियों के साथ प्रदर्शित हो सके ( ज्यादातर हरा)।

अधिकांश खिलाड़ियों के लिए रंगों को संरक्षित करने के लिए, अलग-अलग स्थानों में अलग-अलग H264 वीडियो को इनकोड करना होगा:

  • एसडी के लिए (चौड़ाई <1280) - BT.601
  • HD के लिए (चौड़ाई> = 1280) - BT.709

2012 से एक उत्कृष्ट अध्ययन है। इस विषय पर। दुर्भाग्य से, इस तरह के कीड़े के साथ स्थिति बहुत धीरे-धीरे बदल रही है, और हालांकि उस लेख के कुछ परीक्षण परिणाम अब प्रासंगिक नहीं हैं, ऐसी सुविधाओं को अभी भी ध्यान में रखना होगा। एक मौका है कि आप इस समय गलत रंगों के साथ वीडियो देखें - और यह पता चलता है कि यह निर्देशक का निर्णय नहीं था।
समस्या H264 डिकोडर्स के लिए जानी जाती है; अन्य प्रारूपों में यह समस्या नहीं हो सकती है।

फ्रेम दर


यदि आपका स्रोत गेम या एक्शन वीडियो की धाराएं नहीं है, तो यह ऊपरी फ्रेम दर को 25-30 फ़्रेम तक सीमित करने के लिए समझ में आता है - जितने कम हैं, उतना ही अधिक डेटा एकल फ्रेम का वर्णन करने के लिए रहता है। एक कारक द्वारा इस मूल्य को कम करना बेहतर है - ताकि फ्रेम स्किप समान हो, अन्यथा वीडियो में मंदी का अनुभव हो सकता है।

वैरिएबल फ्रेम दर के रूप में ऐसी चीज है। वीएफआर के साथ काम करना दो कारणों से असुविधाजनक है: सबसे पहले, यह उच्च आवृत्ति क्षेत्रों में बिटरेट चोटियों को देता है जो तुरंत बफर को खाली करते हैं; दूसरे, VFR रूपांतरण योजना की तैयारी को जटिल बनाता है, क्यू-मापदंडों के उपयोग के लिए मजबूर करता है (मैंने पहले लेख में उनके बारे में लिखा था)।

गोप का आकार


छवि समूह ब्लॉक हैं जिनके भीतर कुछ छवियां दूसरों के डेटा को संदर्भित कर सकती हैं। जीओपी के आकार में वृद्धि मेमोरी की आवश्यकताओं में वृद्धि के बदले कोडेक प्रदर्शन में सुधार करती है। एक ही प्रकार के चक्रीय आंदोलनों के साथ फाइलों के लिए बड़े मूल्य विशेष रूप से प्रभावी हैं (आप जानते हैं कि मेरा क्या मतलब है)। इसके अलावा, बड़े मूल्यों के साथ, वीडियो को रिवाइंड करने में समस्या हो सकती है, क्योंकि अधिक डेटा को पुनर्स्थापित करने की आवश्यकता होगी।
पैरामीटर का नाम, साथ ही माप की इकाइयां, कोडेक से कोडेक में भिन्न हो सकती हैं - प्रलेखन देखें।

स्लाइस


डिकोडिंग (और एन्कोडिंग) को गति देने के लिए, वीडियो को कम रिज़ॉल्यूशन भागों में विभाजित किया जा सकता है। यह विचार है कि एक संकल्प के साथ चार वीडियो को संसाधित करना, उदाहरण के लिए, 1280x720 एक से आसान है, लेकिन 2560x1440। यह FHD से अधिक रिज़ॉल्यूशन पर समझ में आता है। अधिक भागों, कोडेक की दक्षता कम है। साथ ही, इस पृथक्करण का उपयोग बहु-थ्रेडेड प्रसंस्करण को सरल करता है।

एनामॉर्फिक पिक्सल


आयताकार पिक्सेल तब दिखाई देते हैं जब पहलू अनुपात और पिक्सेल चौड़ाई का अनुपात भिन्न होता है - वाइडस्क्रीन डीवीडी, जहां 16: 9 वीडियो का रिज़ॉल्यूशन 704 × 480 (3: 2 एनालॉग वैट और विंड-सही के साथ) है। ऐसे वीडियो चलाने से समस्याएं नहीं होंगी, हालांकि, जब एन्कोडिंग होती है, तो आपको रिज़ॉल्यूशन और पहलू अनुपात दोनों को ध्यान में रखना होगा, अन्यथा दक्षता के नुकसान के साथ एनामॉर्फिक को मानक वर्ग पिक्सेल में बदलना आसान है (~ 35% तक!), या यहां तक ​​कि क्षैतिज रूप से कुछ भी चपटा हुआ है।

बिटरेट नियंत्रण


बिटरेट से जुड़े कोडेक्स के तीन मुख्य तरीके हैं:

  • निरंतर बिटरेट, सीबीआर, जब गुणवत्ता दृश्य की जटिलता के अनुपात में गिरती है;
  • निरंतर गुणवत्ता, const Q VBR, जब बिटरेट दृश्य की जटिलता के अनुपात में बढ़ता है;
  • सीमित बिटरेट और गुणवत्ता - क्लासिक वीबीआर।

यह ध्यान देने योग्य है कि अधिकांश एनकोडर (ffmpeg सहित) कोडर को CBR मोड में सेट नहीं करते हैं जब बिटरेट सेट किया जाता है - फाइलें VBR द्वारा बनाई जाती हैं, तो हमेशा प्रतिबंधों को प्रलेखन में परिभाषित नहीं किया जाता है (CBR मोड को सक्षम किया जाता है, आमतौर पर एक ही टकसाल और अधिकतम सीमा पर)।

ऑनलाइन प्लेबैक के लिए (और स्ट्रीमिंग के लिए) विवश VBR अच्छी तरह से अनुकूल है। यह सीबीआर से बेहतर गुणवत्ता देता है और आपको इंटरनेट चैनल में स्ट्रीम फिट करने की अनुमति देता है।

अधिकतम / मिंट्रेट का विकल्प क्लाइंट के चैनल पर निर्भर करता है, 20% से अधिक का प्रसार करना बेहतर नहीं है।

मल्टी पास कोडिंग


वीबीआर मोड में एक फ़ाइल पर डेटा के वितरण की भविष्यवाणी करना मुश्किल है, कोडेक्स को यह अनुमान लगाना होगा कि हमेशा क्या नहीं होता है। मल्टी-पास मोड में, कोडेक पहले आवश्यक बिट दर को मैप करता है, और फिर एन्कोड करता है। इस तरह, जटिल और गतिशील दृश्यों में वीडियो की गुणवत्ता में सुधार होता है ( उदाहरण के लिए "मोरी" तत्वों की संख्या और दृश्यों के बीच संक्रमण की संख्या पर ध्यान दें)। चूंकि पहली बार कोडक केवल स्रोत फ़ाइल का विश्लेषण करता है, इसलिए लोकप्रिय धारणा के विपरीत, इस मोड में प्रसंस्करण के लिए समय से दोगुना नहीं, बल्कि केवल 10-15% की आवश्यकता होती है।

-tune


विभिन्न प्रकार के स्रोत सामग्री के लिए, कई प्रीसेट तैयार किए गए हैं, जो कुछ बुनियादी कोडिंग मापदंडों को ठीक करते हैं - जैसे कि डीबलॉकिंग फ़िल्टर स्तर, मनो-दृश्य अनुकूलन पैरामीटर। यदि आप पहले से स्रोत के प्रकार को जानते हैं, या यदि आपके पास वीडियो का एक संरचित सेट (बड़े पैमाने पर प्रसंस्करण के मामले में) है, तो इन प्रीसेट्स का उपयोग वीडियो धारणा को बेहतर बनाता है और अच्छी तरह से काम करता है।

प्रीसेट:

  • फिल्म - फिल्मों के लिए और एक जटिल फ्रेम संरचना के साथ सब कुछ। यह निश्चित रूप से एक फिल्म है;
  • एनीमेशन - बड़े ठोस क्षेत्रों वाले वीडियो के लिए। यही है, एनीमेशन प्रीसेट के साथ कोड करना बेहतर है, और यह फिल्म है, इस तथ्य के बावजूद कि एनीमेशन;
  • चित्रण - उन वीडियो के लिए जहां लगभग कोई आंदोलन नहीं है; mp4 प्रारूप में उन गीतों के लिए अच्छा अनुकूलन, जहां एल्बम कवर पूरी वीडियो पृष्ठभूमि है (कोई, उन्हें बताएं कि फ्लैक 10 मिनट के लिए 300 एमबी वजन नहीं कर सकता है!)।
  • अनाज - एन्कोडिंग "शोर" स्रोतों के लिए, जैसे निगरानी कैमरे;
  • psnr / ssim - कोडेक के शेष मापदंडों की प्रभावशीलता का मूल्यांकन करने के लिए;
  • fastdecode - कमजोर उपकरणों के लिए मजबूर मुख्य-प्रोफ़ाइल;
  • zerolatency - जैसा कि नाम का तात्पर्य है, कम-विलंबता स्ट्रीमिंग के लिए।

पिक्सेल प्रारूप


प्रारूप और बिटनेस दृढ़ता से प्रभावित करते हैं कि कैसे फ़ाइलें संकुचित और असम्पीडित हैं, किस रूप में गुणवत्ता खो गई है। पिक्सेल प्रारूप का वर्णन करने वाले मुख्य पैरामीटर हैं:

  • घटकों में रंग को विघटित करने का एक तरीका - YUV, RGB;
  • जब कुछ रंग घटकों को कम रिज़ॉल्यूशन के साथ सहेजा जाता है, तो रंग सबसम्प्लिंग पैरामीटर (ओह कैसे? क्रोमा सबसम्पलिंग अधिक परिचित है);
  • बिट्स में रंग घटकों की गहराई।

पिक्सेल प्रारूप की एक सचेत पसंद के लिए एक अलग विश्लेषण, सामग्री के संग्रह की आवश्यकता होती है और यह स्रोत सामग्री के प्रकार पर अत्यधिक निर्भर है।

संक्षेप में:

  • सभी कोडेक्स (और, सबसे महत्वपूर्ण बात, डिकोडर) संभव प्रारूपों का समर्थन नहीं करते हैं;
  • कुछ स्वरूपों के साथ काम संसाधनों पर अधिक मांग है - Hi10P सिर्फ इस में एक हाई-प्रोफाइल से अलग है;
  • उप-नमूना स्वरूपों के साथ काम करने से संपीड़न दक्षता में एक उल्लेखनीय वृद्धि हो सकती है, लेकिन गुणवत्ता के नुकसान को नियंत्रित करना अधिक कठिन है।

इंटरलेसिंग


इंटरलाकिंग का आविष्कार न्यूनतम लागत पर कथित फ्रेम दर को दोगुना करने के लिए किया गया था - बिटरेट और रिज़ॉल्यूशन समान हैं, लेकिन आवृत्ति अधिक है। हालांकि, तेजी से आंदोलन के साथ, दांत दिखाई देते हैं - पिछले फ्रेम की रेखाएं। आप फ़्रेम को छोड़ने के बिना प्रभाव से छुटकारा पा सकते हैं और फिल्टर के साथ ऊर्ध्वाधर संकल्प को कम नहीं कर सकते हैं, लेकिन वे स्पष्टता को कम कर देंगे। यदि वीडियो ब्राउज़र में चलेगा, तो एन्कोडिंग के दौरान इंटरसेलिंग को फ़िल्टर करना बेहतर है, जैसा कि क्लाइंट पर रीयल-टाइम फ़िल्टरिंग, सर्वोत्तम दृश्य परिणाम नहीं देगा।

यह सब एक साथ रखना


X264 के लिए उदाहरण:

ffmpeg -i [] -c:v libx264 -b:v [bitrate] #  -maxrate [bitrate] #   -r [framerate] -g [size] #GOP   -aspect [,  16:9] #   -profile high #    CABAC -color_primaries bt709 #   ,     -color_trc bt709 -colorspace bt709 -slices 4 #     -threads 4 -tune [value] -map_metadata:g -1 # ,      -map_metadata:s:v -1 -map_metadata:s:a -1 -map_chapters -1 -pass [1|2] #   -passlogfile [file] #    #-map ... -a:c ... -ac ... -a:b ..., ,  -   [] 

बेशक, एक लेख में सब कुछ कवर करना संभव नहीं था, लेकिन मुझे यकीन है कि यह सामग्री कई वीडियो की गुणवत्ता में सुधार करने के लिए पर्याप्त होगी।

प्रलेखन पढ़ें और प्रयोग करें।

सामग्री:

ffmpeg.org/ffmpeg-all.html
en.wikipedia.org/wiki/H.264/MPEG-4_AVC#Profiles
en.wikipedia.org/wiki/Chroma_subsampling
en.wikipedia.org/wiki/Color_space
en.wikipedia.org/wiki/YUV

पिछले लेख के उदाहरण के अलावा, मैंने अपने कोड की एक और स्थापना के बारे में सीखा - क्लिक करें । मैंने इन साइटों से लेख में उदाहरण लेने की कोशिश की, लेकिन इसके बावजूद:
* मैं उल्लिखित साइटों के लेखकों के साथ सीधा संबंध नहीं रखता और अपने विचार और राय साझा नहीं कर सकता। मैं उन फैसलों पर टिप्पणी नहीं कर सकता, जिन पर और कोड तक कैसे पहुंच दी जाती है।

सवालों के जवाब देने के लिए तैयार।

Source: https://habr.com/ru/post/hi437936/


All Articles