HTTP स्ट्रीमिंग के लिए तैयार MP4 वीडियो


25

मैं कैसे परिवर्तित कर सकते हैं some.flvया some.aviया some.wmvFFmpeg के साथ लगता है कि इस वीडियो को जेडब्ल्यू प्लेयर में खेलने योग्य और seekable हो जाएगा होने के लिए?

जवाबों:


9

यह आपके @abrahab द्वारा अंतिम टिप्पणी का उत्तर है।

आप mp4boxएक फ़ाइल को nginx के माध्यम से छद्म करने में सक्षम होने की आवश्यकता नहीं है । MP4 स्ट्रीमिंग मॉड्यूल मोव परमाणुओं की स्थिति के बावजूद इसकी देखभाल करता है ( mp4boxफ़ाइल की शुरुआत में मूव परमाणु को स्थानांतरित करता है)।


अब 500 सर्वर त्रुटि के लिए, आप mp4box के साथ "-फ्रैग" विकल्प का उपयोग कर रहे हैं? MP4 स्ट्रीमिंग मॉड्यूल खंडित MP4 फ़ाइलों को नहीं पढ़ सकता है। mp4boxछद्म स्ट्रीमिंग के लिए अच्छा उपयोग बेहतर मांग के लिए वीडियो को इंटरलेव करना है। Moov परमाणु स्थानांतरण एक अतिरिक्त लाभ है।

मैं हमेशा mp4boxएक FFmpeg- एन्कोडेड फ़ाइल के लिए ऐसा करता हूं

MP4Box -add MyVideo.mp4 -isma Myvideo-box.mp4

यह डिफ़ॉल्ट रूप से 500 मिलीसेकंड में MP4 फ़ाइल को इंटरलेव करेगा।


1
एक नई फ़ाइल बनाने के लिए बिना सीधे "इन-इन-प्लेस" फ़ाइल इंटरलेइंग करना, सीधे उपयोग करनाMP4Box -isma -inter 500 Myvideo.mp4
Vineet

45

MP4 में H.264

आम तौर पर, आप एक MP4 कंटेनर के भीतर x264 वीडियो बनाना चाहते हैं। यह विकल्प मूल रूप से किसी भी डिवाइस और ब्राउज़र द्वारा समर्थित है।

निम्नलिखित पर्याप्त होना चाहिए। इनपुट नाम और सीआरएफ विकल्पों को बदलना सुनिश्चित करें। उत्तरार्द्ध गुणवत्ता निर्धारित करता है, जहां मानवीय मूल्य 19 से 25 तक होते हैं - कम का मतलब बेहतर गुणवत्ता है, लेकिन उच्चतर बिटरेट:

ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac -movflags faststart output.mp4

यदि आप GUI की तरह हैं, तो आप एन्कोडिंग के लिए हैंडब्रेक का भी उपयोग कर सकते हैं ।

faststartविकल्प का उपयोग करना

अब, आपको जो करने की ज़रूरत है वह शुरुआत में MP4 कंटेनर के MOOV परमाणु को स्थानांतरित करें । इस परमाणु (संक्षेप में, MP4 कंटेनर में डेटा की एक इकाई) में वीडियो / ऑडियो स्ट्रीम के बारे में महत्वपूर्ण मेटाडेटा शामिल होंगे। -movflags faststartठीक वैसा ही करना चाहिए।

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

  • QTIndexSwapper , एक एडोब आकाशवाणी अनुप्रयोग

  • MP4Box , मुक्त और खुला स्रोत, निम्नलिखित के समान एक कमांड चला रहा है, जहां आप अंतराल को बदल सकते हैं (यहां, 500):

    mp4box -inter 500 input.mp4

  • पायथन में क्यूटी-फास्टस्टार्ट , जो हर उस जगह काम करता है जहां अजगर स्थापित है।

    qtfaststart input.mp4

यह इसके बारे में।

बिटरेट / गुणवत्ता को नियंत्रित करना

अब, निश्चित रूप से, स्ट्रीमिंग के लिए आप वास्तव में बिटरेट को कुछ सीमा के भीतर रहने के लिए विवश करना चाह सकते हैं। आप मेरे ब्लॉग पोस्ट में दर नियंत्रण विधियों के बारे में अधिक पढ़ सकते हैं ।

उदाहरण के लिए, -maxrate 2M -bufsize 2Mएन्कोडिंग विकल्पों में जोड़कर , आप एन्कोडिंग को 2 Mbit / s पर कैप करते हैं, जो 720p वीडियो के लिए पर्याप्त हो सकता है। आवश्यक बिटरेट, इस बात पर निर्भर करेगा कि सामग्री कितनी जटिल है। यह कुछ परीक्षण और त्रुटि लेता है।


