2012-05-03 22 views
18

की वास्तविक, वास्तविक अवधि कैसे प्राप्त करें, मैं ffmpeg का उपयोग कर एमपी 3 फाइलों सर्वर-साइड की अवधि की गणना करता था - जो ठीक काम करने लग रहा था। आज मैंने पाया कि कुछ गणना गलत थी। किसी भी तरह, किसी कारण से, ffmpeg अवधि का अनुमान लगाएगा और ऐसा लगता है कि यह केवल परिवर्तनीय बिट दर एमपी 3 फ़ाइलों के साथ होता है।एमपी 3 फ़ाइल (वीबीआर या सीबीआर) सर्वर-साइड

स्थानीय रूप से परीक्षण करते समय, मैंने देखा कि ffmpeg ने हरे रंग में दो अतिरिक्त रेखाएं मुद्रित की हैं।

कमान प्रयोग किया है:

ffmpeg -i song_9747c077aef8.mp3 

ffmpeg का कहना है:

[mp3 @ 0x102052600] max_analyze_duration 5000000 reached at 5015510 
[mp3 @ 0x102052600] Estimating duration from bitrate, this may be inaccurate 

एक अच्छा, गर्म गूगल सत्र के बाद, मैं इस पर कुछ पदों की खोज की है, लेकिन कोई समाधान नहीं मिला था।

मैं तो अधिकतम अवधि को बढ़ाने के लिए करने की कोशिश की:

ffmpeg -analyzeduration 999999999 -i song_9747c077aef8.mp3 

इस के बाद, ffmpeg केवल दूसरी पंक्ति लौटे:

[mp3 @ 0x102052600] Estimating duration from bitrate, this may be inaccurate 

लेकिन दोनों ही मामलों में, गणना की अवधि सिर्फ सादा गलत था। इसे वीएलसी से तुलना करते हुए मैंने देखा कि अवधि सही है।

अधिक शोध के बाद मैं mp3info पर ठोकर खाई - जिसे मैंने स्थापित और उपयोग किया।

mp3info -p "%S" song_9747c077aef8.mp3 

mp3info तो सही अवधि लौट आए, लेकिन केवल एक पूर्णांक है, जो मैं के रूप में मैं एक और अधिक सटीक संख्या यहाँ की जरूरत का उपयोग नहीं कर सकते हैं। इसके लिए कारण नीचे दी गई टिप्पणी में समझाया गया था, उपयोगकर्ता blahdiblah - mp3info फ़ाइल से आईडी 3 जानकारी खींच रहा है और वास्तव में कोई गणना नहीं कर रहा है।

मैंने अवधि को पुनर्प्राप्त करने के लिए mplayer का उपयोग करने का भी प्रयास किया, लेकिन जैसे ही ffmpeg, mplayer गलत मान लौटा रहा है।

+0

http://www.id3.org/ –

+0

धन्यवाद, लेकिन मैं एमपी 3 हेडर/आईडी 3 टैग में उचित अवधि की जानकारी नहीं ले सकता, भले ही मैं चाहता हूं। मुझे 100% सटीक परिणाम प्राप्त करने के लिए इसकी गणना करना है। – SquareCat

+0

आह, तो मुझे लगता है कि आपको एमपी 3 के माध्यम से जाना होगा, और प्रत्येक फ्रेम को ढूंढना होगा, फिर उस अवधि की गणना करें। –

उत्तर

17

मुझे अंत में सोक्स का उपयोग करके इस समस्या का उचित समाधान मिला - जो सही जानकारी देता है।

sox file.mp3 -n stat 
Samples read:   19321344 
Length (seconds): 219.062857 
Scaled by:   2147483647.0 
Maximum amplitude:  1.000000 
Minimum amplitude: -1.000000 
Midline amplitude: -0.000000 
Mean norm:   0.141787 
Mean amplitude:  0.000060 
RMS  amplitude:  0.191376 
Maximum delta:   0.947598 
Minimum delta:   0.000000 
Mean delta:   0.086211 
RMS  delta:   0.115971 
Rough frequency:   4253 
Volume adjustment:  1.000 

अवधि (सेकंड): 219,062857

+0

यदि आपको तेज़ समाधान की आवश्यकता है (ऐसा लगता है कि सोक्स फ़ाइल से सभी नमूनों को पढ़ेगा) बिना किसी समस्या के लिनक्स पर न्युडियो - मोनो कामों का उपयोग करके समाधान देखें, यह संभव है ... –

+0

यह 'सोक्स FAIL प्रारूपों का उत्पादन करता है: कोई हैंडलर नहीं डिफ़ॉल्ट रूप से फ़ाइल एक्सटेंशन एमपी 3'। मुझे इसे कैसे इंस्टॉल करना चाहिए? –

+0

http://superuser.com/questions/421153/how-to-add-a-mp3-handler-to-sox/421168 – SquareCat

5

आप फ़ाइल पूरी तरह से डिकोड कर सकते हैं वास्तविक अवधि पाने के लिए:

ffmpeg -i input.mp3 -f null - 

कंसोल आउटपुट की अंतिम पंक्ति से पीछे नहीं दिखाएगा कुछ ऐसा:

size=N/A time=00:03:49.12 bitrate=N/A 

जहां time वास्तविक अवधि है। इस उदाहरण में पूरी प्रक्रिया में लगभग 0.5 सेकंड लग गए।