2013-01-02 14 views
9

मैं एक सेगमेंटर बना रहा हूं जो ffmpeg के write_frame फ़ंक्शन में हस्तक्षेप करता है और फ़ाइलों को अलग करने के लिए आउटपुट डेटा लिखता है। प्रत्येक खंडित फ़ाइल में लगभग 3 सेकंड वीडियो का सेगमेंट होता है।ffmpeg की कुंजी-फ्रेम पीढ़ी को कैसे नियंत्रित करें?

कोड निम्नलिखित है:

1 - Get transcoded packet 
2 - Check if it contains key frame data, if yes goto 3. 
3 - Check the duration of current segment, if it exceed 3 seconds, goto 4 
4 - Close file, and create new segment, write packet to segment file, goto-1 

जनरल बोल, हर सेगमेंट के कम से कम 3 सेकंड वीडियो डेटा होता है, और यह एक प्रमुख फ्रेम के साथ शुरू होता है।

समस्या यह है कि उत्पादन वीडियो की अवधि बहुत अलग हैं, कुछ 3 सेकंड होते हैं, कुछ समस्या यह है कि कैसे ffmpeg ट्रांसकोडिंग दौरान कुंजी फ्रेम उत्पन्न की वजह से 5 या 6

मुझे लगता है शामिल है। यदि दो आसन्न कीफ्रेम के बीच "दूरी" 6 एस है, तो मुझे 6 सेकंड सेगमेंट मिला।

  1. यह सच है ffmpeg कि अनियमित अंतराल (और अंतराल समय में मुख्य-फ़्रेम उत्पन्न कुछ सेकंड (जैसे 6)

  2. तक हो सकता है हम कैसे कर सकते हैं:।?

    यहाँ मेरे सवालों का है ffmpeg कुंजी फ्रेम पीढ़ी को नियंत्रित? (मैं अनुमान इस के लिए एक ffmpeg आदेश का तर्क होना चाहिए, हो सकता है -force_key_frames, लेकिन मुझे यकीन है कि नहीं कर रहा हूँ)

+0

हाय जैकोड, क्या आपने इस मुद्दे को ठीक किया? मुझे अब इसी मुद्दे का सामना करना पड़ रहा है। –

+0

यह कुछ साल पहले हुआ है, मुझे याद नहीं है कि मैंने वास्तव में क्या किया था। लेकिन विचार कुछ अंतराल पर जेनरेट करने के लिए मजबूर कुंजी फ्रेम के साथ खेलना है (कृपया google -force_key_frame के लिए google) FFmpeg तब से बदल सकता है जब आप नवीनतम दस्तावेज़ का बेहतर संदर्भ लेते हैं। उम्मीद है कि यह – jAckOdE

+0

मदद करेगा ठीक है, मैं जांच करूंगा, धन्यवाद jAckOdE –

उत्तर

11
  1. दृश्य परिवर्तन पहचान के आधार पर ffmpeg अनियमित अंतराल पर कुंजी फ्रेम उत्पन्न करना संभव है।

  2. कुंजी फ्रेम अंतराल GOP आकार के द्वारा नियंत्रित किया जा सकता है। इन विकल्पों के

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

-keyint_min (FFmpeg) न्यूनतम जीओपी लंबाई, आई-फ्रेम के बीच न्यूनतम दूरी।

+0

जहां मुझे अपने कोड में "-keyint_min" मान सेट करना है। –

संबंधित मुद्दे