धन्यवाद, मैं सभी उसी तरह से करता हूं, लेकिन वीडियो के साथ अभी भी समस्या लगती है :( मैं ffmpeg -i 1.flv -vcodec libx264 -f mp4 -an -g 1 -f mp4 -g 30 -level 3 new.mp4तब करता हूं mp4boxऔर mp4 500 internal server errorशुरू करने के लिए और nginx रिपोर्ट की तलाश नहीं कर सकता है और अधिक पैरामीटर 0। जब वीडियो बिना कोड के -vcoded libx264(डिफ़ॉल्ट mp4 कोडर) सभी काम फ़ाइल (लेकिन गुणवत्ता! बीमार!) :( (क्षमा करें, अब, आपको उत्तर देने की अनुमति नहीं है)
अब्राहम

यह किसी भी वीडियो रूपांतरण समस्या के बजाय NginX के साथ h.264 प्लगइन समस्या की तरह लगता है। मैं वेब वीडियो स्ट्रीमिंग में प्रति विशेषज्ञ नहीं हूँ , लेकिन मैं आपको पहले ही स्टैक ओवरफ्लो के बारे में पूछ चुका हूँ? stackoverflow.com/questions/11079748/…
slhck

मैं यह भी सोच रहा हूं कि शायद nginx इस वीडियो प्रारूप को ठीक से नहीं पढ़ सकता है। youtube से वीडियो भी अच्छी तरह से खेला जाता है। हां, मुझे nginx मुद्दे के बारे में स्टैक पर पूछा गया है, लेकिन लगता है कि कोई जवाब नहीं है। :(
अब्राहम

3
+1 के लिए -movflags faststartमुझे जो चाहिए था
andrew

लिंक मर चुका है, web.archive.org का उपयोग करने की आवश्यकता है: web.archive.org/web/2014020114142344/http://www.longtailvideo.com/…
malat

5

आप बस एक गैर-स्ट्रीम करने योग्य AVI या MP4 कन्वर्ट कर सकते हैं, वह भी सब कुछ फिर से एन्कोडिंग के बिना, ऐसा करके:

ffmpeg -i INPUT.mp4 -c copy -movflags faststart STREAMABLE_OUTPUT.mp4

कुछ भी फिर से सांकेतिक शब्दों में बदलना करने की आवश्यकता नहीं है, क्योंकि सिर्फ मूव परमाणु को स्थानांतरित करना होगा।


-1

आप इसे ffmpeg के साथ आज़मा सकते हैं:

ffmpeg.exe -i "INPUT_FILE.AVI" -threads 2 -s 800x600 -r 25.00 -threads 1 -pix_fmt yuv420p -g 300 -qmin 3 -b 2048k -async 1 -acodec pcm_s16le -ar 22050 -ac 1 -ab 128k -y "OUTPUT_FILE.mp4"

5
इंटरनेट स्ट्रीमिंग वीडियो के लिए 22 kHz PCM स्टीरियो ऑडियो? बहुत कुशल ध्वनि नहीं है। और आप ऑडियो बिटरेट को 128k पर क्यों सेट करेंगे?
slhck

@ स्ल्क, आप 22k को 44k में बदल सकते हैं "-ar 22050" को "ar 44100" के साथ
Searush

1
@ कोड समस्या नमूना दर नहीं है। यह तथ्य है कि ऑडियो असम्पीडित पीसीएम स्टीरियो है। इंटरनेट स्ट्रीमिंग के लिए। यह आंकड़ा नहीं है।
slhck

यह उत्तर बहुत कम गुणवत्ता का है और इसे हटा दिया जाना चाहिए। पैरामीटर सामग्री के फ्रेमरेट, वीडियो रिज़ॉल्यूशन और ऑडियो सैंपलिंग दर को बदल सकते हैं और अक्षम या कम गुणवत्ता वाले परिणाम उत्पन्न कर सकते हैं (ffmpeg खुद को सुरक्षित या बेहतर पैरामीटर चुन सकता है)। प्रदर्शन भी कम थ्रेड्स तक सीमा से अपंग है और -acodec pcm_s16le(त्रुटि :) के साथ भी काम नहीं करता है Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument। IETF ड्राफ्ट की तरह एक अच्छा कारण बिल्कुल इन मापदंडों को चुनने के लिए भी गायब प्रतीत होता है।
लाइववायरबीटी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.