Como encontrar quadros por segundo de qualquer arquivo de vídeo?

30

Existe alguma maneira simples de encontrar o fps de um vídeo no Ubuntu? No Windows eu uso o Gspot para descobrir todas as informações sobre um arquivo de vídeo. Mas no Ubuntu eu acho muito difícil descobrir essa informação básica. Qualquer ajuda é apreciada.

    
por Vivek 05.03.2012 / 19:12

8 respostas

35

Isso informará a taxa de quadros se não for uma taxa de quadros variável:

ffmpeg -i filename

Exemplo de saída com o nome do arquivo obscurecido:

Input #0, matroska,webm, from 'somerandom.mkv':
  Duration: 01:16:10.90, start: 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 (default)
    Stream #0.1: Audio: aac, 48000 Hz, stereo, s16 (default)
ffmpeg -i filename 2>&1 | sed -n "s/.*, \(.*\) fp.*//p"

Alguém editado com um que não funcionou como eu queria. Ele é referenciado aqui
Edição adicional ... Se você quiser o valor de tbr, esta linha sed funciona

sed -n "s/.*, \(.*\) tbr.*//p"
    
por RobotHumans 05.03.2012 / 19:31
17
ffprobe -v 0 -of csv=p=0 -select_streams 0 -show_entries stream=r_frame_rate infile

Resultado:

24000/1001
    
por Steven Penny 17.05.2014 / 00:46
1

A alternativa à linha de comando, é olhar as propriedades do seu arquivo via menu de contexto no Nautilus (gerenciador de arquivos gráfico). Para arquivos de áudio / vídeo, você recebe uma guia adicional com informações extras.

    
por user32288 06.03.2012 / 09:09
1

Aqui está uma função python baseada na resposta de Steven Penny usando o ffprobe que fornece uma taxa de quadros exata

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
    
por ntg 20.01.2016 / 14:18
1

Este é um script python para fazer isso usando o mplayer, no caso de alguém estar interessado. É usado 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
    
por sup 13.03.2012 / 11:47
0

Você pode clicar com o botão direito do mouse no arquivo de destino, Propriedades, Áudio / Vídeo, mas não obterá a taxa de quadros exata. Para obter uma taxa de quadros precisa, você pode instalar o MediaInfo.

    
por vladmateinfo 06.01.2015 / 19:35
0

Apenas no caso de alguém se deparar com isso ... você pode usar o input arg como o caminho;)

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)))
    
por WhatAMesh 03.05.2018 / 17:35
-1
ffprobe <media> 2>&1| grep ",* fps" | cut -d "," -f 5 | cut -d " " -f 2
    
por Daya 16.08.2013 / 12:53