FFMPEG का उपयोग करते हुए 1000 की PNG छवियों की एक श्रृंखला से एक असम्पीडित AVI बनाने के लिए कैसे


31

मैं FFMPEG का उपयोग करके 1000 की PNG छवियों की एक श्रृंखला से एक असम्पीडित AVI कैसे बना सकता हूं?

मैंने इस कमांड का उपयोग input.aviपीएनजी फ्रेम की एक श्रृंखला में एक फाइल को बदलने के लिए किया है :

ffmpeg -y -i input.avi  -an -vcodec png  -s 1024x768 pic%d.png`

अब मुझे यह जानने की ज़रूरत है कि उन सभी PNG फ़्रेमों से एक असम्पीडित AVI वीडियो कैसे बनाया जाए। मैंने यह कोशिश की:

ffmpeg -i pic%d.png -y -f avi -b 1150 -s 1024x768 -r 29.97 -g 12 -qmin 3 -qmax 13 -ab 224 -ar 44100 -ac 2 test.avi

लेकिन परिणामी वीडियो मूल AVI के सापेक्ष बहुत अधिक गुणवत्ता खो देता है।

जवाबों:


77

एक "असम्पीडित" AVI को बाहर निकालने के कई तरीके हैं ffmpeg, लेकिन मुझे संदेह है कि आप वास्तव में "दोषरहित" हैं। दोनों ही शब्दों में उनकी परिभाषाओं में एक उचित जगह है, जैसा कि आप देखेंगे।

मैं बिग बक बनी के 720p HD संस्करण के साथ इस चर्चा का लंगर डालने जा रहा हूं , क्योंकि यह एक स्वतंत्र रूप से उपलब्ध वीडियो है जिसके साथ हम सभी परीक्षण कर सकते हैं और परिणाम प्राप्त कर सकते हैं। 24 एफपीएस पर 1280 × 720p वीडियो की कच्ची डेटा दर आपके बताए गए 1024 × 768 के 29.97 एफपीएस लक्ष्य के लगभग बराबर है, इसलिए मेरे परिणाम आपके डेटा पर आपके द्वारा अपेक्षित डेटा दरों के लिए एक बहुत अच्छा मार्गदर्शक होना चाहिए।

उपलब्ध विकल्पों की स्वचालित सूची

निम्नलिखित POSIX कमांड¹ आपको एक सूची देता है जो अधिकतर what से मेल खाती है जो हम नीचे चर्चा करते हैं:

$ ffmpeg -codecs 2> /dev/null | grep '^..EV..S ' | grep -vE 'bitmap|image'

आप अपनी खुद की मशीन पर उस कमांड को चलाना चाह सकते हैं, यह देखने के लिए कि FFmpeg का आपका निर्माण क्या समर्थन करेगा। FFmpeg शायद ही हर संभव एनकोडर सक्षम के साथ बनाया गया है।

अब उन विकल्पों पर चर्चा करते हैं।

पूरी तरह से असम्बद्ध

यदि "असम्पीडित" की अपनी परिभाषा प्रपत्र वीडियो सही है इससे पहले कि यह एक डिजिटल प्रदर्शन से फोटॉनों में बदल गया है, सबसे करीब मैं में देखते ffmpeg -codecsसूची हैं -c:v r210, r10k, v410, v308, ayuvऔर v408। ये सभी समान रूप से समान हैं, केवल रंग गहराई , रंग स्थान और अल्फा चैनल समर्थन में भिन्न हैं ।

  • R210 और R10K 4: 4: 4 आरजीबी 10 बिट प्रति घटक (बीपीसी) पर हैं, इसलिए इन दोनोंको मेरे परीक्षण में 720p के लिएलगभग 708 Mbit / s की आवश्यकता है। (यह प्रति घंटे, टीबी के बारे में है, दोस्तों!)

    ये कोडेक्स दोनों पिक्सेल द्वारा 3 × 10 बिट रंग घटकों को कंप्यूटर द्वारा हेरफेर में आसानी के लिए 32-बिट मान में पैक करते हैं, जो पावर-ऑफ -2 आकार की तरह है। इन कोडेक्स के बीच एकमात्र अंतर 32-बिट शब्द का है जो दो अप्रयुक्त बिट्स पर है। यह तुच्छ अंतर नि: संदेह है क्योंकि वे प्रतिस्पर्धी कंपनियों, Blackmagic Design और AJA वीडियो सिस्टम से आते हैं।

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

  • V410 अनिवार्य रूप से R210 / R10K का सिर्फ YUV संस्करण है; उनकी डेटा दरें समान हैं। यह कोडेक फिर भी तेजी से एनकोड कर सकता है, क्योंकि ffmpegआपके इनपुट फ्रेम के कलर स्पेस और इस कलर स्पेस के बीच एक त्वरित रंग स्थान रूपांतरण पथ होने की अधिक संभावना है।

    मैं इस कोडेक की सिफारिश नहीं कर सकता, हालांकि, जब से मैं किसी भी सॉफ़्टवेयर में खेलने के लिए परिणामी फ़ाइल प्राप्त करने में असमर्थ था, यहां तक ​​कि साथ AJA और Blackmagic भी स्थापित।

  • V308 V410 का 8 bpc वैरिएंट है, इसलिए यहमेरे परीक्षण में 518 Mbit / s पर आता है। V410 के साथ, मैं सामान्य वीडियो प्लेयर सॉफ़्टवेयर में वापस खेलने के लिए इन फ़ाइलों को प्राप्त करने में असमर्थ था।

  • AYUV और V408 अनिवार्य रूप से V308 जैसी ही चीज हैं, सिवाय इसके कि उनमें एक अल्फा चैनल शामिल है, चाहे इसकी आवश्यकता हो या नहीं! यदि आपका वीडियो पारदर्शिता का उपयोग नहीं करता है, तो इसका मतलब है कि आप ऊपर दिए गए 10 bpc R210 / R10K कोडक के आकार का जुर्माना गहरे रंग की जगह का लाभ प्राप्त किए बिना चुका सकते हैं।

    AYUV में एक गुण है: यह विंडोज मीडिया में एक "देशी" कोडेक है, इसलिए इसे खेलने के लिए विशेष सॉफ्टवेयर की आवश्यकता नहीं है।

    V408 को उसी तरह से क्विकटाइम के लिए देशी माना जाता है, लेकिन V408 फ़ाइल मेरे मैक पर QuickTime 7 या 10 में नहीं चलेगी।

इसलिए, यह सब एक साथ रखना, अगर आपके पीएनजी का नाम frame0001.pngऔर आगे है:

$ ffmpeg -i frame%04d.png -c:v r10k output.mov
  ...or...                -c:v r210 output.mov
  ...or...                -c:v v410 output.mov
  ...or...                -c:v v408 output.mov
  ...or...                -c:v v308 output.mov
  ...or...                -c:v ayuv output.avi

ध्यान दें कि मैंने एवीयू के मामले में एवीआई को निर्दिष्ट किया है, क्योंकि यह बहुत अधिक विंडोज-केवल कोडेक है। अन्य लोग क्विक या एवीआई में काम कर सकते हैं, जो आपके मशीन पर कोडेक्स पर निर्भर करता है। यदि एक कंटेनर प्रारूप काम नहीं करता है, तो दूसरे का प्रयास करें।

ऊपर दिए गए आदेश - और जो नीचे हैं, वे भी - मान लें कि आपके इनपुट फ़्रेम पहले से ही उसी आकार के हैं जैसे आप अपने आउटपुट वीडियो के लिए चाहते हैं। यदि नहीं, -s 1280x720तो आउटपुट फ़ाइल नाम से पहले कमांड में कुछ जोड़ें ।

संकुचित RGB, लेकिन हानिरहित भी

अगर, जैसा कि मुझे संदेह है, तो आप वास्तव में "असम्पीडित" के बजाय "दोषरहित" मतलब रखते हैं, उपरोक्त में से किसी से भी बेहतर विकल्प Apple क्विक एनिमेशन है , इसके माध्यम से-c:v qtrle

मुझे पता है कि आपने कहा था कि आप एक AVI चाहते थे, लेकिन तथ्य यह है कि आप शायद यहाँ उल्लेखित किसी भी AVI-आधारित फ़ाइल स्वरूपों को पढ़ने के लिए विंडोज मशीन पर एक कोडेक स्थापित करने जा रहे हैं, जबकि QuickTime के साथ वीडियो का मौका है आपकी पसंद का ऐप पहले से ही जानता है कि एक क्विकटाइम एनीमेशन फ़ाइल कैसे खोलें। (उपर्युक्त AYUV कोडेक अकेला अपवाद है, जिसके बारे में मुझे पता है, लेकिन इसकी डेटा दर बहुत अधिक है, केवल AVI का लाभ पाने के लिए।)

ffmpegqtrleआप के लिए एक AVI कंटेनर में सामान जाएगा , लेकिन परिणाम बहुत व्यापक रूप से संगत नहीं हो सकता है। मेरे परीक्षण में, क्विकटाइम प्लेयर इस तरह की फाइल के बारे में थोड़ी जानकारी देगा, लेकिन यह तब इसे खेलता है। अजीब तरह से, हालांकि, वीएलसी इसे नहीं निभाएगा , भले ही यह भाग पर आधारित हो ffmpeg। मैं इस codec के लिए qt कंटेनरों से चिपक जाऊंगा।

क्विक एनीमेशन एनीमेशन कोडेक एक तुच्छ आरएलई योजना का उपयोग करता है , इसलिए सरल एनिमेशन के लिए, इसे नीचे के साथ-साथ हफ़्फ़ुव के बारे में भी करना चाहिए। प्रत्येक फ्रेम में जितने अधिक रंग होंगे, उतना ही यह पूरी तरह से असम्पीडित विकल्पों के बिट दर तक पहुंच जाएगा। बिग बक बनी के साथ अपने परीक्षण में, मैं आरजीबी 4: 4: 4 मोड में, के माध्यम से ffmpegमुझे 165 Mbit / s फ़ाइल देने में सक्षम था -pix_fmt rgb24

यद्यपि यह प्रारूप संकुचित है, यह आपकी PNG इनपुट फ़ाइलों को समान आउटपुट पिक्सेल मान देगा, उसी कारण से कि PNG का दोषरहित संपीड़न पिक्सेल मानों को प्रभावित नहीं करता है।

ffmpegQuickTime एनीमेशन कार्यान्वयन भी समर्थन करता है -pix_fmt argb, जो आप 4 हो जाता है: 4: 4: 4 आरजीबी, यह अर्थ एक अल्फा चैनल है। बहुत ही खुरदुरे ढंग से, यह -c:v ayuvऊपर बताए अनुसार, क्विकटाइम के बराबर है । दोषरहित संपीड़न के कारण, हालांकि, यह केवल 214 Mbit / s की बात आती है , जो गुणवत्ता या विशेषताओं में शून्य हानि के साथ AYUV के डेटा दर से कम है।

प्रति पिक्सेल 24 से कम बिट्स के साथ क्विकटाइम एनीमेशन के वेरिएंट हैं , लेकिन वे उत्तरोत्तर सरल एनीमेशन शैलियों के लिए सबसे अच्छा उपयोग करते हैं। ffmpegयुक्ति द्वारा परिभाषित अन्य स्वरूपों में से केवल एक का समर्थन करने के लिए प्रकट होता है -pix_fmt rgb555be, जिसका अर्थ है 15 बीपी बड़े-एंडियन आरजीबी। यह कुछ वीडियो के लिए सहनीय है, और अधिकांश पेंचकस कैप्चर और सरल एनिमेशन के लिए ठीक है। यदि आप रंग की जगह को स्वीकार कर सकते हैं, तो आपको इसकी 122 Mbit / s डेटा दर आकर्षक लग सकती है।

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

$ ffmpeg -i frame%04d.png -c:v qtrle -pix_fmt rgb24    output.mov
  ...or...                           -pix_fmt argb     output.mov
  ...or...                           -pix_fmt rgb555be output.mov

प्रभावी रूप से दोषरहित: YUV चाल

अब, RGB और 4: 4: 4 YUV के बारे में बात यह है कि ये एन्कोडिंग कंप्यूटरों को प्रोसेस करने के लिए बहुत आसान हैं, लेकिन वे मानव दृष्टि के बारे में एक तथ्य को अनदेखा करते हैं, जो यह है कि हमारी आँखें काले और सफेद रंग के अंतर की तुलना में अधिक संवेदनशील हैं। ।

इसलिए वीडियो स्टोरेज और डिलीवरी सिस्टम लगभग हमेशा बिटुमिनस जानकारी की तुलना में रंगीन जानकारी के लिए प्रति पिक्सेल कम बिट्स का उपयोग करते हैं। इसे क्रोमा सबसम्पलिंग कहा जाता है । सबसे आम योजनाएं 4: 2: 0 और 4: 2: 2 हैं।

4: 2: 0 YUV की डेटा दर काले और सफेद (Y केवल) असम्पीडित वीडियो और 4: 4: 4 RGB या YUV के डेटा दर की तुलना में 50% अधिक है।

4: 2: 2 एक तरह का आधा बिंदु है जो 4: 2: 0 और 4: 4: 4 के बीच है। यह वाई-ओनली वीडियो का डेटा दर और:: ४: ४ का डेटा दर है।

आप कभी-कभी पुराने DV कैमरा मानक के रूप में 4: 1: 1 भी देखते हैं । 4: 1: 1 में 4: 2: 0 के रूप में एक ही असम्पीडित डेटा दर है, लेकिन रंग जानकारी अलग तरीके से व्यवस्थित की गई है।

इस सबका मुद्दा यह है कि यदि आप 4: 2: 0 H.264 फ़ाइल से शुरुआत कर रहे हैं, तो इसे 4: 4: 4 पर पुनः एन्कोडिंग करें। असम्पीडित RGB आपको 4: 2: 0 पर दोषरहित रूप से संकुचित YUV से अधिक कुछ नहीं खरीदता है। यह सच है भले ही आपको पता हो कि आपका वर्कफ़्लो अन्यथा 4: 4: 4 आरजीबी है, क्योंकि यह एक तुच्छ रूपांतरण है; वीडियो हार्डवेयर और सॉफ्टवेयर नियमित रूप से फ्लाई पर ऐसे रूपांतरण करते हैं।

आपको वास्तव में केवल 4: 4: 4 की आवश्यकता होती है जब आप पिक्सेल झांक रहे होते हैं या आप वीडियो पर पिक्सेल-स्तरीय रंग परिवर्तन कर रहे होते हैं, और आपको सटीक पिक्सेल मानों को संरक्षित करने की आवश्यकता होती है। उदाहरण के लिए, 4: 4: 4 पिक्सेल प्रारूप के साथ दृश्य प्रभाव (वीएफएक्स) काम करना आसान है, इसलिए उच्च अंत वीएफएक्स घर अक्सर उच्च डेटा दरों को सहन करने के लिए तैयार होते हैं जिनकी उन्हें आवश्यकता होती है।

प्रभावी रूप से दोषरहित: कोडेक विकल्प

एक बार जब आप अपने आप को वाईयूवी कोडेक्स के साथ रंग अपघटन के लिए खोलते हैं, तो आपके विकल्प भी खुल जाते हैं। ffmpegकई प्रभावी रूप से दोषरहित कोडेक्स हैं।

Huffyuv

सबसे व्यापक रूप से संगत विकल्प हफ़ुवि है । आप इसके माध्यम से प्राप्त करें -c:v huffyuv

मूल विंडोज Huffyuv कोडेक केवल दो पिक्सेल स्वरूपों का समर्थन करता है: RGB24 और YUV 4: 2: 2। (वास्तव में, यह YUV 4: 2: 2 के दो फ्लेवर का समर्थन करता है, केवल डिस्क पर बाइट्स के क्रम में भिन्न होता है।)

FFmpeg Huffyuv कोडेक के पुराने संस्करणों में RGB24 समर्थन शामिल नहीं था, इसलिए यदि आप इसे आज़माते हैं और FFmpeg आपको बताता है कि यह yuv422pपिक्सेल प्रारूप का उपयोग करने जा रहा है , तो आपको अपग्रेड करने की आवश्यकता है।

FFmpeg में FFVHuff नाम का एक Huffyuv वैरिएंट कोडेक भी है, जो YUV 4: 2: 0 को सपोर्ट करता है। यह संस्करण Windows DirectShow Huffyuv कोडेक के साथ संगत नहीं है, लेकिन इसे libavcodecVLC जैसे किसी भी सॉफ़्टवेयर पर आधारित होना चाहिए ।

  • RGB24 - RGB 4: 4: 4 अनिवार्य रूप से क्विक एनिमेशन के RGB24 कलर स्पेस विकल्प के समान है। किसी दिए गए फ़ाइल के लिए संपीड़न में दो कोडेक कुछ हद तक भिन्न होंगे, लेकिन वे आमतौर पर करीब होंगे।

    यह भी अनिवार्य रूप से Y30 4: 4: 4 मोड के समान ही है, जिसका उपयोग V308 विकल्प द्वारा किया गया है। रंग अंतरिक्ष अंतर कोई व्यावहारिक अंतर नहीं बनाता है, क्योंकि रंग अंतरिक्ष रूपांतरण वास्तविक समय में करना आसान है।

    Huffyuv के दोषरहित संपीड़न के कारण, मुझे RGB24 मोड में लगभग 251 Mbit / s को संपीड़ित करने के लिए एक परीक्षण वीडियो प्राप्त करने में सक्षम था , समान दृश्य गुणवत्ता के साथ जो आपको V308 या AYUV से मिलेगा। यदि एवीआई आपके लिए एक संपूर्ण होना चाहिए , तो ह्युफीव कोडेक को स्थापित करना संभवतः आयुवी के 3 × डेटा दर लागत का भुगतान करने की तुलना में कम दर्दनाक है।

  • YUV 4: 2: 2 - यह मोड RGB24 की तुलना में वीडियो के लिए कहीं अधिक व्यावहारिक है, जो निस्संदेह है कि ffmpegडेवलपर्स ने इसे पहले लागू करने के लिए क्यों चुना। जैसा कि आप ऊपर चर्चा की गई सैद्धांतिक discussed कटौती से उम्मीद करेंगे, मेरी परीक्षण फ़ाइल 173 Mbit / s तक एन्कोडेड है । यह वास्तव में बहुत much है, यदि आप इस तथ्य को ध्यान में रखते हैं कि इन दो परीक्षणों के बीच ऑडियो ट्रैक अपरिवर्तित था।

  • YUV 4: 2: 0 - यह विकल्प रंग की जानकारी को 4: 2: 2 से अधिक करता है, मेरे परीक्षण में डेटा की दर 133 Mbit / s तक गिर जाती है ।

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

$ ffmpeg -i frame%04d.png -c:v huffyuv -pix_fmt rgb24   output.avi
  ...or...                             -pix_fmt yuv422p output.avi
  ...or...                -c:v ffvhuff -pix_fmt yuv420p output.avi

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

यूट वीडियो

Huffyuv और FFVHuff यूट वीडियो के समान आत्मा में एक और हालिया विकल्प है । Huffyuv की तरह, एक विंडोज वीडियो कोडेक है जिसका अर्थ है कि कोई भी विंडोज प्रोग्राम जो मूवी चला सकता है, इस कोडेक को इंस्टॉल किए गए कोडेक के साथ वीडियो चला सकता है। Huffyuv के विपरीत, एक मैक वीडियो कोडेक भी है, इसलिए आप FFmpeg पर आधारित सॉफ़्टवेयर या libavcodecMac पर इन फ़ाइलों को पढ़ने के लिए प्रतिबंधित नहीं हैं ।

यह कोडेक रंग रिक्त स्थान के मामले में बहुत लचीला है, इसलिए मैं सिर्फ आम रंग स्थानों के कुछ उदाहरण दूंगा:

  • 4: 4: 4 RGB के माध्यम -f avi -c:v utvideo -pix_fmt rgb24से 178 Mbit / sec आउटपुट देता है

  • 4: 4: 4 YUV के माध्यम -f avi -c:v utvideo -pix_fmt yuv444pसे 153 Mbit / sec आउटपुट देता है

  • 4: 2: 2 YUV के माध्यम -f avi -c:v utvideo -pix_fmt yuv422pसे 123 Mbit / sec आउटपुट देता है

  • 4: 2: 0 YUV के माध्यम -f avi -c:v utvideo -pix_fmt yuv420pसे 100 Mbit / sec आउटपुट देता है

मुझे संदेह है कि 4: 4: 4 YUV इस टेस्ट में 4: 4: 4 RGB से बेहतर करता है, इन दोनों के तकनीकी रूप से समकक्ष होने के बावजूद क्योंकि स्रोत वीडियो 4: 2: 0 YUV है, इसलिए YUV प्रारूप में डेटा की व्यवस्था करने से बेहतर दोषरहित संपीड़न की अनुमति मिलती है आंशिक रूप से बेमानी यू और वी चैनलों को एक साथ फाइल में ग्रुप करके।

FFV1

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

डिफ़ॉल्ट रूप से, ffmpegFFV1 जैसे लचीले कोडेक का उपयोग करते समय आपकी इनपुट फ़ाइलों के रंग स्थान को संरक्षित करेगा, ताकि यदि आप इसे आधिकारिक बिग बक बनी MP4 फ़ाइलों में से एक को खिलाएं, जो 4: 2: 0 YUV का उपयोग करें, तो आपको यही मिलेगा। जब तक आप -pix_fmtझंडा नहीं देंगे ffmpeg। यह 63 Mbit / s आउटपुट फ़ाइल में परिणाम करता है।

यदि आप FFV1 को 4: 4: 4 YUV रंग स्थान के साथ उपयोग करने के लिए बाध्य करते हैं -pix_fmt yuv444p, तो फ़ाइल का आकार केवल 86 Mbit / sec तक जाता है , लेकिन यह हमें इस मामले में कुछ भी नहीं खरीद रहा है क्योंकि हम 4: 2: 0 मूल से एन्कोडिंग कर रहे हैं । हालाँकि, यदि आप मूल प्रश्न के अनुसार PNGs के एक सेट में फीड करते हैं, तो आउटपुट फ़ाइल bgraया bgr0कलर स्पेस का उपयोग करने की संभावना है , जो ऊपर लाए गए रंग argbऔर rgb24रिक्त स्थान के पुनर्व्यवस्था हैं ।

दोषरहित ह 64२६४ 64

एक और दिलचस्प विकल्प दोषरहित H.264 है । यह इस लेखन के रूप में एक बहुत ही एक x264- केवल एक चीज है, लेकिन एन्कोडिंग पक्ष पर FFmpeg का उपयोग करने वालों को अन्य सॉफ़्टवेयर का उपयोग करने की संभावना है libx264जो डिकोडिंग पक्ष पर भी शामिल हैं, जैसे कि VLC।

ऐसी फ़ाइल प्राप्त करने का सबसे सरल तरीका है:

$ ffmpeg -i frame%04d.png -c:v libx264 -qp 0 -f mp4 output.mp4

-qp 0झंडा कुंजी है: उच्च मूल्यों हानिपूर्ण संपीड़न दे। (आप -crf 0एक ही प्रभाव प्राप्त करने के लिए भी दे सकते हैं ।)

FFV1 के साथ, ffmpegइनपुट कलर स्पेस को देखते हुए सबसे अच्छे आउटपुट कलर स्पेस का अनुमान लगाने की कोशिश करेंगे, इसलिए ऊपर दिए गए परिणामों की तुलना में, मैंने अलग-अलग कलर स्पेस के साथ बिग बक बनी सोर्स फाइल पर मल्टीपल इनकोड पास चलाया:

  • yuv444p : ffmpegमूल प्रश्न के अनुसार, जब आप इसे RGB PNG स्ट्रीम देते हैं, तो यह चुनता है, और हमारी परीक्षा फ़ाइल के साथ 44 Mbit / sec फ़ाइल में परिणाम होता है।

  • yuv422p : यह Huffyuv के लिए डिफ़ॉल्ट रंग स्थान के समान है, लेकिन हमें इस मामले में 34 Mbit / sec फ़ाइल मिलती है , काफी बचत!

  • yuv420p : यह बिग बक बनी आधिकारिक MP4s के लिए डिफ़ॉल्ट है, जिसका मैं परीक्षण कर रहा हूं, और परिणाम 29 Mbit / sec फ़ाइल में है।

खबरदार कि आप इस तरह के छोटे फ़ाइल आकार प्राप्त करने के लिए बहुत अधिक संगतता का व्यापार कर रहे हैं। इसलिए मैंने इसे एवीआई या एमओवी कंटेनर में रखने की कोशिश करने की जहमत नहीं उठाई। यह इतनी बारीकी से x264 से जुड़ा हुआ है कि आप इसके मानक कंटेनर प्रकार (MP4) का उपयोग कर सकते हैं। आप इसके लिए मटरोस्का जैसी किसी चीज़ का भी इस्तेमाल कर सकते हैं ।

आप जोड़कर तेजी से एन्कोडिंग समय के लिए उस बिट दर में से कुछ का व्यापार कर सकते हैं -preset ultrafast। कि मेरी परीक्षण फ़ाइल की दर YUV 4: 2: 2 मोड में 44 Mbit / s तक बढ़ गई , लेकिन जैसा कि वादा किया गया था, बहुत तेज़ी से एन्कोड किया गया। डॉक्स का दावा है कि -preset veryslowयह भी सार्थक है, लेकिन इसके परिणामस्वरूप बहुत कम समय के लिए जगह बच जाती है, जबकि इससे बहुत कम समय बचता है; मैं इसकी सिफारिश नहीं कर सकता।

अन्य लोग

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

अवधारणात्मक रूप से दोषरहित: या, आप संभवतः कुछ नुकसान के साथ दूर हो सकते हैं

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

  • Apple PrRes :-c:v proresया-c:v prores_ks- ProRes एक प्रोफाइल-आधारित कोडेक है, जिसका अर्थ है कि कई वेरिएंट हैं, जिनमें से प्रत्येक एक अलग गुणवत्ता बनाम अंतरिक्ष व्यापार के साथ है:

    • Prores 4444 केवल 114 Mbit / s का उपयोग करके हमारे परीक्षण वीडियो को एन्कोड करता है, फिर भी VFX गुणवत्ता है । वर्तमानprores*में FFmpeg मेंतीन अलग-अलग कोड हैं, लेकिन केवलprores_ksProres 4444 का समर्थन करता है, जैसा कि मैंने-profile:v 4444विकल्प केमाध्यम से लिखाहै।

      यदि आप सोच रहे हैं कि आप क्यों परेशान होंगे Prores 4444 दोषरहित H.264 पर, यह संगतता, डिकोडिंग गति, पूर्वानुमेयता और अल्फा चैनल के लिए नीचे आता है।

    • Prores 422 और भी अधिक स्थान बचाता है, केवल 84 Mbit / s की आवश्यकता है ताकि आप बता सकें कि Prores 4444 केवल पिक्सेल- peeping द्वारा। जब तक आपको अल्फा चैनल द्वारा की पेशकश की आवश्यकता है Prores 4444, शायद कोई कारण नहीं है पर जोर देने के लिए Prores 4444।

      Prores 422 दोषरहित H.264 विकल्प के ऊपर एक करीबी प्रतियोगी है, क्योंकि न तो अल्फा चैनल का समर्थन करता है। यदि आप Apple Pro वीडियो ऐप्स, एन्कोडिंग और डिकोडिंग के लिए कम CPU ओवरहेड, या पूर्वानुमान योग्य बिट दर के साथ संगतता चाहते हैं, तो आप PrRes की उच्च बिट दर को सहन करना चाहते हैं। उदाहरण के लिए, हार्डवेयर एनकोडर के साथ उत्तरार्द्ध महत्वपूर्ण है। दूसरी ओर, यदि आप दोषरहित H.264 की संगतता समस्याओं से सामना कर सकते हैं, तो आपको 4: 2: 0 रंग स्थान का उपयोग करने का विकल्प मिलता है, जो किसी भी Prores प्रोफ़ाइल से विकल्प नहीं है।

      FFmpeg में सभी तीन Prores एनकोडर का समर्थन करते हैं Prores 422 प्रोफ़ाइल, इसलिए सबसे सरल विकल्प का उपयोग करना है -c:v prores, बजाय -c:v prores_ks -profile hq, या prores_ksसही काम करने के लिए ऑटो-प्रोफाइल सुविधा पर निर्भर है।

    वहाँ और भी अधिक प्रशंसनीय हैं Prores प्रोफाइल, लेकिन वे या तो एसडी वीडियो के लिए या पूर्ण-Res फ़ाइलों के लिए परदे के पीछे के रूप में हैं ।

    Prores के साथ मुख्य समस्या यह है कि यह अभी तक Apple और समर्थक वीडियो दुनिया के बाहर व्यापक समर्थन नहीं है।

  • है AVID dnxhd एक समान codec है Prores, लेकिन करने के लिए बंधा नहीं है Apple Pro वीडियो दुनिया। AVIDदोनों Windows और Macintosh के लिए स्वतंत्र रूप से डाउनलोड करने योग्य कोडेक प्रदान करता है, और FFmpeg अब इसके माध्यम से समर्थन करता है-c:v dnxhd

    क्योंकि DNxHD एक प्रोफाइल-आधारित कोडेक है जैसे Prores, आप पूर्वनिर्धारित सेट से प्रोफ़ाइल चुनते हैं , और यह कोडेक को बताता है कि किस फ्रेम का आकार, फ्रेम दर, और बिट दर का उपयोग करना है। बिग बक बनी परीक्षण फ़ाइल के लिए, -b:v 60Mप्रोफ़ाइल सबसे उपयुक्त है। अप्रत्याशित रूप से, परिणामी फ़ाइल लगभग 59 Mbit / s है

  • कम-नुकसान MJPEG :-vcodec mjpeg -qscale:v 1- यह दोषरहित JPEG से कहीं अधिक सामान्य है। वास्तव में, यह एक काफी सामान्य वीडियो संपादन कोडेक था, और यह अभी भी अक्सर नेटवर्क स्ट्रीमिंग वीडियो कैमरों जैसी चीजों द्वारा उपयोग किया जाता है। वह सब इतिहास का मतलब है कि यह सॉफ़्टवेयर का पता लगाना आसान है जो इसका समर्थन करता है।

    इस कोडेक से डेटा दरों में काफी व्यापक परिवर्तनशीलता की अपेक्षा करें। एक परीक्षण जो मैंने अभी यहां बनाया है, उसने मुझे 720p वीडियो के लिए 25 Mbit / s दिया । मुझे नुकसान के बारे में परेशान करने के लिए यह पर्याप्त उच्च संपीड़न है, लेकिन यह मुझे बहुत अच्छा लगा। अकेले डेटा दर के आधार पर, मैं कहूंगा कि यह शायद बराबर गुणवत्ता के हिसाब से 12 Mbit / s MPEG-2 या 6 Mbit / s.2.264 पर है।

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

$ ffmpeg -i frame%04d.png -c:v prores_ks -profile:v 4444 output.mov
  ...or...                -c:v prores_ks -profile:v hq   output.mov
  ...or...                -c:v prores                    output.mov
  ...or...                -c:v dnxhd -b:v 60M            output.mov
  ...or...                -c:v mjpeg -qscale:v 1         output.avi

इन विधियों पर नीचे की रेखा यह है कि जब तक आप कुछ बहुत मांग नहीं कर रहे हैं, "अच्छा पर्याप्त" वास्तव में काफी अच्छा है।


फुटनोट्स और डिजीज

  1. कमांड को लिनक्स, मैकओएस, बीएसडी और यूनिक्स पर दिया जाना चाहिए। यदि आप Windows पर हैं, तो आप Cygwin या WSL के माध्यम से POSIX कमांड लाइन प्राप्त कर सकते हैं ।

  2. कई कारण हैं कि उस कमांड द्वारा बनाई गई सूची उन कोडेक्स के सेट से पूरी तरह मेल नहीं खाती है जिन्हें मैंने ऊपर चर्चा करने के लिए चुना है:

    • दूसरा इस सूची में टैग किए जाने के बावजूद grepअनुपयुक्त bmpवीडियो को फ़िल्टर करने के लिए है, जो "वीडियो" कोडेक्स नहीं हैं V। जबकि तकनीकी रूप से आप इनमें से कई को एवी, एमपी 4, या एमकेवी जैसे कंटेनर में सिंगल-फाइल वीडियो प्राप्त करने के लिए भर सकते हैं, वह फ़ाइल संभवतः किसी प्रोग्राम के आधार पर ffmpegया किसी प्रोग्राम के आधार पर पढ़ने योग्य नहीं होगी libavcodec

      इस के लिए कुछ अपवाद हैं, जैसे कि -f avi -c:v ljpegकुछ देता है जिसे आप "दोषरहित MJPEG" कह सकते हैं, लेकिन एक नियम के रूप में, हम एक फिल्म बनाने के लिए यहां ए / वी कंटेनर में कई स्थिर छवि फ़ाइलों को भरने में रुचि नहीं रखते हैं। हम यहां व्यापक रूप से मान्यता प्राप्त वीडियो कोडेक्स चाहते हैं, सिमेंटिक प्रवंचना नहीं।

    • वर्तमान में आदेश कुछ अनुपयुक्त एन्कोडर जैसे कि GIF को फ़िल्टर करने में विफल रहता है क्योंकि उन्हें वर्तमान में ffmpeg -codecsआउटपुट के रूप में bitmapया imageफ़ाइल स्वरूपों में वर्णित नहीं किया गया है।

      जीआईएफ एक दिलचस्प मामला है: यह गति प्लेबैक के लिए समय की जानकारी के साथ एकल जीआईएफ फ़ाइल में कई छवि फ़्रेमों का समर्थन करता है, लेकिन कई कारणों से, यह हमारी चर्चा के लिए पूरी तरह से अनुपयुक्त है।

    • विकल्प दिखाए जाते हैं कि के कुछ जैसे, अप्रचलित या वास्तव में कभी नहीं ज्यादा कर्षण मिल रहे हैं flashsv, diracऔर snow, तो यह ऊपर उन्हें चर्चा करने योग्य नहीं है।

    • उस सूची में से कुछ विकल्प केवल ffmpegउदाहरणों के बीच या ffmpegकिसी अन्य प्रोग्राम के बीच पाइपलाइनों में उपयोग के लिए हैं , जैसे कि rawvideoऔर wrapped_avframe, और इसलिए हमारे उद्देश्यों के लिए अनुपयुक्त हैं।

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


1
कई कोशिश करने के बाद, एक को खोजने के लिए कई असम्पीडित / दोषरहित प्रारूप जो After Effects आयात करेंगे, आपके क्विकटाइम ने आखिरकार ऐसा किया। संदर्भ के लिए यह था ffmpeg -i input.avi -c:v qtrle -pix_fmt rgb24 output.mov
felwithe

9

इसलिए मैंने अपना जवाब बहुत लंबा कर दिया।
टीएल; डीआर सारांश: दोषरहित रूप से छवियों के एक क्रम को संग्रहीत करने के लिए, उपयोग libx264या libx264rgbसाथ -preset ultrafast -qp 0। यह लगभग कम बिटरेट के साथ ffvhuff जितना तेज़ है, और तेज़ी से डिकोड होता है। huffyuvअधिक व्यापक रूप से ffmpeg के बाहर समर्थित है, लेकिन कई पिक्सेल प्रारूपों का समर्थन नहीं करता है ffvhuff। इसलिए h.264 का उपयोग करने का एक और कारण है, यह मानते हुए कि आपके अन्य उपकरण h.264 High 4:4:4 Predictiveप्रोफ़ाइल को संभाल सकते हैं जो x264 दोषरहित मोड में उपयोग करता है। x264 इंट्रा-केवल तभी कर सकते हैं जब मनमाने ढंग से फ्रेम तक तेजी से यादृच्छिक पहुंच की आवश्यकता होती है।

छवियों की एक निर्देशिका से पढ़ते समय libx264rgb को प्रभावित करने वाले ffmpeg बग से सावधान रहें । (और कौन जानता है कि अन्य मामले क्या हैं।) उपयोग करने से पहले अपने सेटअप में दोषरहितता के लिए परीक्षण करें। ( ffmpeg -i in -pix_fmt rgb24 -f framemd5स्रोत और दोषरहित-संपीड़ित पर आसान )

संपादित करें: utvideoसांकेतिक शब्दों में बदलना और काफी तेजी से डिकोड, और h.264 की तुलना में बहुत सरल कोडेक है। यह मूल रूप से एक आधुनिक है huffyuv, जिसमें अधिक उपयोगी कलरस्पेस के लिए समर्थन है। यदि आपको कभी भी h.264 की समस्या है, तो अस्थायी फ़ाइलों के लिए utvideo को आज़माएँ।

edit2: एक RGB कोडेक के रूप में PNG अच्छा प्रदर्शन करता है, कम से कम सिंटेल ट्रेलर पर।

इसी तरह के सवाल के लिए मेरे समान जवाब भी देखें: https://superuser.com/a/860335/20798

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

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

http://en.wikipedia.org/wiki/Chroma_subsampling

आदर्श रूप से, कई कलरस्पेस रूपांतरणों से बचें। गोलाई की त्रुटियां संभावित रूप से निर्मित हो सकती हैं। यदि आप RGB विडियोस्पेस में काम करने वाले फिल्टरों के साथ अपने वीडियो को संचालित करने जा रहे हैं, तो इसे RGB रखने से समझ में आता है, जब तक कि उच्च बिटरेट कोई समस्या नहीं है। आप शायद अंततः एक yuv 4:2:0वीडियो बनाने जा रहे हैं , लेकिन अतिरिक्त क्रोमा रिज़ॉल्यूशन रखना संभावित रूप से उपयोगी है, यह इस बात पर निर्भर करता है कि आप किस फ़िल्टर को लागू करने जा रहे हैं।

किसी भी तरह से, दोषरहित x264 और दोनों समर्थन आरजीबी और YUV ffvhuff 4:4:4, 4:2:2, और 4:2:0। मैं सुझाव दूंगा x264, क्योंकि यह तेजी से डिकोड है। यदि आप वास्तविक समय में RGB HD वीडियो को वापस चलाने की कोशिश कर रहे हैं, तो xv के बजाय opengl का प्रयास करें, क्योंकि मेरे सिस्टम पर xv केवल yuv इनपुट को स्वीकार करता है। एक रंग-स्थान रूपांतरण करने के लिए mplayer अतिरिक्त CPU समय ले रहा था।

निम्नलिखित एनकोडर परीक्षणों के लिए स्रोत: https://media.xiph.org/https://media.xiph.org/sintel/sintel_trailer-1080-png.tar.gz वे Sintel ट्रेलर के लिए y4m फ़ाइलों gzip के लिए इतना png टारबॉल वास्तव में एक बहुत छोटा होता है भूल गया।

ffmpeg -i 1080/sintel_trailer_2k_%4d.png -i sintel_trailer-audio.flac \
-c:a copy -c:v libx264rgb -preset ultrafast -qp 0 \
frompng.sintel.264rgb.mkv

जैसे

peter@tesla:/mnt/GP1TB/p/encoder-sample/sintel$ time ffmpeg -i 1080/sintel_trailer_2k_%4d.png -i sintel_trailer-audio.flac -c:a copy -c:v libx264rgb -preset ultrafast -qp 0 frompng.sintel.264rgb.mkv
ffmpeg version N-67983-g2b358b4 Copyright (c) 2000-2015 the FFmpeg developers
  built on Jan 10 2015 05:32:37 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
  configuration: --enable-gpl --enable-version3 --enable-nonfree --disable-doc --disable-ffserver --enable-libx264 --enable-libx265 --enable-libmp3lame --enable-libopus --enable-libwebp --enable-libvpx --disable-outdev=oss --disable-indev=oss --disable-encoder=vorbis --enable-libvorbis --enable-libfdk-aac --disable-encoder=aac --disable-decoder=jpeg2000
  libavutil      54. 16.100 / 54. 16.100
  libavcodec     56. 20.100 / 56. 20.100
  libavformat    56. 18.100 / 56. 18.100
  libavdevice    56.  3.100 / 56.  3.100
  libavfilter     5.  7.100 /  5.  7.100
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, image2, from '1080/sintel_trailer_2k_%4d.png':
  Duration: 00:00:50.12, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: png, rgb24, 1920x1080 [SAR 72:72 DAR 16:9], 25 fps, 25 tbr, 25 tbn, 25 tbc
Input #1, flac, from 'sintel_trailer-audio.flac':
  Duration: 00:00:52.00, start: 0.000000, bitrate: 721 kb/s
    Stream #1:0: Audio: flac, 48000 Hz, stereo, s16
File 'frompng.sintel.264rgb.mkv' already exists. Overwrite ? [y/N] y
No pixel format specified, rgb24 for H.264 encoding chosen.
Use -pix_fmt yuv420p for compatibility with outdated media players.
[libx264rgb @ 0x2770760] using SAR=1/1
[libx264rgb @ 0x2770760] using cpu capabilities: MMX2 SSE2Fast SSSE3 Cache64 SlowShuffle
[libx264rgb @ 0x2770760] profile High 4:4:4 Predictive, level 4.0, 4:4:4 8-bit
[libx264rgb @ 0x2770760] 264 - core 144 r2525+2 6a4fca8 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 psy=0 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=0 chroma_qp_offset=0 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=0 intra_refresh=0 rc=cqp mbtree=0 qp=0
Output #0, matroska, to 'frompng.sintel.264rgb.mkv':
  Metadata:
    encoder         : Lavf56.18.100
    Stream #0:0: Video: h264 (libx264rgb) (H264 / 0x34363248), rgb24, 1920x1080 [SAR 72:72 DAR 16:9], q=-1--1, 25 fps, 1k tbn, 25 tbc
    Metadata:
      encoder         : Lavc56.20.100 libx264rgb
    Stream #0:1: Audio: flac ([172][241][0][0] / 0xF1AC), 48000 Hz, stereo (16 bit)
Stream mapping:
  Stream #0:0 -> #0:0 (png (native) -> h264 (libx264rgb))
  Stream #1:0 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame= 1253 fps= 18 q=-1.0 Lsize=  834790kB time=00:00:51.96 bitrate=131592.5kbits/s
video:830198kB audio:4575kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.002025%
[libx264rgb @ 0x2770760] frame I:6     Avg QP: 0.00  size:612470
[libx264rgb @ 0x2770760] frame P:1247  Avg QP: 0.00  size:678787
[libx264rgb @ 0x2770760] mb I  I16..4: 100.0%  0.0%  0.0%
[libx264rgb @ 0x2770760] mb P  I16..4: 50.3%  0.0%  0.0%  P16..4: 12.0%  0.0%  0.0%  0.0%  0.0%    skip:37.6%
[libx264rgb @ 0x2770760] coded y,u,v intra: 71.1% 68.2% 70.0% inter: 22.8% 22.8% 23.2%
[libx264rgb @ 0x2770760] i16 v,h,dc,p: 50% 48%  1%  1%
[libx264rgb @ 0x2770760] kb/s:135693.94

ध्यान दें कि मैं -r 24एफपीएस निर्दिष्ट करना भूल गया , इसलिए यह ऑडियो के साथ एवी सिंक नहीं रखेगा। (और बिटरेट (लेकिन फ़ाइल का आकार नहीं) नंबर बंद हो जाएंगे, भी। इस मशीन में सीपीयू एक 1-जीन (कॉनरो) कोर 2 डी 2 ओ 2.4GHz (E6600) है।

परिणाम:

4.5M    sintel_trailer-audio.flac  # this is muxed in to every mkv
948M    1080  # the directory of PNGs
940M    /var/tmp/dl/sintel_trailer-1080-png.tar.gz
7434M   sintel.y4m  # yuv444, uncompressed.  mplayer gets the colors wrong?
2342M   qtrle.mkv   # encode went at 16fps, so qtrle is slower and worse filesize
2105M   sintel.huff.mkv  # ffvhuff with default options, rgb pix fmt
1228M    sintel.utvideo.mkv  # muxed without audio, I should update the others this way
946M    png-copy.mkv  # -codec copy makes a MPNG stream.  Use -codec png for non-png sources, but it won't make PNGs as small.  Decodes very fast
824M    lossy.prores_ks.mov # yuv444p10le extremely slow to encode (2.3fps), and worse bitrate.
816M    frompng.sintel.264rgb.mkv
735M    sintel.x264rgb.medium.nocabac.mkv  # encode went at 3.3 fps instead of 18.  Better gain than for live-action, though
626M    sintel_trailer.rgb.lossless.veryslow.mkv # 1.1fps.  With CABAC, 16 ref frames, etc. etc.
512M    lossy.prores.mov # yuv422p10le, 12fps
341M    sintel.yuv420.x264.lossless.mkv
21M     lossy.rgb.crf26.preset=medium.mkv
13M     lossy.yuv420.crf26.preset=medium.mkv  # remember this is WITH 4.5MB audio

ध्यान दें कि mediainfoRGB h.264 के बारे में पता नहीं है, यह अभी भी कहता है कि फाइलें YUV हैं।

जांचें कि यह वास्तव में दोषरहित था:

ffmpeg -i 1080/sintel_trailer_2k_%4d.png -f framemd5 png.framemd5
ffmpeg -i fromhuff.sintel.264rgb.mkv -an -sn -pix_fmt rgb24  -f framemd5 x264rgb.framemd5
diff -s *.framemd5
Files png.framemd5 and x264rgb.framemd5 are identical

तो आप उस तरह से मूल PNG इनपुट को पुनर्प्राप्त कर सकते हैं, यानी आप उनमें समान छवि डेटा के साथ PNG बना सकते हैं।

-pix_fmt rgb24X264 परीक्षण के लिए ध्यान दें । ffmpeg के h.264 डिकोडर आउटपुट gbrp (प्लानर, पैक्ड नहीं) आउटपुट देते हैं, इसलिए बिट्स समान हैं, लेकिन एक अलग क्रम में। Framemd5 "कंटेनर" किसी भी प्रकार के प्रारूप प्रतिबंध नहीं लगाता है, लेकिन यदि बिट्स समान तरीके से व्यवस्थित किए जाते हैं तो आपको केवल md5 मिलेगा। मैंने अभी देखा कि ffmpeg ने कहा कि यह पिक्स fmt के लिए उपयोग कर रहा था जब मैंने इसे PNGs खिलाया, तो उस -pix_fmtडीकोड के लिए arg के रूप में उपयोग किया । संयोग से, यही कारण है कि vlc RGB h.264 फ़ाइलें नहीं चलाएगा (जब तक कि अगली रिलीज़, या वर्तमान रात का निर्माण नहीं हो जाता): यह gbrp पिक्सेल प्रारूप का समर्थन नहीं करता है।

युव उपयोग के लिए libx264, नहीं libx264rgb। आपको x264 का RGB संस्करण स्थापित करने की आवश्यकता नहीं है, वास्तविक पुस्तकालय दोनों का समर्थन करता है। यह सिर्फ ffmpeg है जिसने इसे दो अलग-अलग नाम एन्कोडर के रूप में लागू किया है। मुझे लगता है कि अगर उन्होंने ऐसा नहीं किया होता, तो डिफ़ॉल्ट व्यवहार आरजीबी के रूप में आरजीबी इनपुट को छोड़ना होगा, और एक ही गुणवत्ता के लिए बहुत अधिक बिटरेट आउटपुट का उत्पादन करते हुए वास्तव में धीरे-धीरे चलना होगा। (आप अभी भी कभी-कभी उपयोग -pix_fmt yuv420pकरना चाहते हैं यदि आप h.264 आउटपुट के 420बजाय चाहते हैं 444

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

यदि आपको कीफ़्रेम होने के लिए हर फ्रेम की आवश्यकता है, तो सेट करें -keyint 1। फिर वीडियो एडिटिंग सॉफ्टवेयर जो केवल कीफ्रेम या w / e पर कट करना चाहता है, आपको सीमित नहीं करेगा।

मूल प्रश्न का उत्तर देने के लिए: यह है कि आपको चरणों में चीजों की कोशिश करते समय अस्थायी फ़ाइलों को फेंकने के लिए क्या करना चाहिए (उदाहरण के लिए धीमी गति से काम करना, अन्य चीजों को आज़माने से पहले दोषरहित आउटपुट को सहेजना):

ffmpeg -i dv-video-source.ts -vf yadif=2:1,mcdeint=3:1:10 -c:a copy -c:v libx264 -preset ultrafast -qp 0 deinterlaced.mkv

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

x264 इसमें बहुत अच्छी तरह से निकलता है क्योंकि इसमें बहुत सारे काले फ्रेम होते हैं जिनमें कई टेक्स्ट होते हैं, एक फीका-इन और फीका-आउट, और कई फ़्रेमों के बड़े क्षेत्रों के बीच एक समान समानता होती है, जो इसके साथ भी फायदा उठाता है -preset ultrafast। लाइव-एक्शन पर, मैं अभी भी ffvhuff (yuv420) की आधी फाइलों पर x264 देखता हूं।

किसी के लिए भी उत्सुक: उच्च-सीपीयू-समय दोषरहित आरजीबी सांकेतिक शब्दों में बदलना (x264 कोर 144 r2525):

[libx264rgb @ 0x35b97a0] frame I:27    Avg QP: 0.00  size:604367
[libx264rgb @ 0x35b97a0] frame P:1226  Avg QP: 0.00  size:517512
[libx264rgb @ 0x35b97a0] mb I  I16..4..PCM: 46.3% 38.1% 15.7%  0.0%
[libx264rgb @ 0x35b97a0] mb P  I16..4..PCM: 24.3%  5.4%  4.5%  0.0%  P16..4: 10.5%  3.3%  5.7%  0.0%  0.0%    skip:46.3%
[libx264rgb @ 0x35b97a0] 8x8 transform intra:17.3% inter:46.1%
[libx264rgb @ 0x35b97a0] coded y,u,v intra: 81.6% 77.5% 80.0% inter: 28.0% 27.7% 28.1%
[libx264rgb @ 0x35b97a0] i16 v,h,dc,p: 35% 64%  1%  0%
[libx264rgb @ 0x35b97a0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 31% 49% 13%  2%  1%  1%  1%  1%  1%
[libx264rgb @ 0x35b97a0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 31% 37%  5%  5%  6%  5%  5%  4%  3%
[libx264rgb @ 0x35b97a0] Weighted P-Frames: Y:41.1% UV:40.7%
[libx264rgb @ 0x35b97a0] ref P L0: 74.5%  4.2%  9.1%  4.1%  2.1%  1.7%  1.2%  0.8%  0.6%  0.5%  0.3%  0.2%  0.2%  0.2%  0.2%  0.1%
[libx264rgb @ 0x35b97a0] kb/s:99721.66

भारित पी फ्रेम के वास्तव में उच्च अंश पर ध्यान दें, और स्किप मैक्रोबलाक्स का वास्तव में उच्च अंश। प्रत्येक दृश्य संक्रमण एक फीका है, कट नहीं है, और x264 लाभ उठाता है यदि आप इसे सीपीयू को यह पता लगाने का समय देते हैं कि कैसे।

आगे के नोट (संपादन के लिए हानिपूर्ण कोड):

क्लिप के माध्यम से आगे / पीछे की तरफ स्क्रबिंग के लिए, इंट्रा-ओनली कोडेक्स आमतौर पर इष्ट हैं (utvideo, ffvhuff, mjpeg, jpeg2000, pro-res, AVC-Intra)। मैं छोटे GOPs (1/2 से 1 सेकंड) के साथ नियमित रूप से AVC की कल्पना करता हूं, बहुत अच्छी तरह से स्क्रब करेगा, जब तक कि सॉफ्टवेयर को पता था कि यह क्या कर रहा था (तेज आई स्क्रब करते समय निकटतम आई फ्रेम को डिकोड करें, पाने के लिए GOP के भीतर डिकोड करें। एक अंतर फ्रेम यदि आपको उस समय के लिए पर्याप्त समय में ज़ूम इन किया जाना चाहिए)।

मैंने इस पर कुछ नकारात्मक बातें पोस्ट की हैं और https://video.stackexchange.com/ के बारे में प्रो-रेस, जैसे "क्या बात है अगर यह धीमा है और दोषरहित कोडेक से भी बदतर संपीड़न है", लेकिन इसमें कुछ दिलचस्प विशेषताएं हैं। Apple का कहना है कि यह आधे रेजोल्यूशन में कम से कम 1/3 का उपयोग करके डीकोड कर सकता है।

ffmpeg का prores कार्यान्वयन संभवतः Apple के समान गति के लिए अनुकूलित नहीं है, यही वजह है कि ffmpeg के साथ मेरे परीक्षण ने इसे धीमा बना दिया है। यह शायद उपयोग करने लायक नहीं है यदि आपके पास ffmpeg पर आधारित उपकरणों के साथ एक मुफ्त सॉफ्टवेयर वर्कफ़्लो है, लेकिन यदि आप वाणिज्यिक सॉफ़्टवेयर का उपयोग कर रहे हैं तो यह कोशिश करने लायक हो सकता है।

मैं बहुत सारे वीडियो एडिटिंग नहीं करता, ज्यादातर सिर्फ एन्कोडिंग करता हूं, इसलिए मुझे इस बात का अंदाजा नहीं है कि कोडेक्स के लिए कौन सा टेस्ट उचित होगा। मुझे लगता है कि शायद mjpeg एक अच्छा तेज विकल्प होगा, अगर शॉर्ट-GOP x264 अच्छी तरह से काम नहीं करता है। लिनक्स डिस्ट्रोस में जेपीएम के एएसएम-त्वरित कार्यान्वयन हैं, और यह एक बहुत ही सरल कोडेक है। आप गुणवत्ता को बंद करने के लिए गुणवत्ता को ऊपर या नीचे मोड़ सकते हैं। यह प्राचीन है, लेकिन यदि आप एक इंट्रा-ओनली कोडेक चाहते हैं जो वास्तव में तेज है, तो यह x264 को हरा सकता है।

X264 के लिए, मैं कुछ ऐसा प्रयास करूँगा x264 --crf 10 --keyint=1 --preset superfast --tune fastdecode (इंट्रा-ओनली, बिना किसी अन्य सामान के जो --avcintra-classसेट होता है।) नोट superfast(बिना CABAC के), या fasterनहीं।ultrafast हानिपूर्ण संचालन के लिए शायद सबसे अच्छा है। मुझे लगता है कि अल्ट्राफास्ट बहुत अधिक गुणवत्ता के बिना बहुत तेजी से खो देता है। जितनी कम गुणवत्ता (उच्च crf) आप उपयोग करते हैं, उतना ही बेहतर एनकोड खोजने में थोड़ा अधिक सीपीयू समय बिताने के लायक है। यह बहुत कुछ संभवतः GOP आकार = 1 के साथ प्रासंगिक नहीं है, हालांकि।

GOP आकार> 1 के साथ, यदि आप एनकोड पर इतने सारे बिट्स फेंक रहे हैं कि अवशिष्टों को एन्कोडिंग करते समय बेहतर अंतर-भविष्यवाणी कई बिट्स को नहीं बचाएगी (क्योंकि फ्रेम के बीच शोर / अनाज / सूक्ष्म परिवर्तन बहुत सटीक रूप से संरक्षित हो रहे हैं), तो बस सुपरफास्ट शायद ठीक है। अन्यथा, --keyint=30कुछ या कुछ के साथ , शायद --preset veryfast --crf 12दिलचस्प होगा।

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


बस फ़ाइल आकार के साथ उस सूची के लिए धन्यवाद कहना चाहता था; त्वरित संदर्भ के लिए महान सामान .. चीयर्स!
सदाऊ

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

+1: मुझे नहीं पता था कि दोषरहित H.264 भी एक चीज थी। मैंने अपने उत्तर में इसके बारे में जानकारी जोड़ी है। अपनी tl; डॉ समस्या को हल करने के लिए मेरी ब्रीफ़र प्रस्तुति से कुछ विचार मुक्त महसूस करें । मेरे स्वयं के उत्तर के लिए, समस्या के लिए एक सही समाधान प्रस्तुत करने की कोशिश करने के बजाय यह व्यापक होना चाहिए। हमारे पास बहुत सारे अलग-अलग कोडेक्स हैं क्योंकि कोई भी कोडेक सभी की ज़रूरतों को पूरा नहीं करता है।
वॉरेन यंग

2

मुझे लगता है कि ffmpeg वास्तव में असम्पीडित वीडियो को परिवर्तित करने का समर्थन करता है।
मैं ffmpeg -i input.mp4 -vcodec rawvideo out.avi और परिणामस्वरूप .avi का उपयोग करता था। मोटे तौर पर सही फाइलें थीं। विंडोज मीडिया प्लेयर इसे सही ढंग से खेलने में सक्षम नहीं लगता था, लेकिन इसे VirtualDub द्वारा पढ़ा जा सकता था और मुझे पिक्चर क्वालिटी में कोई कमी नहीं दिखी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.