2012-01-19 15 views
23

पर ऑडियो फ़ाइलों की अवधि की जांच करें मुझे ऑडियो फ़ाइलों के समूह की अवधि की जांच करने की आवश्यकता है। क्या यूनिक्स कमांड लाइन पर ऐसा करने का कोई आसान तरीका है?कमांड लाइन

> duration * 

मेरे पास अद्भुत सोक्स ऐप है जिसमें आँकड़े नामक एक विकल्प है जो अवधि सहित ऑडियो जानकारी का एक सेट उत्पन्न करता है। मैं केवल अवधि प्राप्त करने का एक तरीका ढूंढ रहा हूं। मैं आउटपुट प्रारूप पर लचीला हूं, नमूना लंबाई में से कोई भी हो सकता है, एचएच: मिमी: एसएस, या सेकेंड। उत्तरार्द्ध मेरी वरीयता होगी।

उत्तर

15
mp3info -p "%m:%s\n" filename 

आपके द्वारा निर्दिष्ट फ़ाइल की लंबाई देता है।

+1

तो लपेट कि पाश के लिए एक में और आप बिल्कुल तैयार, कर रहे हैं '* .mp3 में फ़ाइल के लिए; mp3info -p "% m:% s \ n" $ फ़ाइल करें; done'। आप सभी को शुभकामनायें। – shellter

+1

mp3info -p "% f% m:% s \ n" * .mp3 भी काम करता है - फ़ाइल का नाम प्रिंट करेगा और अवधि –

25
soxi -D filename 
soxi -D * 

सोक्सी क्वेरी ऑडियो फाइलों के मेटाडेटा; डी अवधि विकल्प है। यह globbing का समर्थन करता है। सोक्सी का बड़ा भाई sox कमांड लाइन ऑडियो प्रोसेसिंग करता है।

+0

सोक्सी मैं भी उपयोग करता हूं, लेकिन दुर्भाग्यवश इसमें एम 4 ए समर्थन – dan3

+0

एएसएफ/डब्लूएमवी के लिए भी कमी है । – galva

7

mediainfo आपको ऑडियो फ़ाइल के मिलीसेकंड लौटाएगा। मान लिया जाये कि वर्तमान निर्देशिका केवल ऑडियो फ़ाइलें है,

mediainfo --Inform="Audio;%Duration%" "Miley Cyrus - Wrecking Ball.mp3" 

निम्नलिखित स्थानीय निर्देशिका में सभी ऑडियो की अवधि की गणना करने के लिए, this gist में मदद मिलेगी:

shopt -s nullglob 
let playlist_duration_ms=0 
for song_file in *.{mp3,ogg,m4a,flac,wav}; do 
    playlist_duration_ms=$(expr $playlist_duration_ms + $(mediainfo --Inform="Audio;%Duration%" "$song_file")) 
done 
shopt -u nullglob 

let playlist_duration_secs=$(expr $playlist_duration_ms/1000) 
let playlist_duration_mins=$(expr $playlist_duration_ms/60000) 
let playlist_duration_remaining_secs=$(expr $playlist_duration_secs - $(expr $playlist_duration_mins \* 60)) 

echo $playlist_duration_mins minutes, $playlist_duration_remaining_secs seconds 
+0

यह टूल बहुत अच्छा है, ओग फाइलों के लिए भी काम करता है और डेबियन रिपॉजिटरीज़ – quantumbyte

+0

में उपलब्ध है, मुझे लगता है कि इस उत्तर को अन्य उत्तरों की तुलना में चलने वाली मशीन से कम से कम संसाधनों की आवश्यकता है। –

+0

केवल मेरे लिए एक खाली रेखा प्रिंट करता है। – JellicleCat

5

OSX पर

प्रिंट वर्तमान डीआईआर में प्रत्येक ऑडियो फ़ाइल की लंबाई:

afinfo * | awk '/estimated duration/ { print $3 }' 
,210

filepath को शामिल करें:

afinfo * | awk '/File:/ { song=$2 } /estimated duration/ { print song, $3 }' 
1

MediaInfo ऐसा कर सकते हैं, लेकिन MediaInfo उन उपयोगी उपकरण है कि इतनी बुरी तरह से प्रलेखित है कि आप लगभग कैसे क्रम में इसका इस्तेमाल करने के लिए कि यह कैसे उपयोग करने के लिए सीखने के लिए (पता करने की जरूरत में से एक है लिनक्स दुनिया में बहुत कुछ होता है)।

परीक्षणों के घंटों के बाद और उच्च और निम्न पढ़ने के बाद, अंत में मुझे फाइल नामों की एक रिकर्सिव अल्पविराम से अलग सूची और मिलीसेकंड में उनकी अवधि उत्पन्न करने के लिए मिला।

शुरू करने निर्देशिका के लिए सीडी और निम्न आदेश जारी करते हैं:

find "$(pwd)" -type f -print0 | xargs -0 -I {} mediainfo --Inform="General;%CompleteName%,%Duration%" {} > list.txt 

परिणाम list.txt लिए उत्पादन किया जाएगा।

4

इसके अलावा के answer, cdosborn को रिकर्सिवली वर्तमान निर्देशिका के उप-फ़ोल्डर में सभी .mp3 फ़ाइलों की अवधि की गणना और days:hours:minutes:seconds प्रारूप में कुल योग परिणाम दिखाने के लिए:

zsh में:

afinfo **/*.mp3 | awk '/estimated duration/ { print $3 }' | paste -sd+ - | bc | awk '{printf("%d:%02d:%02d:%02d\n",($1/60/60/24),($1/60/60%24),($1/60%60),($1%60))}' 

बैश में या sh:

find . -name "*.mp3" -exec afinfo {} \; | awk '/estimated duration/ { print $3 }' | paste -sd+ - | bc | awk '{printf("%d:%02d:%02d:%02d\n",($1/60/60/24),($1/60/60%24),($1/60%60),($1%60))}' 

परिणाम इस तरह है (7 दिन, 5 घंटे, 6 मिनट, 58 सेकंड onds):

$ afinfo **/*.mp3 | awk '/estimated duration/ { print $3 }' | paste -sd+ - | bc | awk '{printf("%d:%02d:%02d:%02d\n",($1/60/60/24),($1/60/60%24),($1/60%60),($1%60))}' 
7:05:06:58 
$ 
1

एक और soxi आधारित फ़ाइल नाम और घंटे, मिनट और सेकंड प्रारूप में अवधि सहित इस सवाल का जवाब।

$for f in *amr; do printf "$f "; soxi -d $f; done 

DGT20161216.amr 00:22:04.62 
DGT20170108.amr 00:28:22.80 
DGT20170117.amr 00:20:05.18 
0
sox --info -D file    --> duration in seconds 
sox --info -d file    --> duration in HH:mm:ss.ss 
sox --info fils    --> metadata 
0

एक समाधान syssyphus द्वारा commandlinefu से MPlayer पर आधारित है कि दोनों ऑडियो और वीडियो फ़ाइलों के साथ काम करता है:

sudo apt-get install mplayer 
find -type f -name "*.mp3" -print0 | xargs -0 mplayer -vo dummy -ao dummy -identify 2>/dev/null | perl -nle '/ID_LENGTH=([0-9\.]+)/ && ($t +=$1) && printf "%02d:%02d:%02d\n",$t/3600,$t/60%60,$t%60' | tail -n 1 

में सभी वीडियो/ऑडियो की कुल लंबाई जाओ एच में वर्तमान डीआईआर (और नीचे) एच: एम: एस

*.mp3 जो भी आप मिलान करना चाहते हैं उसे बदलें (उदा।, *.avi, *.wav), यदि आप सभी फाइलों को देखना चाहते हैं तो आप इसे पूरी तरह हटा सकते हैं। उत्पादन का

उदाहरण: 00:00:37