किसी भी वीडियो फ़ाइल के प्रति सेकंड फ़्रेम कैसे खोजें?


44

Ubuntu में एक वीडियो के एफपीएस को खोजने का कोई सरल तरीका है? विंडोज़ में मैं एक वीडियो फ़ाइल के बारे में सभी जानकारी का पता लगाने के लिए Gspot का उपयोग करता हूं। लेकिन उबंटू में मुझे इस बुनियादी जानकारी का पता लगाना बहुत मुश्किल है। किसी भी मदद की सराहना की है।


यह संभव नहीं है, क्योंकि सभी वीडियो फ़ाइलों में "एफपीएस" नहीं है (क्योंकि वीएफआर एन्कोडिंग मौजूद है)।
1

वीएफआर वीडियो में अभी भी एक औसत फ्रेम दर है - यह उपयोगी है या नहीं यह आवेदन पर निर्भर करता है।
थोमसट्रेटर

जवाबों:


47

यह आपको फ्रैमरेट बताएगा यदि यह वैरिएबल फ्रैमरेट नहीं है:

ffmpeg -i फ़ाइल नाम

फ़ाइल नाम के साथ नमूना आउटपुट अस्पष्ट:

इनपुट # 0, matroska, webm, 'somerandom.mkv' से:
  अवधि: 01: 16: 10.90, प्रारंभ: 0.000000, बिटरेट: एन / ए
    स्ट्रीम # 0.0: वीडियो: h264 (उच्च), yuv420p, 720x344 [PAR 1: 1 DAR 90:43], 25 एफपीएस, 25 tbr, 1k tbn, 50 tbc (डिफ़ॉल्ट)
    स्ट्रीम # 0.1: ऑडियो: aac, 48000 हर्ट्ज, स्टीरियो, s16 (डिफ़ॉल्ट)
ffmpeg -i फ़ाइल नाम 2> & 1 | sed -n "s /.*, \ ((। * \) fp। * / \ 1 / p"

किसी ने एक के साथ संपादित किया, जो मेरे इच्छित तरीके से बहुत काम नहीं आया। यह यहाँ संदर्भित है
अतिरिक्त संपादन ... यदि आप चाहते हैं कि tbr मूल्य यह sed लाइन काम करती है

sed -n "s /.*, \ ((। * \) tbr। * / \ 1 / p"

मुझे वन-लाइनर में fp के बजाय tb का उपयोग करने की आवश्यकता थी। लगता है कि सभी वीडियो फ़ाइलों की रिपोर्ट एफपीएस नहीं है, लेकिन सभी ऑटोब्रॉफ कुछ ऐसे हैं जैसे tb tbc जिसमें समान मूल्य है।
सुपर

मान्य है, लेकिन आउटपुट के इस विशेष सेट में tbr मान नहीं-संपादित करें आउटपुट-एड से एक-लाइनर। कुछ इस पर विचार करने के लिए कि मैंने इसे क्यों बदल दिया ... मैं बहुत बड़ा हूं, लेकिन यह वास्तव में ध्यान देने योग्य तरीके से विफल है जिस तरह से बिल्कुल भी ध्यान नहीं दिया जाता है।
रोबोटहुमंस

मुझे लगता है कि अंत में sed -n "s/.*, \(.*\) tbr.*/\1/pयाद आती "है, नहीं?
सुपर

6
ffmpeg को हटाया नहीं गया है, avconv ffmpeg की एक शाखा से आया है और उन लोगों के लिए भ्रम से बचने के लिए ffmpeg के वैकल्पिक विकल्प का उपयोग करके फर्जी शाखा को चिह्नित किया गया था ताकि उन उपयोगकर्ताओं को पता चल सके कि वे जिस संस्करण का उपयोग कर रहे थे वह बदल रहा था। आपकी टिप्पणी भ्रामक है और उपयोगकर्ताओं को इस पर शोध करने में समय बर्बाद करने का कारण बन सकती है
क्रिस

1
क्या होगा अगर यह चर फ्रेम दर है?
0xcaff

29
ffprobe -v 0 -of csv=p=0 -select_streams v:0 -show_entries stream=r_frame_rate infile

नतीजा:

2997/100

3
यह शायद सबसे अच्छा जवाब में है कि यह सटीक फ्रेम दर देता है (उदाहरण के 24000/1001 = २३.९७६०२३९७६ में) है
NTG

1
कभी-कभी मुझे 0/0प्रारूप पर निर्भर करता है
डैनियल ०३

