सामान्य स्थिति जब एक एमपी3 फ़ाइल की अखंडता सही नहीं होती है, जब फ़ाइल को आंशिक रूप से सर्वर पर अपलोड किया जाता है। इस मामले में, संकेतित ऑडियो अवधि वास्तव में एमपी 3 फ़ाइल में क्या है, इसके अनुरूप नहीं है: हम शुरुआत सुन सकते हैं, लेकिन कुछ बिंदु पर खेलना बंद हो जाता है और ऑडियो प्लेयर की संकेतित अवधि टूट जाती है।

मैंने नोड-एफएफप्रोब जैसे पुस्तकालयों के साथ प्रयास किया, लेकिन ऐसा लगता है कि वे फ़ाइल में वास्तविक ऑडियो डेटा की तुलना किए बिना मेटाडेटा पढ़ते हैं। क्या नोड.जेएस से किसी भ्रष्ट या अधूरी एमपी3 फ़ाइल का कुशलतापूर्वक पता लगाने का कोई तरीका है?

नोट: MP3 फ़ाइलें अपलोड करने वाला क्लाइंट एक हार्डवेयर (एक ऑडियो रिकॉर्डर) है, जो FTP सर्वर पर फ़ाइलें अपलोड करता है। ब्राउज़र नहीं। इसलिए मैं क्लाइंट से संभावित रूप से अधिक उपयोगी डेटा अपलोड करने में सक्षम नहीं हूं।

0
Etienne 1 पद 2020, 20:52

2 जवाब

सबसे बढ़िया उत्तर

MP3 फ़ाइलों की अवधि सामान्य रूप से नहीं होती है। वे सिर्फ एमपीईजी फ्रेम की एक श्रृंखला हैं। कभी-कभी, एक ID3 टैग होता है जो अवधि दर्शाता है, लेकिन हमेशा नहीं।

खिलाड़ी कुछ तरीकों में से किसी एक को चुनकर अवधि निर्धारित कर सकते हैं:

  • संपूर्ण ऑडियो फ़ाइल को डीकोड करें।
    यह सबसे धीमी विधि है, लेकिन यदि आप किसी भी तरह फ़ाइल को डीकोड करने जा रहे हैं, तो आप इस मार्ग पर भी जा सकते हैं क्योंकि यह आपको एक सटीक अवधि देता है।
  • फ्रेम हेडर के माध्यम से स्किमिंग करते हुए पूरी फाइल पढ़ें।
    आपको डिस्क से पूरी फाइल पढ़नी होगी, लेकिन आपको इसे डीकोड नहीं करना होगा। I/O धीमा होने पर धीमा हो सकता है, लेकिन आपको एक सटीक अवधि देता है।
  • पहले फ़्रेम की बिटरेट पढ़ें और फ़ाइल आकार के आधार पर अवधि का अनुमान लगाएं।
    निश्चित रूप से सबसे तेज़ तरीका है, और खिलाड़ियों द्वारा सबसे अधिक उपयोग किया जाने वाला तरीका है। अवधि केवल एक अनुमान है, और सीबीआर के लिए उचित रूप से सटीक है, लेकिन वीबीआर के लिए बेतहाशा गलत हो सकता है।

मुझे जो मिल रहा है वह यह है कि ये फाइलें वास्तव में तोड़ी नहीं जा सकतीं। वे केवल वीबीआर फाइलें हो सकती हैं जिन्हें आपका खिलाड़ी नहीं जानता है।

यदि आप आश्वस्त हैं कि वे टूट गए हैं (जैसे सामग्री के बीच में रुकना), तो आपको यह पता लगाना होगा कि आप इसे कैसे संभालना चाहते हैं। इसे निर्धारित करने के लिए शायद कुछ ही तरीके हैं:

  • आदर्श रूप से, एक ID3 टैग है जो अवधि दर्शाता है, और आप पूरी फ़ाइल को डीकोड कर सकते हैं और तुलना करने के लिए इसकी वास्तविक अवधि निर्धारित कर सकते हैं।
  • आमतौर पर, वह ID3 टैग मौजूद नहीं होगा, इसलिए आपको यह देखने के लिए जांचना होगा कि अंतिम फ़्रेम पूर्ण है या नहीं।

इसके अलावा, आपके पास वास्तव में यह जानने का एक अच्छा तरीका नहीं है कि क्या स्ट्रीम अधूरी है, क्योंकि कोई बाहरी कंटेनर नहीं है जो वास्तव में अपेक्षित फ्रेम की संख्या निर्दिष्ट करता है।

2
Brad 1 पद 2020, 21:25

अवधि और एन्कोडिंग के आधार पर एक एमपी3 के फाइलसाइज की गणना के लिए अभिव्यक्ति ">यह उत्तर) काफी सरल है:

x = length of song in seconds

y = bitrate in kilobits per second

(x * y) / 1024 = filesize (MB)

उस पर एक अन्य उत्तर में वेब ऑडियो एपीआई के लिए जावास्क्रिप्ट कार्यान्वयन भी है वही प्रश्न। शायद यह आपके नोड कार्यान्वयन में उपयोगी होगा।

mp3diags mp3s को ठीक करने के लिए कुछ पुराना ओपन सोर्स सॉफ्टवेयर है और जो इस तरह की बैच प्रोसेसिंग सामग्री के लिए बहुत अच्छा था। स्रोत सी ++ है और अभी भी उपलब्ध है यदि आप नासमझ महसूस कर रहे हैं और देखना चाहते हैं कि इनमें से कुछ सुविधाओं को कैसे लागू किया जाता है।

देखने लायक है क्योंकि इसमें कुछ विशेषताएं हैं जो आपके संदर्भ में उपयोगी हो सकती हैं:

MP3 डायग क्या है और यह क्या करता है?

  • कम गुणवत्ता वाला ऑडियो
  • लापता वीबीआर हेडर
  • लापता सामान्यीकरण डेटा
  • गलत गाने की अवधि दिखाने वाली फाइलों को ठीक करना
  • उन फ़ाइलों को ठीक करना जिनमें खिलाड़ी सही तरीके से खोज नहीं कर सकता
1
lys 2 पद 2020, 07:16