कैसे FFMPEG का उपयोग कर उच्चतम गुणवत्ता के साथ एक MPEG2 वीडियो फ़ाइल बनाने के लिए?


16

मुझे WMV (v9 (WMV3), 960x720, 30.000030 एफपीएस, प्लानर 4: 2: 0 YUV, PowerPoint 2010 द्वारा निर्मित) फाइल मिल गई है और इसे MPEG2 में बदलने की जरूरत है - एकमात्र प्रारूप जो मेरा टीवीसेट USB फ्लैश ड्राइव से पढ़ सकता है। (मैं भी MP4 / h.264, AVI / XVID की कोशिश की है - कुछ भी नहीं mpeg2 काम करता है)।

मैंने सिंपल से जॉब में काम किया है

ffmpeg -i "in.wmv" -c:v mpeg2video "out.mpg"

लेकिन परिणाम की गुणवत्ता भयानक है (स्पष्ट रूप से दृश्यमान विकृतियों को पेश किया गया है) और प्लेबैक सुचारू नहीं है (बहुत अधिक गति पर भी धीमा)।

मैंने भी कोशिश की है

ffmpeg -i "in.wmv" -c:v mpeg2video -pix_fmt yuv420p -me_method epzs -threads 4 -r 30.000030 -g 45 -bf 2 -trellis 2 -cmp 2 -subcmp 2 -s 960x720 -b 2500k -bt 300k -async 1 -y "out.mpg"

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

मुझे यथासंभव गुणवत्ता बचाने के लिए किन मापदंडों का उपयोग करना होगा? संपीड़न अनुपात बिल्कुल भी मायने नहीं रखता है, यहां तक ​​कि फ़ाइल आकार में वृद्धि स्वीकार्य है।

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

ffmpeg -i in.mpg -i silence.ogg -c:v copy -c:a libmp3lame out.mpg

और नंगे भी

ffmpeg -i in.mpg -c:v copy -out.mpg

"बफर अंडरफ़्लो" और "पैकेट बहुत बड़ी" त्रुटियाँ देता है। (in.mpg एक ही FFMPEG बाइनरी और एक ही स्रोत WMV फ़ाइल के द्वारा निर्मित फ़ाइलें हैं जो प्रश्न में पहले दो कमांड का उपयोग करती हैं)।

मैं विंडोज 7 पर एक Zeranoe FFMPEG बिल्ड का उपयोग कर रहा हूं।


2
कोई आपको पूर्ण आउटपुट लॉग के लिए पूछने जा रहा है।
dstob

क्या टीवी सेट ठीक है? यह H.264 को पढ़ने में सक्षम हो सकता है, बस एक अलग प्रोफ़ाइल।
slhck

@slhck टीवी सेट है Philips 42PFL3606H/58, मैं H.264 के साथ एन्कोडिंग कर रहा हूं ffmpeg -i "in.wmv" -sws_flags lanczos+accurate_rnd -c:v libx264 -crf 20 -preset slow -profile:v baseline -level 3.0 -pix_fmt yuv420p -tune fastdecode -x264-params keyint=240:min-keyint=20 "out.mp4"- प्रोफ़ाइल सबसे कम है जो मुझे पता है और इससे भी अधिक tweaks का उपयोग परिणामस्वरूप फ़ाइल को एक आसान काम करने के लिए किया जाता है।
इवान

1
मैनुअल के अनुसार टीवी MPEG-4 विज़ुअल और H.264 का समर्थन करता है। यदि बेसलाइन प्रोफ़ाइल काम नहीं करती है, तो मुझे यकीन नहीं है कि क्या करता है। लेकिन टीवी बहुत picky हैं।
slhck

जवाबों:


16

समस्या यह है कि MPEG-2 के लिए डिफ़ॉल्ट बिटरेट कम है (जैसा कि ffmpeg में अधिकांश अन्य वीडियो एन्कोडर के साथ है, H.264 एक अपवाद है)। MPEG-2 भी इन दिनों एक कोडेक के रूप में सबसे अच्छा विकल्प नहीं है।

