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

Эта кнопка недоступна, когда резервная копия (или восстановление) уже выполняется. Может быть, кто-то бежал в фоновом режиме?

Включена ли кнопка?

35
задан 6 March 2012 в 00:12

8 ответов

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

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"

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

sed -n "s/.*, \(.*\) tbr.*/\1/p"
33
ответ дан 25 May 2018 в 13:44
  • 1
    Мне нужно было использовать tb вместо fp в однострочном. Кажется, не все видеофайлы сообщают о fps, но все они выдают что-то вроде tbr tbc, которое имеет такое же значение. – sup 11 March 2012 в 23:28
  • 2
    действительный, но однострочный из редактирования выводит значение tbc, а не значение tbr в этом конкретном наборе вывода. что-то, чтобы подумать о том, почему я изменил его ... Я бы предпочёл, что это не очень заметно, чем способ, который вообще не замечается. – RobotHumans 12 March 2012 в 02:10
  • 3
    Я думаю, sed -n "s/.*, \(.*\) tbr.*/\1/p промахивается ", в конце концов, нет? – sup 13 March 2012 в 01:24
  • 4
    Обратите внимание, что ffmpeg устарел, и предпочтительной альтернативой является avconv. Команда аналогична, avconv -i filename. – appas 15 June 2015 в 11:17
  • 5
    ffmpeg не устарел, avconv пришел из ветви ffmpeg и во избежание путаницы для тех, кто использует альтернативу ffmpeg, фальшивая ветка была отмечена как устаревшая, чтобы эти пользователи знали, что версия, которую они использовали, менялась. ваш комментарий вводит в заблуждение и может заставить пользователей тратить время на изучение этого – Chris 20 April 2016 в 17:07
ffprobe -v 0 -of csv=p=0 -select_streams 0 -show_entries stream=r_frame_rate infile

Результат:

24000/1001
16
ответ дан 25 May 2018 в 13:44
  • 1
    Вероятно, это лучший ответ в том, что он дает скорость EXACT (в примере 24000/1001 = 23.976023976) – ntg 20 January 2016 в 16:30
  • 2
    иногда я получаю 0/0 в зависимости от формата – Daniel_L 14 February 2017 в 01:53
  • 3
    В зависимости от того, что вы хотите, это либо работает, либо нет. Он сообщает о частоте кодирования, но не о фактической частоте кадров видео. Например, видео с частотой 30 кадров в секунду, закодированное в 60 кадров в секунду, сообщит 60 кадров в секунду, но все равно будет 30 кадров в секунду на фактическом выходе. – Harvey 20 July 2017 в 20:16
  • 4
    Это не сработало, если видеопоток не первый поток, вы получите 0/0, если он смотрит на аудиопоток. Я отредактирую, чтобы поставить -select_streams V:0, который выберет первый движущийся видеопоток. – Sam Watkins 21 September 2017 в 09:44

Вот функция python, основанная на ответе Стивена Пенни с использованием 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
1
ответ дан 25 May 2018 в 13:44

Это скрипт 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
1
ответ дан 25 May 2018 в 13:44

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

0
ответ дан 25 May 2018 в 13:44

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

0
ответ дан 25 May 2018 в 13:44

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

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
ответ дан 25 May 2018 в 13:44
[F1]
-1
ответ дан 25 May 2018 в 13:44

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

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