मैं कंसोल से वीडियो फ़ाइल की लंबाई कैसे प्राप्त कर सकता हूं?


24

मान लीजिए हमारे पास कोई वीडियो फाइल है some_video।

मैं शेल स्क्रिप्ट (mplayer / transcode / gstreamer / vlc / ffmpeg / जो भी हो) से इसकी लंबाई कैसे प्राप्त कर सकता हूं?

VIDEO_LENGTH_IN_SECONDS=`ffmpeg .... -i some_video ... | grep -o .....`

जवाबों:



21

कुछ इसी तरह:

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

यह वितरित करेंगे: HH:MM:SS.ms। आप इसका उपयोग भी कर सकते हैं ffprobe, जिसे अधिकांश FFmpeg प्रतिष्ठानों के साथ आपूर्ति की जाती है:

ffprobe -show_format input | sed -n '/duration/s/.*=//p'

… या:

ffprobe -show_format input | grep duration | sed 's/.*=//')

सेकंड में बदलने के लिए (और मिलीसेकंड को बनाए रखने के लिए), पाइप में:

awk '{ split($1, A, ":"); print 3600*A[1] + 60*A[2] + A[3] }'

इसे मिलीसेकंड में बदलने के लिए, इसमें पाइप करें:

awk '{ split($1, A, ":"); print 3600000*A[1] + 60000*A[2] + 1000*A[3] }'

यदि आप मिलीसेकंड के बिना सिर्फ कुछ सेकंड चाहते हैं, तो इसमें पाइप करें:

awk '{ split($1, A, ":"); split(A[3], B, "."); print 3600*A[1] + 60*A[2] + B[1] }'

उदाहरण:

यहां छवि विवरण दर्ज करें


इसके अलावा tcprobe इसके लिए तैयार है, लेकिन यह मेरे सिस्टम पर अच्छी तरह से काम नहीं करता है।
वि।

1
... मेरे संपादन को अस्वीकार कर दिया गया था, इसलिए मैं यहां पोस्ट करूंगा कि पहला कदम अधिक संक्षिप्त रूप से पूरा किया जा सकता है ffprobe, एक उपकरण जो वास्तव में इन प्रकार के उद्देश्यों के लिए डिज़ाइन किया गया है ffmpeg: ffprobe -show_format input | sed -n '/duration/s/.*=//p'(या ffprobe -show_format input | grep duration | sed 's/.*=//')। हो सकता है कि @slhck सीधे उत्तर में इसे संपादित कर सकता है।
evilsoup

इसके बारे में क्षमा करें, @evilsoup। शायद मुझे एक अस्वीकरण करना चाहिए कि आपको और लॉर्डनेकबर्ड को स्वतंत्र रूप से अपने पदों को संपादित करने की अनुमति है - मुझे यह समस्या कुछ समय पहले ही हुई है। अगली बार बस एडिट मैसेज में थोड़ा ध्यान दें या तो :)
slhck

0

यदि आपके पास पहुंच नहीं है ffprobe, तो आप उपयोग कर सकते हैं mediainfo

# Outputs a decimal number in seconds
mediainfo some_video --Output=JSON | jq '.media.track[0].Duration' | tr -d '"'`

1
के लिए की जरूरत को खत्म करने jqऔर tr:mediainfo --Output="General;%Duration/String%" input
ललगन

साफ! मैं अपना उत्तर अभी के लिए छोड़ देने जा रहा हूं क्योंकि आपकी कमांड का आउटपुट फॉर्म X s YYY msबनाम है X.YYY| sed -e 's/ s /./' -e 's/ ms//'यदि आप उस मार्ग पर जाना चाहते हैं और आप तक पहुँच नहीं चाहते हैं तो समायोजित करने के लिए पर्याप्त है jq
बिएरपेल्ड

इसके बदले mediainfo --Output="General;%Duration/String3%" inputआउटपुट के साथ बदला जा सकता 00:01:48.501है 1 min 48 s
11
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.