MPEG-2 के लिए बेहतर गुणवत्ता

यदि आप MPEG-2 के साथ रहना चाहते हैं तो आपके पास कुछ विकल्प हैं:

  • बिटरेट बढ़ाएँ। अब आप उपयोग कर रहे हैं -b:v 2500k। यदि यह एचडी वीडियो है, तो आप केवल 2.5 एमबीआईटी / एस के साथ दूर नहीं जाएंगे। परिणाम अच्छा दिखने के लिए आपको कम से कम दोगुना या उससे भी अधिक की आवश्यकता है। उदाहरण के लिए, का उपयोग करें -b:v 6000k -target pal-dvd

    720p के लिए, मुझे लगता है कि आपको अभी भी एक उच्च बिटरेट का उपयोग करना चाहिए। याद रखें कि डीवीडी MPEG-2 का उपयोग करते हैं और 2hrs की फिल्म के लिए लगभग 4.7 GB में आते हैं, इसलिए आप लगभग 5-8 MBet / s के साथ समाप्त होते हैं। MPEG-2 वास्तव में बहुत कम्प्रेशन-कुशल नहीं है और उच्चतर बिट्रेट्स पर बेहतर काम करता है।

  • एक विशिष्ट गुणवत्ता सेटिंग का उपयोग करें। बदलें -b:v …करने के लिए -qscale:v 2। यहां संख्या 1 से 31 तक है और उच्चतर का मतलब निम्न गुणवत्ता है। 4 या 5 से आगे निकलने का कोई मतलब नहीं है। यदि आप बिटरेट 2 से शुरू नहीं करते हैं और देखें कि क्या यह आपके लिए काम करता है।

बी-फ्रेम, मोशन आकलन विधि या जीओपी आकार की संख्या के साथ गड़बड़ करने से गुणवत्ता थोड़ी कम हो सकती है, लेकिन बड़े बदलाव नहीं होंगे।

मौन ऑडियो

-f lavfi -i aevalsrc=0एक मूक ऑडियो स्ट्रीम उत्पन्न करने के लिए उपयोग करें । उदाहरण के लिए:

ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v mpeg2video -qscale:v 2 -c:a libmp3lame "out.mpg"

आपको -target pal-dvdएक निश्चित बफर आकार को मजबूर करने के लिए उपरोक्त कमांड को जोड़ने की आवश्यकता हो सकती है ।

मैंने MP3 को कोडेक के रूप में चुना। MPEG फ़ाइलों में MPEG लेयर I और II ऑडियो के साथ-साथ PCM स्ट्रीम के अलावा अन्य ऑडियो नहीं हो सकते हैं, इसलिए जब तक आप ऑडियो स्ट्रीम को कनवर्ट नहीं करते (जो आप उपयोग करते समय नहीं कर रहे हैं, तब तक एक मृदु Ogg Vorbis फ़ाइल का उपयोग करना काम नहीं करेगा -c:a copy) ।

एक अलग वीडियो कोडेक का उपयोग करें

मुझे आश्चर्य है कि वीडियो फ़ाइलों को चलाने वाला एक टीवी MPEG-2 पढ़ेगा, लेकिन कुछ और नहीं। कम से कम MPEG-4 भाग II वीडियो का समर्थन किया जाना चाहिए (जो कि आप "DivX" के रूप में जानते हैं - एक MPEG-4 भाग II एनकोडर)। तो आप कोशिश कर सकते हैं:

ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v libxvid -qscale:v 2 -c:a libmp3lame "out.mp4"

आपका टीवी वास्तव में H.264 का भी समर्थन कर सकता है, लेकिन केवल एक निश्चित प्रोफ़ाइल। baselineउदाहरण के लिए, प्रोफ़ाइल का उपयोग करने का प्रयास करें :

ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v libx264 -profile:v baseline -crf 23 -c:a aac -strict experimental "out.mp4"

