Ffmpeg में 'q' मान का अधिकतम और न्यूनतम क्या है?


5

जब वीडियो से ffmpeg के माध्यम से एक छवि निकालते हैं, तो नीचे जैसा संदेश मिल सकता है।

frame=    1 fps=0.0 q=2.5 Lsize=N/A time=00:00:00.03 bitrate=N/A 

और उस 'q' मूल्य का अर्थ है "कोडित फ़्रेमों की गुणवत्ता"। मुझे यह कोड ffmpeg.c. (संदर्भ लिंक: http://www.ffmpeg.org/doxygen/trunk/frame_8h_source.html#l00205 ) खोज कर मिला।

और आम तौर पर इसका मान 0.0 से 6.0 के बीच होता है। लेकिन समस्या यह है कि इसे संदर्भ द्वारा बहुत अधिक मूल्य मिल सकता है।
कोड कहता है,

 fprintf(vstats_file, "frame= %5d q= %2.1f ", frame_number, enc->coded_frame->quality / (float)FF_QP2LAMBDA);

और गुणवत्ता मूल्य की सीमा 1 से 32,767 है। और FF_QP2LAMBDA 118 है। इसलिए हम% का अधिकतम मूल्य प्राप्त कर सकते हैं 2.1f 277 से अधिक है। और यह बहुत ही संदिग्ध है ("% 2.1f" के कारण)।

जवाबों:


7

वीडियो एन्कोडिंग के विवरण में बहुत अधिक जाने के बिना, आप एन्कोडेड फ्रेम की गुणवत्ता को व्यक्त करने के लिए क्वांटिज़ेशन पैरामीटर्स (QP) या लैम्बडा पैरामीटर दोनों को देख सकते हैं।

यह आंकड़ा Xiaoyin, चेंग से लिया गया था - विशेष रूप से अनुकूलित एचडीटीवी वीडियो कोडिंग, 2009 । आप दर-विकृति अनुकूलन प्रक्रिया में लैम्बडा के एक बहुस्तरीय गुणक के रूप में सोच सकते हैं ।

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

आपके विशिष्ट मामले में, मैं काफी हद तक निश्चित हूं कि enc->coded_frame->qualityएनकोडर से लैम्बडा मूल्यों को सौंपा गया है। FF_QP2LAMBDAस्थिरांक के साथ आप लैंबडा इकाइयों में परिवर्तित कर सकते हैं, उदाहरण के लिए QP = 21 , फिर λ = 21 ×FF_QP2LAMBDA । दूसरे तरीके से, आप QP = λ /FF_QP2LAMBDA द्वारा QP प्राप्त करते हैं , जो कि आप आउटपुट में देख रहे हैं।

उदाहरण के लिए, H.264 में, मूल संबंध λ = 0.85 × 2 (QP-12) / 3 है । चूंकि QP मान 0 से 51 तक होता है, इसलिए आपको लैम्ब्डा मान 0.053 और 6,963.2 के बीच मिलता है - लेकिन FFmpeg, QP मानों को वैसे भी आउटपुट करेगा, जो लैम्ब्डा को वापस QP में परिवर्तित करता है।

अब, जब आप कहते हैं, "गुणवत्ता मूल्य की सीमा 1 से 32,767 है", तो आपका मतलब है कि संभावित लैंबडा मूल्यों की सीमा। चूंकि लैप्रिंजियन फ़ंक्शन केवल QP के कोडेड मैक्रोब्लॉक पर लागू होने के बाद ही चलन में आता है , इसलिए अधिकतम संख्या के लिए एक व्यावहारिक सीमा है जो coded_picture->qualityप्राप्त कर सकते हैं। उदाहरण के लिए, MPEG-4 भाग 2 में, QP मान 1-31 से जाते हैं, और जैसा मैंने ऊपर कहा, MPEG-4 भाग 10 में, यह 0–51 से है। बदले में, q=सही क्यूपी को फिर से आउटपुट करेगा, क्योंकि संभव लैम्ब्डा मूल्य उस क्यूपी से सीमित हैं जिसे आपने पहले चुना था।


इस तरह की व्याख्या के लिए धन्यवाद। क्या आप ffmpeg योगदानकर्ता में से एक हैं?: DI के पास एक अतिरिक्त प्रश्न है, अगर आपको कोई आपत्ति नहीं है। अब मैं QP (क्वांटिज़ेशन पैरामीटर), लैम्ब्डा, डी (विरूपण) की बुनियादी अवधारणा को समझता हूं, लेकिन 'जे' के बारे में क्या? एक बार फिर धन्यवाद।
जुनेगॉन्ग ओह

मैं वास्तव में कोड में योगदानकर्ता नहीं हूं, यदि आप प्रलेखन और उपयोगकर्ता समर्थन का सिर्फ एक योगदानकर्ता हैं, तो आप :) J केवल लागरेंजियन फ़ंक्शन की लागत है जिसे आप कम से कम करना चाहते हैं। यह मूल रूप से, बुनियादी अनुकूलन गणित है। यह समझा जाता है कि पेपर I ने आपको धारा 1.5.3 में जोड़ा है, लेकिन आपको लगभग किसी भी अच्छे गणित की पाठ्य पुस्तक में इस बारे में सामान्यीकरण मिल जाएगा।
slhck
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.