लिनक्स / फ्रीबीएसडी में एमपी 3 लंबाई प्राप्त करें


27

मैं विभिन्न लंबाई के साथ एमपी 3 फ़ाइलों का एक गुच्छा है। मैं इसे 50% -60% लंबाई तक कम करना चाहता हूं। कहते हैं, 1 मिनट से 30 सेकंड तक। यह ffmpeg का उपयोग करके तुच्छ होना चाहिए। लेकिन, मुझे नहीं पता कि ffmpeg का उपयोग करके प्रसंस्करण के लिए आधार के रूप में इसकी मूल लंबाई कैसे निर्धारित की जाए।

किसी को एक विचार है?

जवाबों:


31

Ffmpeg के साथ वहाँ कोई रास्ता नहीं है मुझे पता है कि एक स्क्रिप्ट पर आप एक चर के रूप में लंबाई प्राप्त कर सकते हैं। लेकिन mp3info करता है।

mp3info -p "%S" sample.mp3   // total time in seconds

हाँ, Ffmpeg में लंबाई की जानकारी प्राप्त करने का कोई तरीका नहीं है। मैंने पहले ही कहा था, मैं लंबाई मिलने के बाद ही ffmpeg का उपयोग करता हूं। वैसे भी, हेड यूपी के लिए धन्यवाद।
3

4
ध्यान देने योग्य बात यह है कि यह केवल एक पूर्णांक के रूप में लंबाई प्रदान करता है। तो कुछ उपयोग मामलों के लिए पर्याप्त सटीक नहीं हो सकता है।
रॉस

सर्वश्रेष्ठ उत्तर के रूप में यह औसत या चर बिटरेट एमपी 3 के साथ भी काम करता है!
क्रिशवेबदेव

1
\nनई लाइन प्रिंट करने के लिए भी जोड़ें । > mp3info -p "%S\n" sample.mp3 // कुल समय सेकंड में
nexayq

22

ffmpegयदि आप इसे किसी अन्य तर्क नहीं देते हैं तो यह फ़ाइल के बारे में जानने वाली हर चीज़ को प्रिंट करेगा। grepसब कुछ छीनने के लिए उपयोग करें लेकिन "अवधि":

$ ffmpeg -i foo.mp3 2>&1 | grep Duration
  Duration: 01:02:20.20, start: 0.000000, bitrate: 128 kb/s

आप भी इस्तेमाल कर सकते हैं mplayer। लाइन "ID_LENGTH =" के लिए ग्रीप:

$ mplayer -ao null -identify -frames 0 foo.mp3 2>&1 | grep ID_LENGTH
ID_LENGTH=3740.00

3
$ ffmpeg -i foo.mp3 2> & 1 | awk '/ Duration / {प्रिंट पदार्थ ($ 2,0, लंबाई ($ 2) -1)}' सिर्फ समय भाग के लिए
Craig Tataryn

एमपी 3 फ़ाइलों के एक सेट की लंबाई का योग करने के लिए, आप TOTLENGTH=0; for f in *.mp3; do LENGTH=$(mplayer -ao null -identify -frames 0 "$f" 2>&1 | awk -F= '/ID_LENGTH/ {print $2}' | awk -F. '{print $1}'); TOTLENGTH=$(($TOTLENGTH + $LENGTH)); done; echo $TOTLENGTHसभी फ़ाइलों में ऑडियो की कुल लंबाई को प्रिंट करने के लिए कुछ सेकंड में उपयोग कर सकते हैं । यह शायद अधिक कुशलता से किया जा सकता है, लेकिन जब से मैंने इसे एक-बंद के रूप में लिखा है, यह मेरी जरूरतों के लिए काफी अच्छा था। (दूसरा awk मंगलाचरण स्ट्रिप्स ऑफ डिकिमल्स, इसलिए परिणाम 100% सटीक नहीं है, लेकिन फिर से, मेरी जरूरतों के लिए काफी अच्छा है।)
एक CVn

Ffmpeg के -analyzeduration ध्वज से सावधान रहें। मूल रूप से, सीपीयू को बचाने के लिए एक निश्चित बिंदु के बाद इसकी संख्या का अनुमान लगाया जाता है।
ग्लीसनर

एक औसत बिटरेट एमपी 3 का उपयोग करके, ffmpeg इस चेतावनी के साथ एक गलत अवधि की रिपोर्ट करता है Estimating duration from bitrate, this may be inaccurate। मुझे लगता है कि यह उत्तर केवल निरंतर बिटरेट एमपी 3 के साथ मान्य है ।
क्रिशवेबदेव