उपरोक्त उदाहरण में मैंने गुणवत्ता को सेट करने के लिए CRF विकल्प का उपयोग किया है qscale। अधिक के लिए H.264 एन्कोडिंग गाइड देखें ।


"बी-फ्रेम, मोशन आकलन विधि या जीओपी आकार की संख्या के साथ गड़बड़ करने से गुणवत्ता थोड़ी कम हो सकती है लेकिन बड़े बदलाव नहीं होंगे।" - क्या मैं हर फ्रेम को B- फ्रेम बना सकता हूं और MPEG2 के साथ कोई मोशन आकलन नहीं कर सकता? वीडियो में बहुत सारे गतिशील भाग हैं।
इवान

मैंने आपके द्वारा सुझाई गई पहली कमांड लाइन की कोशिश की है ( ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v libxvid -qscale:v 2 -c:a libmp3lame "out.mp4") - यह लगभग 100 फ़्रेमों को एन्कोड करता है और फिर स्क्रीन को त्रुटियों [mpeg @ 02f69ba0] buffer underflow i=0 bufi=235538 size=239761और जैसे त्रुटियों से भरना शुरू कर देता है [mpeg @ 02f69ba0] packet too large, ignoring buffer limits to mux it
इवान

@ इवान आप बिटरेट को बदलते हैं -b:v। इसे मेरे जवाब में जोड़ा। एनकोडर सेटिंग्स के बारे में: आप हर फ्रेम को बी-फ्रेम नहीं बना सकते। इसके अलावा, आपको गति के आकलन की आवश्यकता है - विधि जितना अधिक विस्तृत हो, उतना बेहतर संपीड़न। लेकिन अगर यह एक गतिशील वीडियो है, तो पहली चीज जो आप चाहते हैं, वह बिटरेट को काफी बढ़ा देगा। एन्कोडिंग सेटिंग्स वास्तव में बहुत अधिक प्रभाव नहीं डालती हैं। अपनी त्रुटि के लिए, क्या आप सुनिश्चित हैं कि यह सही कमांड के लिए त्रुटि है? एक [mpeg]त्रुटि केवल तभी हो सकती है जब आपकी आउटपुट फ़ाइल है .mpg, जब यह नहीं है .mp4
slhck

मेरे पास एक गलत भाग @ कॉपी = पेस्ट है, मैं ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v mpeg2video -qscale:v 2 -c:a libmp3lame "out.mpg"निश्चित रूप से उपयोग कर रहा हूं ।
इवान

1
-target pal-dvdसमस्या हल करती है, -bufsizeकाम नहीं किया (मैंने कोशिश की है -b:v 7M -bufsize 7M -maxrate 7M)।
इवान

0

मैं तुरंत कहूंगा कि अगर फ़ाइल का आकार वास्तव में मायने नहीं रखता है, तो बस बिट-रेट बढ़ाने के साथ प्रयोग करें।

मूक ऑडियो के लिए आप बस ffmpeg का उपयोग करना चाह सकते हैं, मैं किसी भी प्रकार की टिप्पणी देने के लिए ऑडेसिटी के बारे में पर्याप्त नहीं जानता। मैंने पहले भी इसका इस्तेमाल किया है।

ffmpeg.exe -f lavfi -i aevalsrc=0:0::duration=YOUR_DESIRED_DURATION -ab 10k YourAudioName.aac

हालांकि यह आपके लिए काम नहीं करेगा क्योंकि आप mpg कंटेनर का उपयोग कर रहे हैं ताकि आप कोशिश करना चाहें। (एमपी कंटेनर)

ffmpeg.exe -f lavfi -i aevalsrc=0:0::duration=YOUR_DESIRED_DURATION -ab 10k YourAudioName.mp3

यह मेरे लिए काम करने लगा।


अवधि निर्धारित करना आवश्यक नहीं है, क्योंकि ffmpeg वीडियो के लिए जो भी आवश्यक होगा, बस उपयोग करेगा।
slhck

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