Как найти частоту кадров в секунду любого видеофайла?

Есть ли какой-нибудь простой способ найти частоту кадров в секунду видео в ubuntu? В Windows я использую Gspot, чтобы узнать всю информацию о видеофайле. Но в ubuntu мне очень трудно найти эту базовую информацию. Любая помощь приветствуется.

Это сообщит вам частоту кадров, если это не переменная частота кадров:

имя файла ffmpeg -i

Пример вывода с скрытым именем файла:

Ввод #0, matroska,webm, из 'somerandom.mkv':  Продолжительность: 01:16:10.90, начало: 0.000000, битрейт: N/A Поток #0.0: Видео: h264 (Высокое), yuv420p, 720x344 [ПАРИТЕТ 1:1:90:43], 25 кадров в секунду, 25 тбит/с, 1k тбит/с, 50 тбит/с (по умолчанию)    Поток #0.1: Аудио: aac, 48000 Гц, стерео, s16 (по умолчанию)
>ffmpeg -i имя файла 2 и 1 | sed -n "s/.*, \(.*\) fp.*/\1/p"

Кто-то отредактировал один из них, который работал не совсем так, как я хотел. На него ссылаются здесь
Дополнительная правка...Если вам нужно значение tbr, эта строка sed работает

sed -n "s/.*, \(.*\) тбр.*/\1/п"
ffprobe -v 0 -of csv=p=0 -select_streams v:0 -show_entries stream=r_frame_rate infile

Результат:

2997/100

Вот функция python, основанная на ответе Стивена Пенни, использующая ffprobe, которая дает точную частоту кадров

ffprobe 'Upstream Color 2013 1080p x264.mkv' -v 0 -select_streams v -print_format flat -show_entries stream=r_frame_rate
import sysimport osimport subprocessdef 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

Альтернативой командной строке является просмотр свойств вашего файла через контекстное меню в Nautilus (графический файловый менеджер). Для аудио / видеофайлов вы получаете дополнительную вкладку с дополнительной информацией.

Извлеките средняя частота кадров, заданный в виде дроби:

дробь=$(ошибка ffprobe -v -select_streams v:0 -show_entries stream=avg_frame_rate -по умолчанию=nw=1:nk=1 "${ввод}")

Затем разделите его, округлив до ближайшее целое число:

python -c "print (round(${fraction}))"

Это скрипт на python для выполнения этого с помощью mplayer, на случай, если кому-то будет интересно. Он используется path/to/script path/to/movie_name1 path/to/movie/name2 и т.д.

#!/usr/bin/python# -*- coding: utf-8 -*-import subprocessimport reimport syspattern = 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

Я обычно использую exiftool чтобы получить информацию о любом типе файла...Например, с помощью команды exiftool file.swf Я могу знать частоту кадров любого swf-файла, чего я не могу достичь с помощью ffmpeg

ffprobe <media> 2>&1| grep ",* fps" | cut -d "," -f 5 | cut -d "" -f 2

Вы можете щелкнуть правой кнопкой мыши целевой файл, Свойства, Аудио / видео, но вы не получите точную частоту кадров. Чтобы получить точную частоту кадров, вы можете установить MediaInfo.

Просто на случай, если кто-нибудь наткнется на это... вы, конечно, можете использовать input arg в качестве пути ;)

import numpy as npimport osimport subprocessdef 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)))

Это невозможно, потому что не все видеофайлы имеют “fps” (поскольку существует кодировка VFR).

Видео с VFR по-прежнему имеют среднюю частоту кадров - полезно это или нет, зависит от приложения.