'पिछली अवधि X.XXX बहुत बड़ी' का क्या अर्थ है?


142

जब f.2mpeg का उपयोग करके H.264 को एन्कोडिंग किया जाता है तो मुझे निम्न प्रकार की चेतावनियाँ मिलती हैं।

Past duration 0.603386 too large
Past duration 0.614372 too large
Past duration 0.606377 too large

उनका क्या मतलब है? मुझे ऑनलाइन या ffmpeg प्रलेखन में कुछ भी स्पष्ट नहीं मिला है।


2
कृपया ffmpeg प्रश्नों को video.stackexchange.com बीटा पर निर्देशित करें। Ffmpeg टैग विवरण देखें।
ओन्ड्रा kaइस्का

34
@ ओन्द्रा एक और स्टैकएक्सचेंज? मैं उन 100+ सबसाइट्स के साथ भ्रमित हो रहा हूं, मुझे यकीन नहीं है कि अगर यह एक सकारात्मक दिशा है जो स्टैकएक्सचेंज की ओर बढ़ रहा है।
mxmlnkn

1
@mxmlnkn मैं सहमत हूँ, यह आपको सरल समय के लिए लंबा बनाता है ... :)
एरिक

4
मुझे लगता है ऐसा है। StackOverflow प्रोग्रामिंग के लिए है, यह प्रोग्रामिंग नहीं है। वीडियो प्रसंस्करण के लिए एक प्रश्नोत्तर साइट है, यह वीडियो प्रसंस्करण के बारे में एक प्रश्न है। समझने के लिए क्या नहीं है?
ओन्ड्रा žइस्का

टैग विवरण भी पढ़ें।
ओन्ड्रा žइस्का

जवाबों:


23

मुझे इनमें से हजारों की चेतावनी एक विशेष एनकोड के साथ मिल रही थी। मैं 1080p वीडियो को 480p तक डाउन कर रहा था। एक संपादन बिंदु पर, जहां स्रोत लेजरडिस्क में एक दोष के कारण कुछ नीरस वीडियो था, ये संदेश आने लगे और फिर दिखाई दिए, मुझे लगता है, इसके बाद हर फ्रेम। वे इस छोटे अंश की तरह आगे बढ़ते रहे:

Past duration 0.901115 too large=  535031kB time=00:54:15.06 bitrate=1346.5kbits/s dup=0 drop=19 speed=1.15x    
    Last message repeated 31 times
Past duration 0.901115 too large=  535031kB time=00:54:15.62 bitrate=1346.3kbits/s dup=0 drop=19 speed=1.15x    
    Last message repeated 34 times
Past duration 0.901115 too large=  535031kB time=00:54:16.21 bitrate=1346.0kbits/s dup=0 drop=19 speed=1.15x    
    Last message repeated 36 times
Past duration 0.901115 too large=  535338kB time=00:54:16.83 bitrate=1346.5kbits/s dup=0 drop=19 speed=1.15x    
    Last message repeated 39 times

मूल ffmpeg मंगलाचरण यह था:

ffmpeg -i input.mp4 -s 720x480 -c:v libx264 -preset slower -crf 17 -c:a copy -y output.mkv

यहाँ दिए गए सुझावों के बाद मैंने पहली बार इनपुट में 60000/1001 को जोड़ा। इससे कुछ सुधार नहीं हुआ। मैं -framerate बनाए रखा और आउटपुट में -r 60000/1001 जोड़ा। फिर भी कुछ सुधार नहीं हुआ। दोनों को अंत में मैंने जोड़ा -async 1 -vsync 1. इसके परिणामस्वरूप मेरी एकल चेतावनी प्राप्त हुई, और यह सब है। वह मंगलाचरण था:

ffmpeg -i input.mp4 -framerate 60000/1001 -s 720x480 -c:v libx264 -preset slower -crf 17 -c:a copy -y output.mkv -r 60000/1001 -async 1 -vsync 1

एकमात्र अंतर जो मुझे MediaInfo से एक विस्तृत डंप में मिला था, वह मूल आह्वान में मिली इस लाइन को हटाने का था, लेकिन दूसरे स्थान पर नहीं:

Delay relative to video                  : -33ms

हालाँकि, मैंने फ़ाइलों की शुरुआत में और अंत के पास ए / वी सिंक की जाँच की, और दो फाइलों के बीच सिंक में कोई अंतर नहीं था। उनका चलने का समय भी समान था, लेकिन वह केवल निकटतम सेकंड के लिए मापा गया था, VLC में। इसलिए मैंने ffmpeg का उपयोग करके फ्रेम की गणना की जाँच की:

ffmpeg -i output.mkv -map 0:v:0 -c copy -f null -

और आउटपुट के अंत के पास "फ्रेम = #" की तलाश में।