9

दिलचस्प बात यह है कि अंतिम लाइन के रूप में EXIFTool एप्लिकेशन एमपी 3 अवधि देता है!

$ exiftool somefile.mp3
ExifTool संस्करण संख्या: 7.98
फ़ाइल का नाम: somefile.mp3
निर्देशिका : ।
फ़ाइल का आकार: 49 एमबी
फ़ाइल संशोधन तिथि / समय: 2009: 09: 10 11: 04: 54 + 05: 30
फ़ाइल प्रकार: एमपी
MIME प्रकार: ऑडियो / एमपीईजी
एमपीईजी ऑडियो संस्करण: 2.5
ऑडियो लेयर: 3
ऑडियो बिटरेट: 64000
नमूना दर: 8000
चैनल मोड: एकल चैनल
एमएस स्टीरियो: बंद
तीव्रता स्टीरियो: बंद
कॉपीराइट ध्वज: गलत
मूल मीडिया: सच
जोर: कोई नहीं
आईडी 3 का आकार: 26
शैली: उदास
अवधि: 1:47:46 (लगभग)

3

केवल उपयोग करके अवधि प्राप्त करने का दूसरा तरीका ffmpegऔर grep:

# ffmpeg -i rara.mp3 2>&1 |grep -oP "[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{2}"
00:03:49.12

2

ffmpegमेरे द्वारा उपयोग किए जाने वाले समाधान मुझे थोड़े नाजुक लगते हैं, क्योंकि वे आउटपुट को पार्स कर रहे हैं जो कि एक इंटरफ़ेस के रूप में डिज़ाइन नहीं किया गया है। उन्होंने कहा कि वे संभवतया कई वर्षों तक काम करना जारी रखेंगे।

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

ffprobe -show_streams -print_format json song.mp3 -v fatal | jq '.streams[0].duration'

2
आप बस कर सकते हैंffprobe -show_entries stream=duration -of compact=p=0:nk=1 -v fatal song.mp3
ज्ञान

1

मैं व्यक्तिगत रूप से जानकारी निकालने के लिए Mplayer का उपयोग करता हूं, ज्यादातर क्योंकि मैं पहले से ही इसे स्थापित कर चुका हूं और अनावश्यक रूप से नए सॉफ़्टवेयर को स्थापित करने के लिए परेशान नहीं किया जा सकता है। इसका लाभ यह है कि यह विशेष रूप से एमपी 3 फ़ाइलों तक सीमित नहीं है, और किसी भी मीडिया फ़ाइल के साथ काम करना चाहिए जिसे Mplayer संभाल सकता है। निम्नलिखित एक-लाइनर सेकंड में ट्रैक की लंबाई वापस कर देगा।

mplayer -identify -ao null -vo null -frames 0 Filename.mp3 | grep ^ID_LENGTH= | cut -d = -f 2

1

आप फ़ाइल की अवधि प्राप्त करने के लिए ffmpeg का उपयोग कर सकते हैं। महज प्रयोग करें:

ffmpeg -i <infile> 2>&1 | grep "Duration" | cut -d ' ' -f 4 | sed s/,//

0

मुझे एक ही समस्या थी और पाया गया कि mplayer कमांड (GoldPseudo) ने अच्छी तरह से काम किया है, लेकिन मुझे बाद में पता चला कि यदि आप रिदमबॉक्स में एक एल्बम खोलते हैं तो आप देखेंगे कि इसकी स्थिति रेखा ट्रैक्स की संख्या, कुल प्ले समय और डिस्क का आकार देती है।


-1

यहाँ ऊपर संदर्भित का उपयोग करके मेरा सरल है।

mp3_full_path="$HOME/i/want/the/length/of/file.mp3"
ffmpeg -i "$mp3_full_path" 2>&1 | grep Duration | awk -F ' ' '{print $2}' | awk -F '[,|.]' '{print $1}'
10:47:15

मैं उस मान को चर mp3_full_length पर भेजता हूं

mp3_full_path="$HOME/i/want/the/length/of/file.mp3"
read -r mp3_full_length <<< `ffmpeg -i "$mp3_full_path" 2>&1 | grep Duration | awk -F ' ' '{print $2}' | awk -F '[,|.]' '{print $1}'`



# I can use this variable for my own purpose!
echo $mp3_full_length 
10:47:15

आप लोगों के ऊपर धन्यवाद! मैं आपके विचारों और जानकारियों का उपयोग करता हूं, पढ़ने के लिए धन्यवाद, आपका दिन शुभ हो! ;)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.