2011-12-23 17 views
33

ffmpeg -i infile.avi out.mp4 गैर-खंडित एमपी 4 आउटपुट करता है।ffmpeg के साथ खंडित mp4 आउटपुट कैसे करें?

मैं खंडित एमपी 4 कैसे प्राप्त करूं?

अद्यतन एक खंडित mp4 फ़ाइल आंतरिक रूप से कई बैक-टू-बैक हिस्सा या एमपीईजी -4 फिल्म टुकड़ों में बांटा गया है। प्रत्येक खंड में अपना स्वयं का मूफ परमाणु होता है - इसलिए एक अप्रतिबंधित एमपी 4 के मामले में अंत में एक ही मूव के बजाय फ़ाइल में कई मूफ परमाणु होते हैं। यह धीमी नेटवर्क पर स्ट्रीम करना आसान बनाता है जहां बफरिंग शामिल है

mp4box जैसे कई टूल हैं जो एक सामान्य एमपी 4 को एक खंडित में परिवर्तित करते हैं। दुर्भाग्य से हम इस

ffmpeg <options to output mp4> | mp4box 

की तरह कुछ का उपयोग नहीं कर सकते हैं के बाद से ffmpeg seekable उत्पादन का उत्पादन नहीं करता है, जबकि mp4 कंटेनर का निर्माण किया।

+2

आप इस समस्या को उन लोगों के लिए अधिक सुलभ बनाने के लिए" खंडित एमपी 4 "के बारे में कुछ जानकारी जोड़ना चाहते हैं जो ffmpeg को अच्छी तरह से जानते हैं, लेकिन खंडित mp4s नहीं। – blahdiblah

+0

अच्छा बिंदु! मैंने अपना प्रश्न संपादित किया है –

+0

@ सप्तर्षि बिस्वास क्या आप mp3box का उपयोग किए बिना इस समस्या को हल करते हैं? क्या आप समाधान साझा कर सकते हैं? धन्यवाद – abrahab

उत्तर

40

इस चाल करना चाहिए:

ffmpeg -re -i infile.ext -g 52 \ 
-strict experimental -acodec aac -ab 64k -vcodec libx264 -vb 448k \ 
-f mp4 -movflags frag_keyframe+empty_moov \ 
output.mp4 
  • frag_keyframe कारणों खंडित उत्पादन,
  • empty_moov उत्पादन 100% खंडित होने का कारण होगा; इसके बिना पहला टुकड़ा एक लघु फिल्म के रूप में (moov का उपयोग करके) के बाद किया जाएगा, शेष मीडिया में टुकड़े,
  • -re लाइव स्ट्रीमिंग (मीडिया बिटरेट पर आउटपुट) के दौरान उपयोगी है, अगर आप इसे बना रहे हैं तो इसका उपयोग न करें एक फ़ाइल,
  • -g 52 बलों (कम से कम) हर 52 वें फ्रेम कीफ़्रेम होने की

एक स्वस्थ-फ़्रेम अंतराल कृपया मेरी स्ट्रीमिंग सर्वर के डॉक्स में fragment sizes के बारे में पैराग्राफ को देखने की गणना करने के। - आप वेबएम का उपयोग करने पर भी विचार कर सकते हैं जो एच .264 के लिए एक मुफ्त विकल्प है (और खंडित एमपी 4 की तुलना में कुछ प्लेटफार्मों पर बेहतर समर्थन है)।

महत्वपूर्ण नोट: FFmpeg के म्युक्सर प्रत्येक ट्रैक के लिए 0xFFFFFFFF करने के लिए दोनों tkhd और mdhd परमाणुओं में अवधि सेट हो जाएगा। इससे कुछ खिलाड़ियों में समस्याएं आती हैं (उदाहरण के लिए क्विकटाइम ऐसी फाइलें नहीं चलाएगा)। आपको एक उपकरण मिलना चाहिए और इसे शून्य (0x00000000) में बदलना चाहिए।

+3

दिखता है -movflags + फास्टस्टार्ट विकल्प हाल ही में FFmpeg में जोड़ा गया था ... – rogerdpack

+1

यदि आपको उपरोक्त आदेश के साथ समस्याएं हैं, तो आपको ffmpeg को पुनर्स्थापित करने की आवश्यकता हो सकती है। सभी विकल्पों के साथ ब्रू के माध्यम से स्थापित करने के लिए: ** ब्रूव स्थापित करें ffmpeg --with-fdk-aac --with-ffplay --with-freetype --with-frei0r --with-libass --with-libvo-aacenc - -with-libvorbis --with-libvpx --with-opencore-amr --with-openjpeg --with-opus --with-rtmpdump --with-schroedinger --with-speex --with-theora --with- टूल्स ** –

