मैं कैसे परिवर्तित कर सकते हैं .MTS फ़ाइल (AVCHD) .Mp4 द्वारा ffmpeg द्वारा H264 वीडियो स्ट्रीम फिर से एन्कोडिंग के बिना?


20

नोट: मैंने कुछ समय पहले स्टैकओवरफ्लो में एक ही प्रश्न पोस्ट किया था, जब मुझे यह कम्यूनिटी अभी तक नहीं मिली है। मैं इसे फिर से लागू करता हूं क्योंकि यह प्रश्न इस समुदाय के लिए अधिक उपयुक्त है।

1. मैंने क्या कोशिश की

मेरे पास कुछ .MTS (AVCHD प्रारूप) फाइलें हैं जो मेरे AVCHD कैमरे के साथ हैं । इसका विनिर्देश नीचे दिखाया गया है:

$ ffprobe 140612_Canon-00000.MTS 
ffprobe version 2.2.1 Copyright (c) 2007-2014 the FFmpeg developers
(snip)
Input #0, mpegts, from '140612_Canon-00000.MTS':
  Duration: 00:48:58.40, start: 0.800300, bitrate: 5563 kb/s
  Program 1 
    Stream #0:0[0x1011]: Video: h264 (High) (HDMV / 0x564D4448), 
      yuv420p, 1440x1080 [SAR 4:3 DAR 16:9], 
      29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0:1[0x1100]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 
      stereo, fltp, 256 kb/s

फ़्रेमरेट / टाइमबेस के भाग पर ध्यान दें: 29.97 एफपीएस, 29.97 टीबीआर, 90k टीबीएन, 59.94 टीबीसी

अब मैं इस फ़ाइल को .mp4 फ़ाइल में बदलना चाहता हूँ , दूसरी ओर H264 वीडियो स्ट्रीम को दोबारा एन्कोडिंग के बिना , अपने ऑडियो स्ट्रीम को AAC में ट्रांसकोड करने के साथ । इसलिए मैंने निम्नलिखित कमांड की कोशिश की:

ffmpeg -i 140612_Canon-00000.MTS -t 60 -y -vcodec copy -acodec libfaac -ab 128k 140612_Canon-00001.MTS.mp4

2. परिणाम

और आउटपुट फ़ाइल का विनिर्देश नीचे दिखाया गया है:

$ ffprobe 140612_Canon-00000.MTS.mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '140612_Canon-00000.MTS.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf55.33.100

  Duration: 00:01:00.04, start: 0.021333, bitrate: 4590 kb/s

    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 
        1440x1080 [SAR 4:3 DAR 16:9], 4448 kb/s, 
        59.94 fps, 59.94 tbr, 90k tbn, 59.94 tbc (default)
    Metadata:
      handler_name    : VideoHandler

    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 
        48000 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

फ्रामरेट / टाइमबेस के भाग को देखें: 59.94 एफपीएस, 59.94 टीबीआर, 90k टीबीएन, 59.94 टीबीसी । हालाँकि ffmpeg ने सिर्फ वीडियो स्ट्रीम को कॉपी किया है, लेकिन फ्रेमरेट और टाइमबेस को दो बार बदल दिया गया है

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

3. प्रश्न

  1. मैं कैसे बदल सकता हूँ। MTS फ़ाइल (AVCHD) .Mp4 द्वारा ffmpeg द्वारा फिर से H264 वीडियो स्ट्रीम को सही तरीके से एन्कोडिंग किए बिना ?
  2. जब मैं कंटेनर को उसके स्विच के साथ परिवर्तित करता हूं तो मैं मूल फ्रेमरेट / टाइमबेस मान (एफपीएस / टीआरबी / टीबीएन / टीसीबी) कैसे रख सकता हूं ।ffmpeg-vcodec copy
  3. मैं एक वीडियो स्ट्रीम को फिर से एन्कोडिंग किए बिना ffmpeg के कमांड लाइन विकल्पों द्वारा फ़्रैमरेट / टाइमबेस मान (एफपीएस / tbr / tbn / tbc) कैसे सेट कर सकता हूं ।

कोई विचार?


4. -r 29.97विकल्प जोड़ना

प्रोफेसर स्पार्कल्स ने मुझे जोड़ने की सलाह दी -r 29.97। मैंने कोशिश की है कि:

ffmpeg -i 140612_Canon-00001.MTS -t 60 -r 29.97 -y -vcodec copy -acodec libfaac -ab 128k 140612_Canon-00001.MTS.mp4

हालाँकि, आउटपुट फ़ाइल में अभी भी गलत framerate / timebase है:

Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 
1440x1080 [SAR 4:3 DAR 16:9], 4448 kb/s, 
59.94 fps, 59.94 tbr, 11988 tbn, 59.94 tbc (default)

5. MP4Box का उपयोग कर रीमेक

प्रोफेसर स्पार्कल्स की सलाह के अनुसार, मैंने MP4Box का उपयोग करके डिमक्स और रीमक्स की कोशिश की।

brew install mp4box

ffmpeg -i 140612_Canon-00000.MTS -t 60 -y \
  -vcodec copy -an 140612_Canon-00000.MTS.h264

ffmpeg -i 140612_Canon-00000.MTS -t 60 -y \
  -vn -acodec libfaac -ab 128k 140612_Canon-00000.MTS.aac

mp4box -add 140612_Canon-00000.MTS.h264:fps=29.97 \
  -add 140612_Canon-00000.MTS.aac \
  -new 140612_Canon-00000.MTS.mp4

और उत्पादन था:

$ ffprobe 140612_Canon-00000.MTS.mp4

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '140612_Canon-00000.MTS.mp4':
(snip)
  Duration: 00:02:00.22, start: 0.000000, bitrate: 2293 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), 
          yuv420p, 1440x1080 [SAR 4:3 DAR 16:9], 2228 kb/s, 
          29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
    Metadata:
      creation_time   : 2014-07-14 00:38:23
      handler_name    : 140612_Canon-00000.MTS.h264:fps=29.97
       - Imported with GPAC 0.5.0-rev4065

    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 48000 Hz, 
          stereo, fltp, 125 kb/s (default)

यह थोड़ा कदम आगे दिखता है। फ्रामरेट / टाइमबेस के भाग को देखें: 29.97 एफपीएस, 29.97 टीबीआर, 30k टीबीएन, 59.94 टीबीसी । वे मूल धारा से मेल खाते हैं, सिवायtbn (कंटेनर से टाइमबेस मान) के।

हालाँकि, जब मैं क्विकटाइम प्लेयर या वीएलसी के साथ आउटपुट फ़ाइल वापस खेलता हूं, तो वीडियो आधी गति से वापस चला जाता है

हालाँकि मूल फ़ाइल में 90k tbn(90000 टिक प्रति सेकंड) है और MP4Box से नई आउटपुट फ़ाइल है 30k tbnजो मूल एक का सिर्फ एक तिहाई मूल्य है, आउटपुट फ़ाइल आधी गति से वापस खेलती है।

मुझे इसका कारण पता नहीं है। लेकिन मुझे लगता है कि बाकी मुद्दा यह है कि मैं tbnमूल्य को कैसे समायोजित कर सकता हूं ।


5-ख। आउटपुट फाइल पर MediaInfo की रिपोर्ट

मैं भी उत्पादन आउटपुट फ़ाइल पर MediaInfo उपकरण की कोशिश की 5. MP4Box का उपयोग कर रीमिक्स । यहाँ आउटपुट है: https://gist.github.com/kaorukobo/c5ab9eaa413dff6cd26a


6. एवोकॉन की कोशिश करना

वोलोडा ने बताया कि avconvअच्छी तरह से काम किया। इसके अलावा मैंने एक ही कैमरे से रिकॉर्ड की गई एक छोटी सैंपल मूवी फाइल (Canon-00006.MTS) तैयार की। ठीक है, चलो कोशिश करते हैं:

brew install avconv
avconv -i Canon-00006.MTS -c:a copy -c:v copy -y Canon-00006.MTS.mp4
ffprobe Canon-00006.MTS.mp4

आउटपुट फ़ाइल की ffprobe जानकारी यहाँ है: https://gist.github.com/kaorukobo/5b53244ade2632ff1211 और इसकी framerate / timebase जानकारी निम्नानुसार है: 59.94 fps, 59.94 tbr, 90k tbn, 59.94 tbc

वोलोडा की रिपोर्ट के अनुसार वीएलसी प्लेयर के साथ आउटपुट फाइल अच्छी तरह से खेली गई थी । हालाँकि, इसे क्विकटाइम प्लेयर X के साथ खोलते हुए, वीडियो को सामान्य गति से वापस खेल लिया गया था, लेकिन इसके फ्रेम के पीछे बार-बार होने के कारण।


7. क्यों "एमवीवी के लिए नि: शुल्क AVCHD" ऐप काम करता है?

जैसा कि मैंने अपनी पिछली टिप्पणी में उल्लेख किया है , निशुल्क AVCHD से MOV ऐप के "रीवराप टू MOV" फीचर ने अच्छी तरह से काम किया, भले ही यह MP4 नहीं बल्कि MOV बनाता है।

सॉफ्टवेयर अपने स्वयं के ffmpeg (या avconv) प्रोग्राम को आंतरिक रूप से कॉल करता है, और मैंने देखा कि इसके लिए कौन से विकल्प पास किए गए हैं। यह नीचे दिखाया गया है:

/Applications/Free AVCHD to Mov.app/Contents/Resources/bin/com.geranium-soft.convert \
  -i /path/to/140710_Canon-00003.MTS \
  -map 0:0 -map 0:1 -c:a libfaac -vol 256 -b:a 128k -c:v copy \
  -sn -movflags faststart -threads 0 -pix_fmt yuv420p -y \
  /path/to/140710_Canon-00003.mov

मैंने एक ही विकल्प पास करने की कोशिश की (एक्स्ट्रीमली एक ही। मैंने आउटपुट कंटेनर टाइप को MOV पर सेट किया और यहां तक ​​कि -t 60स्विच भी हटा दिया ।) ffmpeg प्रोग्राम और कंवर्टिंग के लिए। लेकिन परिणाम वही था जो अब तक रिपोर्ट किया गया था

वैसे भी उस महान ऐप ने मेरी समस्या को "मैं कैसे परिवर्तित कर सकता हूं। एमटीएस फ़ाइल (AVCHD) को .mp4 को फिर से एन्कोडिंग के बिना H264 वीडियो स्ट्रीम?"? लेकिन मुझे अभी भी इस बात में दिलचस्पी है कि वो ऐप अच्छा क्यों करे लेकिन ffmpeg नहीं।


"सही ढंग से" का क्या मतलब है? हो सकता है कि शीर्षक से हटा दें। मैं मदद करना चाहूंगा लेकिन मैंने कभी भी ffmpeg का उपयोग नहीं किया है। मैं बस का उपयोग करें Adobe उपकरण मीडिया एनकोडर।
eLouai

@eLouai सब ठीक है, मैंने शीर्षक तय किया।
कोरूकोबो

जवाबों:


8

यह देखकर कि आपके प्रश्न के पाठ में आपने अन्य उपयोगिताओं पर चर्चा शुरू कर दी है, मैं यह मानूंगा कि आप ffmpeg के साथ चिपके रहने में रुचि नहीं रखते हैं, बल्कि काम पूरा करने में रुचि रखते हैं।

Libav और MTS के साथ मेरे अनुभव में मुझे framerate की कोई समस्या नहीं है, फाइलें पूरी तरह से रिमूव हो जाती हैं।

मैंने अपनी एक फाइल के साथ निम्नलिखित प्रयास किया है:

avconv -i 00174.MTS -c:a copy -c:v copy 00174.mp4

परिणामस्वरूप MP4 फ़ाइल VLC के साथ सही तरीके से खेला गया।

मेरी फ़ाइल प्रगतिशील एमटीएस है, मेरे पास कोई इंटरलेस्ड बिछाने नहीं है, लेकिन अगर ज़रूरत हो तो मैं उसके साथ अधिक जाँच कर सकता हूं।

फ़ाइल परीक्षण के बारे में रिपोर्ट करें

विषय स्टार्टर एक फ़ाइल प्रदान करने में सक्षम था, जिसे एमटीएस से एमपी 4 में हटा दिया गया था और क्विकटाइम प्लेयर (संस्करण अज्ञात) के साथ उस व्यक्ति की मशीन पर नहीं खेला था। हालाँकि, यह उस व्यक्ति के VLC खिलाड़ी के साथ खेलता था।

मेरे पास मैक ओएस कंप्यूटर नहीं है, लेकिन मैंने इसे उबंटू के साथ आज़माया है। मैंने इसे VLC (2.0.8) और GNOME वीडियो (जिसे टोटेम कहा जाता है) (3.8.2) पर Ubuntu पर खेला है; दोनों पूरी तरह से खेलते हैं।

मैंने तब अपने एक दोस्त से पूछा, जो मैक पर है। वह Mavericks (10.9.4) पर है, और यह क्विकटाइम प्लेयर 10.3 (727.4) के साथ ठीक खेला।

इस समय यह विशेष खिलाड़ी के साथ एक समस्या या कंप्यूटर पर कॉन्फ़िगरेशन सेटिंग्स के साथ एक समस्या प्रतीत होती है। और संभवतः QTP के नवीनतम संस्करण को अपडेट करने का प्रयास करना संभव है, संभवतः पहले वर्तमान संस्करण को हटाकर पुराने कॉन्फ़िगरेशन को पूरी तरह से मिटा दिया जाए।

एक अन्य संभावना

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

इस संभावना में, सॉफ़्टवेयर को अपग्रेड करने का प्रयास करने के लिए सबसे अच्छा विकल्प अभी भी है। वर्तमान मल्टीकोर प्रोसेसर के साथ वास्तव में इसे प्राप्त किए बिना हार्डवेयर को अपग्रेड करने की आवश्यकता का परीक्षण करना कठिन होगा, लेकिन हो सकता है कि क्विकटाइम प्लेयर के दौरान सीपीयू लोड को देखने और वीएलसी से तुलना करना संभव हो। यदि आप QTP के साथ किसी एक कोर के लिए 100% देखते हैं, तो शायद इस बात का संकेत है।


बल्कि यह संभावना नहीं है कि एवोकॉन उसके लिए एक अलग काम करेगा। avconv ffmpeg का एक कांटा है और ffmpeg, ffmpeg में avconv प्रोजेक्ट से बहुत सारे कमेंट्स को मर्ज कर रहा है, प्रमुख बग फिक्स जैसे कि ffmpeg में मौजूद होंगे।
पीटीएस

@ प्रोफॉर्सेपर्कल्स मुझे लगता है कि इस तथ्य ने यहां काम किया है, अन्यथा विश्वास करने के लिए पर्याप्त आधार है। मैं यह देखने के लिए इंतजार करूंगा कि कोरकूबो क्या कहता है।
v010dya

@Volodya आपकी जानकारी के लिए धन्यवाद। मैंने अपने प्रश्न पर टालने की कोशिश के साथ रिपोर्ट को जोड़ा।
कोरुकोबो

@kaorukobo क्या वास्तव में आप "इसका फ्रेम पिछड़े हुए बार-बार पीछे होने के साथ" से मतलब है? क्या आउटपुट हिलता है या किसी तरह से आगे और पीछे कूदता है?
v010dya

@Volodya मुझे लगता है कि आपकी अभिव्यक्ति सही है। हाथ कंगन को आरसी क्या। मैंने परिणामी Canon-00006.MTS.mp4 को अपलोडरपर अपलोड किया है। लॉग ऑन करने के लिए यदि आपको कोई आपत्ति नहीं है, तो कृपया उस फाइल को क्विकटाइम प्लेयर (यदि आपके पास मैक है ...) को VLC नहीं है।
कोरुकोबो

5

इस ffmpeg बग के अनुसार

Interlaced H.264 पैकेट MP4 STTS के कारण विभाजित होते हैं

जब mp4 में इंटरलेस्ड H.264 युक्त mpeg-ts को रीमेक किया जाता है, तो प्रत्येक वीडियो फ्रेम के दोनों क्षेत्रों को अलग-अलग पैकेट में विभाजित किया जाता है। Mediainfo जैसे सॉफ्टवेयर फ्रेम दर निर्धारित करने के लिए STTS का उपयोग करते हैं। यह 25fps के बजाय 50fps के रूप में दिखाई देगा

फ्रेम दर बेमेल की रिपोर्ट यहाँ विनिर्देशन के अनुसार ffmpeg muxing इंटरलेस्ड MP4 स्ट्रीम का परिणाम प्रतीत होता है, जिसके अनुसार, प्रत्येक फ़ील्ड को एक पैकेट में अलग किया जाता है। और इस तरह

"सॉफ्टवेयर जो फ्रेम दर निर्धारित करने के लिए MP4 फ़ाइल में नमूना गिनती का उपयोग करता है, बस गलत है।" टिप्पणी 7

यह एक एक्सेस यूनिट में फ़ील्ड जोड़े के विलय के रूप में पैच नहीं किया जाएगा, MPEG-4 विनिर्देश का उल्लंघन करता है, और इसलिए कोई भी एन्कोडर जो ऐसा करता है।

ध्यान दें कि इस तरह के नीचे एक के रूप में muxed उत्पादन,, निभाता है ठीक मेरे लिए PotPlayer और वीएलसी में।

    ffmpeg version N-76741-g8eadabf Copyright (c) 2000-2015 the FFmpeg developers
  built with gcc 5.2.0 (GCC)

Input #0, mpegts, from '00007.MTS':
  Duration: 00:00:07.01, start: 1.033367, bitrate: 15935 kb/s
  Program 1 
    Stream #0:0[0x1011]: Video: h264 (High) (HDMV / 0x564D4448), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0:1[0x1100]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 5.1(side), fltp, 448 kb/s
    Stream #0:2[0x1200]: Subtitle: hdmv_pgs_subtitle ([144][0][0][0] / 0x0090), 1920x1080
[mp4 @ 054cf020] Codec for stream 0 does not use global headers but container format requires global headers
Output #0, mp4, to '00007.MTS.mp4':
  Metadata:
    encoder         : Lavf57.16.100
    Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 29.97 fps, 29.97 tbr, 90k tbn, 90k tbc
    Stream #0:1: Audio: aac ([64][0][0][0] / 0x0040), 48000 Hz, 5.1(side), fltp, 128 kb/s
    Metadata:
      encoder         : Lavc57.15.100 aac
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (ac3 (native) -> aac (native))
Press [q] to stop, [?] for help
[mp4 @ 054cf020] Timestamps are unset in a packet for stream 0. This is deprecated and will stop working in the future. Fix your code to set the timestamps properly
[mp4 @ 054cf020] pts has no value
    Last message repeated 209 times
frame=  420 fps=0.0 q=-1.0 Lsize=   12478kB time=00:00:07.01 bitrate=14564.2kbits/s    
video:12458kB audio:6kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.111239%
[aac @ 052fd480] Qavg: 64863.176

4

आप मूल फ़्रेम दर का उपयोग करके लागू करने का प्रयास करना चाह सकते हैं -r 29.97। FFmpeg शायद किसी कारण से फ्रैमरेट को समायोजित करने की कोशिश कर रहा है। आपका सिंटैक्स अन्यथा सही है और उस त्रुटि का उत्पादन नहीं करना चाहिए।

अपने तीसरे प्रश्न के बारे में। बस संभव नहीं है। कोडेक्स का उपयोग करते समय आप फ़्रेम को छोड़ सकते हैं जो व्यक्तिगत रूप से फ़्रेम को एन्कोड करते हैं, लेकिन h264 के साथ ऐसा नहीं है, लेकिन यहां तक ​​कि ऐसे कोडेक के साथ आप अभी भी किसी तरह से वीडियो स्ट्रीम को संशोधित करते हैं। वही फ्रेम दर बढ़ाने के लिए जाता है, आपको या तो गणना किए गए फ़्रेमों को जोड़ना होगा या कुछ फ़्रेमों को डुप्लिकेट करना होगा।

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

एक अन्य विकल्प कंटेनर को डिमोक्स करना और वीडियो और ऑडियो स्ट्रीम को एक नए कंटेनर में रिमूव करना होगा जिसमें आपके विकल्प निर्दिष्ट होंगे। आप कितना फिर से निर्दिष्ट कर सकते हैं कंटेनर प्रारूप पर निर्भर करता है। MP4Box टूल इस मदद के साथ हो सकता है कि इस मामले में, आप एक फ्रैमरेट निर्दिष्ट कर सकते हैं जब कच्चे विडियो को एक नए mp4 में निम्न सिंटैक्स का उपयोग करके स्ट्रीम किया जाता है:

MP4Box -add input.h264:fps=29.97 -new output.mp4

धन्यवाद। -t 60स्विच के बारे में , यह एक फ्रेमरेट नहीं बल्कि प्रोसेसिंग अवधि ( $ ffmpeg -h|grep -- -t-> -t duration record or transcode "duration" seconds of audio/video) निर्दिष्ट करने का एक विकल्प है
kaorukobo

ओह ठीक है कि एक अलग एनकोडर था, उस त्रुटि के लिए खेद है।
पीटीएस

उत्तर के लिए मेरा संपादन देखें।
पीटीएस

एक बार फिर धन्यवाद। मैंने आपकी सलाह को आजमा कर अपने प्रश्न को संपादित किया। दुर्भाग्य से, समस्या अभी भी थी ..
kaorukobo

मेरे तीसरे प्रश्न के प्रति आपकी प्रतिक्रिया के बारे में, यह उस मामले के लिए बिल्कुल सही है जिसे मैं वीडियो स्ट्रीम के फ़्रैमरेट में बदलना चाहता हूं, न कि केवल "मान" पर। हालांकि, मेरे मामले में, "set framerate/timebase values"कंटेनर / कोडक-स्ट्रीम के हेडर पर डाले गए मूल्यों को फिर से लिखने का मतलब है। क्यों? इससे निपटने के लिए कुछ मामले हैं: ऐसा मामला जो कुछ एनकोडर (उदाहरण के लिए Apple कंप्रेसर के h264 ट्रांसकोडर) वीडियो स्ट्रीम के लिए गलत टाइमबेस मान (tbc) को इंजेक्ट करता है, और इस तरह का मामला इस सवाल से जुड़ा है कि ffmpeg गलत framerate / timebase मानों को इंजेक्ट करता है, जो मूल वीडियो फ़ाइलों के लिए अलग है।
कोरुकोबो

2

मुझे पता है कि यह एक पुराना सवाल है, लेकिन यह सिर्फ फीड में फिर से पॉप अप हुआ है इसलिए यह मेरे लिए नया है। (-:

एक चीज जो मैंने नहीं देखी है वह है फील्ड ऑर्डर। यह एक इंटरलेस्ड फ़ाइल है, इसलिए यह एक विचार है। ओपी में तख्ते का उल्लेख किया गया है "आगे और पीछे क्वेरिंग" जो हमेशा गलत फील्ड ऑर्डर के लिए एक ध्वज होता है। यदि वीडियो 'क्वेरिंग' को छोड़कर अन्यथा ठीक है, तो "ffmpeg को पहले शीर्ष क्षेत्र" के लिए बाध्य करने के लिए जो भी आवश्यक हो, उसे जोड़ने की कोशिश करें, अगर यह अभी भी गलत है तो इसके विपरीत। मैं उस के लिए सटीक झंडे देने के लिए ffmpeg विवरण के साथ पर्याप्त परिचित नहीं हूँ।


मैं आपके जवाब पर कुछ ffmepg कमांड चलाने की कोशिश करना चाहता हूं। हालाँकि मेरे ffmpeg संस्करण 2.2.1 में ऐसे विकल्प नहीं हैं जो क्षेत्र क्रम को संभालते हैं। मैंने कोशिश की ffmpeg -h|egrep 'field|first'लेकिन यह कुछ नहीं दिखाता है। पिछले संस्करण (0.8.6) में ffmpeg का -topविकल्प था जो इसे संभाल सकता है।
कोरुकोबो

@kaorukobo इंटरनेट इसे प्रदान करता है: -vf "फ़ील्डऑर्डर = bff" या = tff जहाँ t और b क्रमशः ऊपर और नीचे संदर्भित करते हैं। शीर्ष = 1/0 विकल्प जाहिरा तौर पर जिस क्रम में खेतों, पढ़ रहे हैं नहीं लिखा बदलने के लिए प्रयोग किया जाता है। फिर, मैं ffmpeg / avconv केवल आकस्मिक रूप से उपयोग करता हूं, इसलिए कोई गारंटी नहीं है।
जिम मैक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.