1
आप जो चाहते हैं उसके आधार पर, यह या तो काम करता है या नहीं करता है। यह एन्कोडिंग के फ़्रेमरेट की रिपोर्ट करता है, लेकिन वीडियो के वास्तविक फ़्रैमरेट की नहीं। उदाहरण के लिए, 60fps में एन्कोडेड एक 30fps वीडियो 60fps की रिपोर्ट करेगा, लेकिन वास्तविक आउटपुट में अभी भी 30fps होगा।
हार्वे

8
यदि वीडियो स्ट्रीम पहली स्ट्रीम नहीं है, तो यह काम नहीं करता है, यदि आप ऑडियो स्ट्रीम को देखते हैं तो आपको 0/0 मिलेगा। मैं डालने के लिए संपादित करूंगा -select_streams V:0, जो पहले चलती वीडियो स्ट्रीम का चयन करेगा।
सैम वाटकिन्स

2
@ सैमवाटकिन्स का पूरक महत्वपूर्ण है। इसके बिना, कमांड आउटपुट देता है 0/0
jdhao

4

यहां स्टीफन पेनी के जवाब पर आधारित एक अजगर समारोह है, जो सटीक फ्रेम दर देता है

ffprobe 'Upstream Color 2013 1080p x264.mkv' -v 0 -select_streams v -print_format flat -show_entries stream=r_frame_rate
import sys
import os
import subprocess
def get_frame_rate(filename):
    if not os.path.exists(filename):
        sys.stderr.write("ERROR: filename %r was not found!" % (filename,))
        return -1         
    out = subprocess.check_output(["ffprobe",filename,"-v","0","-select_streams","v","-print_format","flat","-show_entries","stream=r_frame_rate"])
    rate = out.split('=')[1].strip()[1:-1].split('/')
    if len(rate)==1:
        return float(rate[0])
    if len(rate)==2:
        return float(rate[0])/float(rate[1])
    return -1

2

कमांड लाइन का विकल्प, Nautilus (चित्रमय फ़ाइल प्रबंधक) में संदर्भ मेनू के माध्यम से आपकी फ़ाइल के गुणों को देख रहा है। ऑडियो / वीडियो फ़ाइलों के लिए आपको अतिरिक्त सूचना के साथ एक अतिरिक्त टैब मिलता है।


2

यह किसी भी दिलचस्पी है, तो mplayer का उपयोग करके ऐसा करने के लिए एक अजगर स्क्रिप्ट है। इसका उपयोग किया जाता है path/to/script path/to/movie_name1 path/to/movie/name2आदि

#!/usr/bin/python
# -*- coding: utf-8 -*-

import subprocess
import re
import sys

pattern = re.compile(r'(\d{2}.\d{3}) fps')
for moviePath in sys.argv[1:]:
    mplayerOutput = subprocess.Popen(("mplayer", "-identify", "-frames", "0", "o-ao", "null", moviePath), stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0]
    fps = pattern.search(mplayerOutput).groups()[0]
    print fps

0

आप लक्ष्य फ़ाइल, गुण, ऑडियो / वीडियो पर राइट क्लिक कर सकते हैं लेकिन आपको सटीक फ़्रैमरेट नहीं मिलेगा। एक सटीक फ्रेमरेट प्राप्त करने के लिए आप MediaInfo को स्थापित कर सकते हैं।


0

बस अगर कोई इस पर ठोकर खाता है ... तो आप निश्चित रूप से मार्ग के रूप में इनपुट arg का उपयोग कर सकते हैं;)

import numpy as np
import os
import subprocess

def getFramerate():
    con = "ffprobe -v error -select_streams v:0 -show_entries stream=avg_frame_rate -of default=noprint_wrappers=1:nokey=1 D:\\Uni\\Seminar\\leecher\\Ninja\\stream1.mp4"

    proc = subprocess.Popen(con, stdout=subprocess.PIPE, shell=True)
    framerateString = str(proc.stdout.read())[2:-5]
    a = int(framerateString.split('/')[0])
    b = int(framerateString.split('/')[1])
    return int(np.round(np.divide(a,b)))

0

मैं आमतौर पर exiftoolकिसी भी फ़ाइल प्रकार की जानकारी प्राप्त करने के लिए उपयोग करता हूं ... उदाहरण के लिए कमांड के साथ exiftool file.swfमैं किसी भी swf फ़ाइल के फ़्रैमरेट को जान सकता हूं, कुछ ऐसा जो मैं नहीं कर सकताffmpeg


-1
ffprobe <media> 2>&1| grep ",* fps" | cut -d "," -f 5 | cut -d " " -f 2

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