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

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

44
задан 5 March 2012 в 22:12

13 ответов

ffprobe -v 0 -of csv=p=0 -select_streams v:0 -show_entries stream=r_frame_rate infile

Результат:

2997/100
0
ответ дан 5 March 2012 в 22:12

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

ffmpeg -i filename

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

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.*/\1/p"

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

sed -n "s/.*, \(.*\) tbr.*/\1/p"
0
ответ дан 5 March 2012 в 22:12

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

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
ответ дан 5 March 2012 в 22:12

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

0
ответ дан 5 March 2012 в 22:12
ffprobe <media> 2>&1| grep ",* fps" | cut -d "," -f 5 | cut -d " " -f 2
0
ответ дан 5 March 2012 в 22:12

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

#!/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
ответ дан 5 March 2012 в 22:12

Вот функция Python на основе ответа Steven Penny с помощью ffprobe, который дает точную частоту кадров

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
ответ дан 5 March 2012 в 22:12

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

0
ответ дан 5 March 2012 в 22:12

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

0
ответ дан 5 March 2012 в 22:12
framerate=$(( $(ffprobe -v 0 -of csv=p=0 -select_streams v:0 -show_entries stream=r_frame_rate "$1" | sed 's#/# / #g') ))

^ это вернет точную частоту кадров и произведет вычисления, чтобы получить окончательную точную частоту кадров (он преобразует 25,000 / 1 в 25 , для пример)

Python не нужен (требуется оболочка, подобная Bash)

0
ответ дан 25 December 2019 в 23:30
$fps = exec("ffprobe -v error -select_streams v -of default=noprint_wrappers=1:nokey=1 -show_entries stream=r_frame_rate input.mkv");
$fps = round(strstr($fps, '/' , true) / substr (strstr($fps, '/'), 1 ), 2);

Пример вывода: 29,97 или 59,94

0
ответ дан 21 March 2020 в 12:14

Использует скрипт статистики, который по умолчанию входит в состав MPV. Так что просто воспроизведите файл с помощью MPV и нажмите i. Появится куча статистики, включая частоту кадров.

0
ответ дан 22 July 2020 в 11:52

Получить среднюю частоту кадров, заданную в виде дроби:

fraction=$(ffprobe -v error -select_streams v:0 -show_entries stream=avg_frame_rate - of default=nw=1:nk=1 "${input}")

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

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

2
ответ дан 13 September 2020 в 22:51

Другие вопросы по тегам:

Похожие вопросы: