Esiste un modo semplice per trovare gli fps di un video in Ubuntu? In Windows uso Gspot per scoprire tutte le informazioni su un file video. Ma in Ubuntu trovo molto difficile scoprire queste informazioni di base. Qualsiasi aiuto è apprezzato.
Esiste un modo semplice per trovare gli fps di un video in Ubuntu? In Windows uso Gspot per scoprire tutte le informazioni su un file video. Ma in Ubuntu trovo molto difficile scoprire queste informazioni di base. Qualsiasi aiuto è apprezzato.
Risposte:
Questo ti dirà il framerate se non è framerate variabile:
ffmpeg -i nomefile
Output di esempio con nome file oscurato:
Input # 0, matroska, webm, da 'somerandom.mkv': Durata: 01: 16: 10.90, inizio: 0.000000, bitrate: N / A Stream # 0.0: Video: h264 (High), yuv420p, 720x344 [PAR 1: 1 DAR 90:43], 25 fps, 25 tbr, 1k tbn, 50 tbc (impostazione predefinita) Stream # 0.1: Audio: aac, 48000 Hz, stereo, s16 (impostazione predefinita)
ffmpeg -i nome file 2> & 1 | sed -n "s /.*, \ (. * \) fp. * / \ 1 / p"
Qualcuno ha modificato con uno che non ha funzionato come volevo. Fa riferimento qui
Modifica aggiuntiva ... Se vuoi il valore tbr questa linea sed funziona
sed -n "s /.*, \ (. * \) tbr. * / \ 1 / p"
sed -n "s/.*, \(.*\) tbr.*/\1/p
manchi "
alla fine, no?
ffprobe -v 0 -of csv=p=0 -select_streams v:0 -show_entries stream=r_frame_rate infile
Risultato:
2997/100
0/0
seconda del formato
-select_streams V:0
, che selezionerà il primo flusso video in movimento.
0/0
.
Ecco una funzione Python basata sulla risposta di Steven Penny che utilizza ffprobe che fornisce un frame rate esatto
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
Questo è uno script Python per farlo usando mplayer, nel caso qualcuno fosse interessato. Si usa path/to/script path/to/movie_name1 path/to/movie/name2
ecc
#!/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
È possibile fare clic con il pulsante destro del mouse sul file di destinazione, Proprietà, Audio / Video ma non si otterrà il framerate esatto. Per ottenere un framerate preciso è possibile installare MediaInfo.
Nel caso in cui qualcuno si imbatti in questo ... puoi ovviamente usare input arg come percorso;)
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)))