वीडियो की अवधि 0:00 दिखाती है — इसे कैसे ठीक करें
फ़ाइल सैकड़ों मेगाबाइट (या गीगाबाइट) की है। हो सकता है कि Finder / Explorer प्रीव्यू थंबनेल भी दिख रहा हो। लेकिन QuickTime, Finder के 'जानकारी पाएँ' फ़ीचर, Premiere के इम्पोर्ट डायलॉग और 'ffprobe' में अवधि '0:00' दिखाई देती है। ऐसा लगता है कि वीडियो की कोई लंबाई नहीं है।
यह लगभग हमेशा मेटाडेटा से जुड़ी समस्या होती है, कॉन्टेंट से जुड़ी समस्या नहीं। वीडियो डेटा फ़ाइल में मौजूद है। वीडियो की अवधि बताने वाली जानकारी — यही वह चीज़ है जो गायब या खराब है।
MP4 / MOV में अवधि कहाँ मौजूद होती है
अवधि MOOV के अंदर 'mvhd' एटम (मूवी हेडर) में स्टोर की जाती है, और 'tkhd' और 'mdhd' में प्रति-ट्रैक भी स्टोर की जाती है। तीनों में एक जैसी जानकारी होनी चाहिए। अगर MOOV पूरी तरह से मौजूद नहीं है, तो तीनों मौजूद नहीं हैं — अवधि 0 दिखाई देती है, क्योंकि पढ़ने के लिए कुछ भी नहीं है।
तीन पैटर्न:
पैटर्न 1: MOOV मौजूद नहीं है → अवधि 0 दिखाती है
मूल कारण वही है जो MOOV atom not found में है: इंडेक्स लिखे जाने से पहले रिकॉर्डिंग रुक गई थी। अवधि फ़ील्ड फ़ाइल में कहीं भी मौजूद नहीं है।
संकेत: फ़ाइल बड़ी है, लेकिन 'ffprobe' से "moov atom not found" मिलता है और अवधि 0 या "N/A" के रूप में दिखाई जाती है।
यह सबसे ज़्यादा रिकवर किया जा सकने वाला मामला है।
पैटर्न 2: MOOV मौजूद है, लेकिन इसका टाइमस्केल = 0 या अवधि = 0 है
MOOV मौजूद है; 'mvhd' के अंदर अवधि फ़ील्ड शून्य पर सेट है (या टाइमस्केल शून्य है, जिसके कारण विभाजन के कारण प्रदर्शित अवधि शून्य हो जाती है)। ऐसा कभी-कभी आंशिक-राइट MOOV के साथ होता है, जिनमें कैमरा बंद होने से पहले अवधि की पूरी जानकारी नहीं डाली जा पाती।
संकेत: 'ffprobe' स्ट्रीम की संख्या और कोडेक की जानकारी दिखाता है, लेकिन अवधि 0 या N/A होती है। फ़ाइल तो चलती है, लेकिन प्लेयर सीक नहीं कर पाता और कोई प्रोग्रेस बार नहीं दिखाता।
अक्सर इसे री-मक्स द्वारा ठीक किया जाता है, जो फ़्रेम टाइमस्टैम्प से अवधि की फिर से गणना करता है:
ffmpeg -i broken.mp4 -c copy fixed.mp4
FFmpeg कोडेक-लेवल टाइमस्टैम्प से अवधि की फिर से गणना करता है और एक नया MOOV लिखता है।
पैटर्न 3: बहुत लंबी रिकॉर्डिंग पर इंटीजर ओवरफ़्लो
कम आम। कुछ पुराने टूल अवधि को एक 32-बिट वैल्यू के रूप में स्टोर करते हैं, जिसका टाइमस्केल बड़ा होता है। कुछ घंटों से ज़्यादा लंबी रिकॉर्डिंग के लिए यह ओवरफ़्लो हो जाता है। वैल्यू या तो नेगेटिव नंबर में बदल जाती है या शून्य दिखाई देती है।
संकेत: फ़ाइल कई घंटों की रिकॉर्डिंग से है (सुरक्षा कैमरा, लाइवस्ट्रीम, लंबा इवेंट)। FFmpeg का री-मक्स इसे ठीक करता है, ज़रूरत पड़ने पर 64-बिट अवधि लिखकर।
यह कैसे पता लगाएँ कि कौन-सा पैटर्न है
ffprobe -v error -show_format broken.mp4
आउटपुट देखें:
| 'अवधि' मान | पैटर्न |
|---|---|
| 'N/A' और "moov atom not found" वॉर्निंग | पैटर्न 1 |
| '0.000000' और स्ट्रीम जानकारी मौजूद | पैटर्न 2 |
| ऋणात्मक संख्या या बड़ी-बड़ी बेतुकी संख्या | पैटर्न 3 |
| वास्तविक संख्या, लेकिन गलत | नीचे देखें |
अगर अवधि वास्तविक है, लेकिन गलत है — जैसे, फ़ाइल 12 मिनट दिखाती है, लेकिन रिकॉर्डिंग वास्तव में 47 मिनट की थी — तो यह एक अलग "गलत अवधि" पैटर्न है, जो आमतौर पर टाइमस्केल में मेल न खाने की वजह से होता है। FFmpeg के साथ री-मक्स करने से ज़्यादातर मामलों में यह समस्या ठीक हो जाती है।
आप खुद क्या आज़मा सकते हैं
पैटर्न 1 के लिए: MOOV रिकवरी गाइड देखें।
पैटर्न 2 और 3 के लिए, सबसे आसान फ़िक्स FFmpeg री-मक्स है:
ffmpeg -i broken.mp4 -c copy out.mp4
यह MOOV को फ़्रेम टाइमस्टैम्प से कैलक्युलेट की गई अवधि के साथ री-राइट कर देता है। यह आमतौर पर काम करता है।
अगर '-c copy' अवधि को ठीक नहीं करता, तो ऑडियो स्ट्रीम को फिर से एन्कोड करने के लिए मजबूर करें (जो टाइमस्टैम्प मेटाडेटा को भरोसेमंद तरीके से फिर से जनरेट करता है):
ffmpeg -i broken.mp4 -c:v copy -c:a aac out.mp4
अगर दोनों तरीके काम नहीं करते, तो इसका मतलब है कि कोडेक स्ट्रीम में टाइमस्टैम्प डेटा भी खराब हो गया है और अब रिकवरी का काम और भी मुश्किल हो जाएगा।
हमारी रिकवरी शून्य-अवधि वाली फ़ाइलों को कैसे संभालती है
- पैटर्न 1 — फ़्रेम से पूर्ण MOOV सिंथेसिस। अवधि की गणना 'mdat' में पाए गए फ़्रेमों की संख्या और समय के आधार पर की जाती है।
- पैटर्न 2 / 3 — MOOV को बिल्कुल नए सिरे से बनाया जाता है (हम मौजूदा MOOV पर भरोसा नहीं करते)। जब रिकॉर्डिंग की लंबाई इसकी इजाज़त देती है, तो अवधि 64-बिट वैल्यू के साथ लिखी जाती है; टाइमस्केल कोडेक की स्वाभाविक दर से मेल खाने के लिए चुना जाता है।
- 4 GB से ज़्यादा आकार वाली फ़ाइलों के लिए 'co64' ताकि अवधि के फ़िक्स के साथ-साथ चंक ऑफ़सेट ओवरफ़्लो न हों।
आपको क्या करना है
- फ़ाइल अपलोड करें.
- ~1 मिनट बाद 5 सेकंड का मुफ़्त प्रीव्यू। रिकवर की गई फ़ाइल में अवधि वास्तविक रिकॉर्डिंग लंबाई दिखाएगी।
- सिर्फ़ तभी भुगतान करें, जब यह काम करे।
FAQ
मेरी फ़ाइल VLC में सही अवधि दिखाती है, लेकिन QuickTime में 0:00 दिखाती है। परमिसिव बनाम स्ट्रिक्ट रीडर। VLC फ़्रेम टाइमस्टैम्प से अवधि की गणना करता है, भले ही MOOV 0 दिखाए; QuickTime MOOV पर भरोसा करता है। Re-mux दोनों को ठीक कर देता है।
यह फ़ाइल सुरक्षा कैमरे / डैशकैम से है — कई घंटों की रिकॉर्डिंग में अवधि गलत है। संभावित पैटर्न 3 (इंटीजर ओवरफ़्लो)। मौजूदा बिल्ड वाला FFmpeg re-mux ज़्यादातर मामलों में इसे ठीक कर देता है।
मेरी रिकवर की हुई फ़ाइल में अवधि दी हुई है, लेकिन प्लेयर सीक नहीं करेगा। अक्सर एक 'stss' (सिंक सैंपल टेबल) मौजूद नहीं होता — प्लेयर में अवधि मौजूद है, लेकिन सीक करने के लिए कोई कीफ़्रेम मैप नहीं है। रिकवरी देखे गए IDR / कीफ़्रेम पोज़िशन से 'stss' को फिर से बनाती है।
मुझे किसी दूसरे टूल से रिकवर की गई फ़ाइल में अवधि शून्य मिलती है। हो सकता है उनकी रिकवरी से आंशिक MOOV तैयार हुआ हो। मूल (रिकवरी से पहले वाली) फ़ाइल अपलोड करें — हम इसे फिर से शुरू से बनाएँगे।
क्या मेरी फ़ुटेज सुरक्षित है? सर्वर फ़्रांस में है, 48 घंटे बाद ऑटो-डिलीट हो जाता है, किसी भी चीज़ को ट्रेन करने के लिए इस्तेमाल नहीं किया जाता या शेयर नहीं किया जाता। निजता नीति।
संबंधित
मुफ़्त प्रीव्यू · कोई प्रतिबद्धता नहीं
क्या आप अपना वीडियो रिकवर करने के लिए तैयार हैं?
अपनी फ़ाइल अपलोड करें। लगभग एक मिनट में 5-सेकंड का मुफ़्त प्रीव्यू पाएँ। अगर प्रीव्यू सही लगता है, तो ही भुगतान करें।
अपना वीडियो अपलोड करें →