स्रोत वीडियो 375226 फ्रेम लंबा था, मूल आह्वान 375195 फ्रेम निकला, और दूसरा आह्वान 375200 निकला। इसलिए दूसरा आह्वान, बहुत कम चेतावनी संदेशों के साथ 5 कम फ्रेम भी गिरा।

बाद के परीक्षण से पता चला है कि -framerate और -r अनावश्यक थे, और सिर्फ दो सिंक फ्लैग का उपयोग करना पर्याप्त था। यह ऊपर दिए गए दूसरे आह्वान के समान परिणाम देता है, इसलिए समस्या को हल करने के लिए मुझे मिला तीसरा और सबसे सरल आह्वान है:

ffmpeg -i input.mp4 -s 720x480 -c:v libx264 -preset slower -crf 17 -c:a copy -y output.mkv -async 1 -vsync 1

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

यह सब ffmpeg संस्करण 4.0 के साथ था।


2
इसके लिए शुक्रिया! मुद्दों के दिनों के बाद, -async 1 -vsync 1यह मेरे लिए तय की।
ऑफेक

1
इस विश्लेषण के लिए धन्यवाद @larryy बहुत मददगार
गहनता

90

SourceForge पर DVDStyler परियोजना के लिए अनुरक्षकों में से एक ने इसके बारे में कहा :

15 जनवरी 2015 के बाद FFMpeg संस्करण अक्सर इस चेतावनी को प्रदर्शित करते हैं। यह संभव दर नियंत्रण विरूपण के बारे में चेतावनी देने के लिए जोड़ा गया है, अन्यथा यह किसी भी तरह का नुकसान नहीं पहुंचाता है।


'दर नियंत्रण विरूपण' (मुख्य रूप से वीडियो) एन्कोडिंग से संबंधित है और इस चेतावनी से कोई संबंध नहीं है, जो इस बारे में है कि क्या आउटपुट टाइमस्टैम्प इनपुट टाइमस्टैम्प की तुलना में बहुत अधिक (अपेक्षाकृत) भिन्न है
ज्ञान

पहले कुछ समय में मुझे चेतावनी मिली कि मैंने रूपांतरण को समाप्त कर दिया है, लेकिन इस सलाह ने मुझे इसे चलाने दिया और चेतावनी थोड़ी देर के बाद बंद हो गई और रूपांतरण सफलतापूर्वक पूरा हो गया। धन्यवाद।
IRTFM

58

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


मेरे पास यह त्रुटि थी क्योंकि मैं छवियों की एक श्रृंखला को वीडियो में बदलना चाहता था:

ffmpeg -i %05d.png -r 24 -c:v libx264 -crf 5 out.mkv

समस्या यह प्रतीत होती है, कि यदि इनपुट के लिए कोई फ्रेम दर नहीं दी जाती है, तो 25 एफपीएस की एक फ्रेम दर मान ली जाती है:

Input #0, image2, from 'frames/%04d.bmp':
  Duration: 00:00:15.96, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: bmp, bgra, 920x650, 25 fps, 25 tbr, 25 tbn, 25 tbc

यह एन्कोडेड फ़्रेमों की कुल संख्या पर भी देखा जा सकता है। मेरे पास 400 चित्र थे, लेकिन उपरोक्त कमांड ने केवल 384 को एन्कोड किया:

frame=  384 fps= 68 q=-1.0 Lsize=   10931kB time=00:00:15.91 bitrate=5626.1kbits/s dup=0 drop=15    
video:10928kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.033807%

यदि आउटपुट फ्रेम दर के बजाय इनपुट फ़्रेम दर सेट करके त्रुटि संदेश गायब हो जाते हैं। आउटपुट फ्रेम दर तब इनपुट के होने के लिए स्वचालित रूप से चुना जाएगा। इसके अतिरिक्त नए ffmpeg संस्करणों में आप, बाहर देखने के लिए क्योंकि जब साथ PNG छवियों का उपयोग किया है -iविकल्प या बल्कि image2या v4l2इनपुट प्रारूप, आप का उपयोग करने के -framerateबजाय -r, देखने के लिए दस्तावेज़ -rविकल्प

ffmpeg -framerate 24 -i %05d.png -c:v libx264 -crf 5 out.mkv

इनपुट और आउटपुट दोनों की फ्रेम दर को अलग-अलग निर्दिष्ट करना भी संभव है:

ffmpeg -framerate 25 -i %05d.png -r 10 -c:v libx264 -crf 5 out.mkv

इस मामले में केवल 161/400 फ्रेम एनकोडेड होंगे। अन्य फ्रेम अंतरिम गिरा दिए जाएंगे। इसके अलावा त्रुटि संदेश गायब हो जाता है, मुझे लगता है कि क्रम में ffmpeg को धीमा करने के लिए stdout को स्पैम करके नहीं, देखें:


