Existe-t-il un moyen simple de trouver les images par seconde d'une vidéo dans Ubuntu? Dans Windows, j'utilise Gspot pour trouver toutes les informations sur un fichier vidéo. Mais à Ubuntu, je trouve très difficile de trouver cette information de base. Toute aide est appréciée.
Cela vous indiquera le nombre d'images par seconde si ce n'est pas variable:
ffmpeg -i nomfichier
Exemple de sortie avec le nom de fichier masqué:
Entrée n ° 0, matroska, webm, de 'somerandom.mkv': Durée: 01: 16: 10.90, début: 0.000000, débit: N/A Flux # 0.0 : Vidéo: h264 (Elevé), yuv420p, 720x344 [PAR 1: 1 DAR 90:43], 25 vps, 25 tbr, 1k tbn, 50 tbc (par défaut) Flux n ° 0.1: Audio: aac, 48000 Hz, stéréo, s16 (par défaut)
ffmpeg -i nom_fichier 2> & 1 | sed -n "s /.*,\(. * \) fp. */\ 1/p"
Quelqu'un a édité avec un qui ne fonctionnait pas vraiment comme je le voulais. C'est référencé ici
Modification supplémentaire ... Si vous voulez que la valeur tbr cette ligne sed fonctionne
sed -n "s /.*,\(. * \) tbr. */\ 1/p"
ffprobe -v 0 -of csv=p=0 -select_streams v:0 -show_entries stream=r_frame_rate infile
Résultat:
2997/100
Voici une fonction python basée sur la réponse de Steven Penn en utilisant ffprobe qui donne une cadence exacte
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
L’alternative à la ligne de commande consiste à examiner les propriétés de votre fichier via le menu contextuel de Nautilus (gestionnaire de fichiers graphique). Pour les fichiers audio/vidéo, vous obtenez un onglet supplémentaire contenant des informations supplémentaires.
Ceci est un script python pour le faire en utilisant mplayer, au cas où quelqu'un serait intéressé. Il est utilisé path/to/script path/to/movie_name1 path/to/movie/name2
etc
#!/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
Vous pouvez cliquer avec le bouton droit sur le fichier cible, Propriétés, Audio/Vidéo, mais vous n'obtiendrez pas le nombre d'images par seconde exact. Pour obtenir un framerate précis, vous pouvez installer MediaInfo.
J'utilise habituellement exiftool
pour obtenir des informations sur tous les types de fichiers ... Par exemple, avec la commande exiftool file.swf
, je peux connaître le framerate de n'importe quel fichier swf, ce que je ne peux pas obtenir avec ffmpeg
.
Juste au cas où quelqu'un tomberait dessus ... vous pouvez bien sûr utiliser input arg comme chemin;)
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)))