Ubuntu'da bir videonun fpsini bulmanın basit bir yolu var mı? Pencerelerde bir video dosyasıyla ilgili tüm bilgileri bulmak için Gspot kullanıyorum. Ancak ubuntu'da bu temel bilgiyi bulmak çok zor. Herhangi bir yardım takdir edilmektedir.
Ubuntu'da bir videonun fpsini bulmanın basit bir yolu var mı? Pencerelerde bir video dosyasıyla ilgili tüm bilgileri bulmak için Gspot kullanıyorum. Ancak ubuntu'da bu temel bilgiyi bulmak çok zor. Herhangi bir yardım takdir edilmektedir.
Yanıtlar:
Değişken kare hızı değilse size kare hızını söyleyecektir:
ffmpeg -i dosya adı
Dosya adı gizlenmiş olan örnek çıktı:
Giriş # 0, matroska, webm, 'somerandom.mkv' adresinden: Süre: 01: 16: 10.90, başlangıç: 0.000000, bit hızı: N / A Akış # 0.0: Video: h264 (Yüksek), yuv420p, 720x344 [PAR 1: 1 DAR 90:43], 25 fps, 25 tbr, 1k tbn, 50 tbc (varsayılan) Akış No. 0.1: Ses: aac, 48000 Hz, stereo, s16 (varsayılan)
ffmpeg -i dosya adı 2> & 1 | sed -n "s /.*, \ (. * \) fp. * / \ 1 / p"
İstediğim gibi çalışmayan biriyle düzenlenmiş biri. Bu başvuruda bulunulur burada
sen tbr değerini bu sed hat eserlerini istiyorsan ... Ek düzenleme
sed -n "s /.*, \ (. * \) tbr. * / \ 1 / p"
sed -n "s/.*, \(.*\) tbr.*/\1/p
özlüyor "
, değil mi?
ffprobe -v 0 -of csv=p=0 -select_streams v:0 -show_entries stream=r_frame_rate infile
Sonuç:
2997/100
0/0
biçime bağlı olarak
-select_streams V:0
İlk hareketli video akışını seçecek olan düzenlemeyi yapacağım .
0/0
.
İşte tam kare hızı veren ffprobe kullanarak Steven Penny'nin cevabına dayanan bir python işlevi
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
Bu, herkesin ilgisini çekmesi durumunda, mplayer kullanarak bunu yapmak için kullanılan bir python betiğidir. path/to/script path/to/movie_name1 path/to/movie/name2
Vb kullanılır
#!/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
Hedef dosyaya, Özellikler, Ses / Video'ya sağ tıklayabilirsiniz ancak tam kare hızını elde edemezsiniz. Kesin bir kare hızı elde etmek için MediaInfo uygulamasını yükleyebilirsiniz.
Birisi bunun üzerine tökezlediğinde ... tabii ki input arg'u yol olarak kullanabilirsiniz;)
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)))