3
"क्योंकि केवल -i विकल्प के साथ PNG छवियों का उपयोग करते समय, आपको -r के बजाय -famerate का उपयोग करना होगा" - इससे मेरी समस्या पूरी तरह से हल हो गई, धन्यवाद!
बेनामी

1
एक wmv को mp4 में बदलने की कोशिश में, -rकाम किया जहाँ उपयोग -framerateनहीं किया।
1934286

+1 और मैं शीर्ष पर आपके "सारांश" को स्थानांतरित करने का सुझाव देता हूं। अधिक, के रूप में यह मेरे वीडियो परिवर्तित करने के मामले में हल और उत्पादन framerate incresase करने की कोशिश कर रहा है और उत्पादन भी तेजी से। मैंने इसे ffmpeg -pattern_type glob -i '*.jpg' -filter:v "setpts=0.25*PTS" -r 50 "$( date "+%Y-%m-%d_%H%M%S")-timelapse-x4-50fps.mp4"और अधिक चेतावनी के साथ शुरू किया ffmpeg -framerate 50 -pattern_type glob -i '*.jpg' -filter:v "setpts=0.25*PTS" -r 50 "$( date "+%Y-%m-%d_%H%M%S")-timelapse-x4-50fps.mp4"( -framerate 50इनपुट के लिए जोड़ा गया नोट )
el-teedee

49

स्रोत कोड को देखकर ऐसा लगता है कि इनपुट स्ट्रीम में प्रेजेंटेशन टाइम (पीटीएस) के बीच का अंतर आउटपुट स्ट्रीम में एक से भिन्न निर्धारित सीमा से 0.6 तक होता है।

स्रोत से स्निपेट:

    delta0 = sync_ipts - ost->sync_opts;
    delta  = delta0 + duration;

...

        if (delta0 < 0 &&
        delta > 0 &&
        format_video_sync != VSYNC_PASSTHROUGH &&
        format_video_sync != VSYNC_DROP) {
        double cor = FFMIN(-delta0, duration);
        if (delta0 < -0.6) {
            av_log(NULL, AV_LOG_WARNING, "Past duration %f too large\n", -delta0);
        } else
            av_log(NULL, AV_LOG_DEBUG, "Cliping frame in rate conversion by %f\n", -delta0);
        sync_ipts += cor;
        duration -= cor;
        delta0 += cor;
    }

यह केवल एक त्वरित नज़र है, इसलिए कृपया गहरी खुदाई करने के लिए स्वतंत्र महसूस करें।


क्या हम इस मुद्दे को "ठीक" करने के लिए कुछ भी कर सकते हैं, या आउटपुट पीटी को स्पष्ट रूप से सेट कर सकते हैं?
बॉडड

1
मुझे इस मुद्दे के आसपास के विवरण याद नहीं हैं, लेकिन अगर "फिक्स" द्वारा आपको चेतावनी से छुटकारा पाने का मतलब है तो उपरोक्त कोड के आधार पर आप विकल्प में देख सकते हैं format_video_sync = VSYNC_DROPया format_video_sync = VSYNC_PASSTHROUGHदेख सकते हैं कि क्या उनमें से एक आपके उपयोग के मामले में व्यवहार्य है।
एरिक

धन्यवाद। मुझे -rइन चेतावनियों को "निश्चित" स्विच का उपयोग करके फ्रेम दर को स्पष्ट रूप से स्थापित करने का पता चला ।
बोडाद

1
व्यक्तिगत अनुभव से बस कुछ: मेरे पास "पिछली अवधि" संदेश स्पैम समस्या थी और यह तय किया कि इनपुट फ्रेम दर को -r 25 के साथ मजबूर करके, लेकिन फिर मुझे ऑडियो सिंक से भारी रूप से बाहर मिलना शुरू हो गया। -R विकल्प को हटाकर और ऑडियो डेसिंक को रोकने के लिए "-sync 1 -vsync 1" का उपयोग करके ऑडियो समस्या को रोका जा सकता है, लेकिन "पिछली अवधि" स्पैम भी चला जाता है।
जेसन लैंग

V 4.1 और बाद में, लॉग स्तर को अपग्रेड किया गया है, इसलिए यह डिफ़ॉल्ट लॉग स्तर पर दिखाई नहीं देगा।
ज्ञान


1

कमांड वास्तव में होनी चाहिए:

ffmpeg -loglevel quiet -i input_file.xyz ...

"शांत" पैरामीटर के लिए कोई "-" उपसर्ग नहीं है, क्योंकि यह एक विकल्प नहीं है, बल्कि "-loglevel" विकल्प के लिए एक मूल्य है।

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