मुझे शेल के उपयोग से लंबाई> 4 मिनट के साथ निर्देशिका में सभी mp4 फ़ाइलों को अपलोड करने की आवश्यकता है। मुझे यह देखने के लिए कोई स्क्रिप्ट नहीं मिल रही है कि वीडियो कितनी लंबी है। क्या किसी को कोई विचार है कि कैसे करना है?
आपका बहुत बहुत धन्यवाद!
मुझे शेल के उपयोग से लंबाई> 4 मिनट के साथ निर्देशिका में सभी mp4 फ़ाइलों को अपलोड करने की आवश्यकता है। मुझे यह देखने के लिए कोई स्क्रिप्ट नहीं मिल रही है कि वीडियो कितनी लंबी है। क्या किसी को कोई विचार है कि कैसे करना है?
आपका बहुत बहुत धन्यवाद!
जवाबों:
यह आपको वीडियो की लंबाई देगा।
ffmpeg -i myvideo 2>&1 | grep Duration | cut -d ' ' -f 4 | sed s/,//
Mediainfo इस उद्देश्य के लिए एक तेज़ उपकरण है:
$ mediainfo --Inform="Video;%Duration%" [inputfile]
आप अधिक गहन उत्तर में अधिक विकल्प पा सकते हैं ।
मेरे परीक्षणों में, ffprobe
0.3 सेकंड mediainfo
लगते हैं और 0.09 सेकंड लगते हैं।
mediainfo --Inform="Video;%Duration/String%" [inputfile]
... जो आपको कुछ मिलेगा 43 मिनट 50 के दशक
आप avconv कमांड का उपयोग करने का प्रयास कर सकते हैं ।
सबसे पहले आपको स्थापित करना चाहिए:
यदि आप फ़्लैग -आई के साथ कमांड टाइप करते हैं, तो आपको वीडियो के बारे में जानकारी मिलेगी:
avconv -i test.mp4
आउटपुट में एक क्षेत्र है जिसे अवधि कहा जाता है
avconv version 0.8.4-4:0.8.4-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav developers
built on Nov 6 2012 16:51:33 with gcc 4.6.3
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4':
Duration: 00:58:28.05, start: 0.000000, bitrate: 888 kb/s
Stream #0.0(eng): Video: h264 (High), yuv420p, 720x404, 748 kb/s, 25 fps, 25 tbr, 20k tbn, 50 tbc
Stream #0.1(und): Audio: aac, 48000 Hz, stereo, s16, 127 kb/s
अब आप केवल क्षेत्र अवधि का मान प्राप्त करने के लिए कमांड का उपयोग कर सकते हैं
प्रकार:
avconv -i file.mp4 2>&1 | grep 'Duration' | awk '{print $2}' | sed s/,//
मेरे मामले में परिणाम है:
00:58:28.05
58 मिनट और 28.05 सेकंड।
आशा है कि यह उपयोगी होगा!
avprobe
- के लिए कोई ज़रूरत नहीं है -i
, लेकिन यह अन्यथा उसी तरह काम करता है। या ffprobe
@ प्रति उत्तर के लिए।
exiftool
(मूल रूप से छवि फ़ाइलों से कैमरा मेटाडेटा पढ़ने के लिए इरादा है, लेकिन बाद में लगभग किसी भी तरह की मीडिया फ़ाइल से मेटाडेटा पढ़ने और लिखने के लिए विस्तारित किया गया ) इसके लिए उपयोग करना बहुत सुविधाजनक है। इसे चलाएं:
exiftool FILE.mp4 | grep Duration
आपको शायद exiftool
पहले स्थापित करने की आवश्यकता होगी , लेकिन यह आसानी से निम्नलिखित कमांड (डेबियन और डेरिवेटिव जैसे उबंटू आदि) के साथ किया जाता है:
apt install libimage-exiftool-perl
बेशक, यह जवाब सिर्फ एक और विकल्प है। कई अन्य उत्तर भी अच्छे हैं। :)
और भी सरल:
avprobe file.mp4 -show_format_entry duration
सॉल्यूशन सॉल्यूशन में जोड़कर , इसका इस्तेमाल पूरी डायरेक्टरी में किया जा सकता है:
for f in *; do ffmpeg -i "$f" 2>&1 | grep Duration | cut -d " " -f 4 | sed s/,// | tr -d "\n" && echo " $f"; done
यह भी | sort
उनकी लंबाई के आधार पर छँटाई की गई फ़ाइलों के द्वारा बढ़ाया जा सकता है ।
आप इसे किसी निर्देशिका में करने में सक्षम होने के लिए .bashrc
या इसमें जोड़ सकते हैं.bash_aliases
lsvlength | sort
alias lsvlength='for f in *; do ffmpeg -i "$f" 2>&1 | grep Duration | cut -d " " -f 4 | sed s/,// | tr -d "\n" && echo " $f"; done'
ffprobe
अधिक सुंदर समाधान है, ffmpeg
जिससे आउटपुट पथ न दिए जाने पर त्रुटि होती है।
ffprobe video.mp4 2>&1 | grep -E '^ +Duration' | cut -d':' -f2- | cut -d, -f1
यदि आप किसी निर्देशिका में कुछ वीडियो की अवधि देखना चाहते हैं, तो आप निम्न आदेश का उपयोग कर सकते हैं
exiftool * | grep ^ अवधि | cut -d '' -f 26
grep
और ऐसे। बस exiftool -T -Duration *.mkv
(या जो भी फ़ाइल पैटर्न)
जैसा कि आप देख सकते हैं कि इसे पूरा करने के कई तरीके हैं।
ffprobe mediafile -show_entries format=format=duration 2>&1 | grep DURATION
जहां Mediafile फ़ाइल का नाम है, नीचे के समान आउटपुट प्रदान करेगा। पहला पहला स्ट्रीम की अवधि (आमतौर पर वीडियो) और दूसरा दूसरी स्ट्रीम (आमतौर पर ऑडियो) की अवधि प्रदान करता है।
DURATION : 00:21:40.132000000
DURATION : 00:21:40.062000000