+1

क्या फ़ाइल को सहेजने के बजाय आउटपुट को HTML5 में स्ट्रीम करना संभव है? Http प्रोटोकॉल के साथ? – astralmaster

2

ffmpeg -h (लेकिन आदमी पेज) निम्नलिखित है:

mp4 muxer AVOptions: 
-movflags   <flags> E.... MOV muxer flags 
    rtphint     E.... Add RTP hint tracks 
-moov_size   <int> E.... maximum moov size so it can be placed at the 
           beginning 
-frag_size   <int> E.... maximum fragment size 
-frag_duration  <int> E.... maximum fragment duration 
-rtpflags   <flags> E.... RTP muxer flags 
    latm     E.... Use MP4A-LATM packetization instead of 
           MPEG4-GENERIC for AAC 
-skip_iods   <int> E.... Skip writing iods atom. 
-iods_audio_profile <int> E.... iods audio profile atom. 
-iods_video_profile <int> E.... iods video profile atom. 

मैं एक खंडित mp4 पहचान करने के लिए कैसे अगर मैं एक देखा था पता नहीं होगा, लेकिन यह ffmpeg कुछ है की तरह लग रहा (खराब दस्तावेज) उनके लिए समर्थन।

+2

पुन: "मैं नहीं जानता कि एक खंडित एमपी 4 की पहचान कैसे करें यदि मैंने देखा" :) वे एक जैसे दिखते हैं। :) 'moov' के सामने एक 'mvex' परमाणु है जो आपको बताएगा कि यह खंडित हो जाएगा। विभिन्न ट्रैक उप-परमाणुओं में अपेक्षाकृत कम वास्तविक डेटा जानकारी होगी। शीर्ष स्तर 'moof' 'mdat' जोड़े होंगे जहां वास्तविक डेटा रहता है। अंत में एक 'mfra' परमाणु हो सकता है। –

+0

'mp4box -info फ़ाइल' इंगित करेगा कि एमपी 4 खंडित है या नहीं। – Mulvya

4

अद्यतन: एक खंडित एमपी 4 को आईएसएमवी (चिकना स्ट्रीमिंग) फ़ाइल के रूप में देखते हुए। जनवरी, 27, 2012 के बाद से नया संस्करण एफएफएमपीईजी 0.10 इस प्रारूप में मक्स करने में सक्षम है।

ismv muxer AVOptions: 
-movflags   <flags> E.... MOV muxer flags 
    rtphint     E.... Add RTP hint tracks 
    empty_moov    E.... Make the initial moov atom empty (not supported by QuickTime) 
    frag_keyframe   E.... Fragment at video keyframes 
    separate_moof   E.... Write separate moof/mdat atoms for each track 
    frag_custom    E.... Flush fragments on caller requests 
    isml     E.... Create a live smooth streaming feed (for pushing to a publishing point) 
-moov_size   <int> E.... maximum moov size so it can be placed at the begin 
-rtpflags   <flags> E.... RTP muxer flags 
    latm     E.... Use MP4A-LATM packetization instead of MPEG4-GENERIC for AAC 
    rfc2190     E.... Use RFC 2190 packetization instead of RFC 4629 for H.263 
    skip_rtcp    E.... Don't send RTCP sender reports 
-skip_iods   <int> E.... Skip writing iods atom. 
-iods_audio_profile <int> E.... iods audio profile atom. 
-iods_video_profile <int> E.... iods video profile atom. 
-frag_duration  <int> E.... Maximum fragment duration 
-min_frag_duration <int> E.... Minimum fragment duration 
-frag_size   <int> E.... Maximum fragment size 
-ism_lookahead  <int> E.... Number of lookahead entries for ISM files 
0

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

नोट: मूल एन्कोडर 2 सेकंड के अंतराल के अंतराल पर सेट है।

"ffmpeg मैं RTMP: // सर्वर का आईपी: 1935/नाम/streamkey -vcodec प्रतिलिपि -acodec प्रतिलिपि -nal-मानव संसाधन विकास सीबीआर -movflags isml + frag_keyframe + separate_moof -f ismv प्रवेश बिंदु के http://url/प्रवेश बिंदु .isml/streams (feed1) "

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