web-dev-qa-db-fra.com

Comment trouver des images par seconde d'un fichier vidéo?

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.

44
Vivek

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"
46
RobotHumans
ffprobe -v 0 -of csv=p=0 -select_streams v:0 -show_entries stream=r_frame_rate infile

Résultat:

2997/100
28
Steven Penny

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
4
ntg

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.

2
user32288

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
2
sup

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.

0
vladmateinfo

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.

0
aesede

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)))
0
WhatAMesh