비디오 파일의 초당 프레임을 찾는 방법은 무엇입니까?


44

우분투에서 비디오의 FPS를 찾는 간단한 방법이 있습니까? Windows에서는 Gspot을 사용하여 비디오 파일에 대한 모든 정보를 찾습니다. 그러나 우분투에서는이 기본 정보를 찾는 것이 매우 어렵다는 것을 알았습니다. 도움을 주시면 감사하겠습니다.


모든 비디오 파일에 "fps"가있는 것은 아니기 때문에 (VFR 인코딩이 존재하기 때문에) 불가능합니다.
fkraiem

VFR 비디오는 여전히 평균 프레임 속도를 갖습니다. 이것이 유용한 지 여부는 응용 프로그램에 따라 다릅니다.
thomasrutter

답변:


47

가변 프레임 속도가 아닌 경우 프레임 속도를 알려줍니다.

ffmpeg -i 파일 이름

파일 이름이 가려진 샘플 출력 :

'somerandom.mkv'에서 # 0, matroska, webm을 입력하십시오.
  지속 시간 : 01 : 16 : 10.90, 시작 : 0.000000, 비트 전송률 : N / A
    스트림 # 0.0 : 비디오 : h264 (높음), yuv420p, 720x344 [PAR 1 : 1 DAR 90:43], 25fps, 25tbr, 1k tbn, 50 tbc (기본값)
    스트림 # 0.1 : 오디오 : aac, 48000Hz, 스테레오, s16 (기본값)
ffmpeg -i 파일 이름 2> & 1 | sed -n "s /.*, \ (. * \) fp. * / \ 1 / p"

내가 원하는 방식으로 작동하지 않는 것으로 편집했습니다. 여기 참조 됩니다
추가 편집 ... tbr 값을 원하면이 sed line이 작동합니다

sed -n "s /.*, \ (. * \) tbr. * / \ 1 / p"

원 라이너에서 fp 대신 tb를 사용해야했습니다. 모든 비디오 파일이 fps를보고하지는 않지만 동일한 값을 가진 tbr tbc와 같은 모든 출력을 보입니다.
sup

유효하지만 편집의 한 줄짜리는이 특정 출력 세트의 tbr 값이 아닌 tbc 값을 출력했습니다. 내가 왜 그것을 바꾸 었는지에 대해 고려해야 할 점 ... 나는 전혀 눈에 띄지 않는 방식보다 실제로 눈에 띄는 방식으로 실패합니다.
RobotHumans

나는 결국 sed -n "s/.*, \(.*\) tbr.*/\1/p그리움 "을 생각한다 .
sup

6
ffmpeg는 더 이상 사용되지 않으며 avconv는 ffmpeg의 분기에서 왔으며 ffmpeg 대안을 사용하는 사람들의 혼동을 피하기 위해 가짜 분기는 더 이상 사용되지 않는 것으로 표시되어 사용중인 버전이 변경되고 있음을 사용자에게 알립니다. 귀하의 의견은 오해의 소지가 있으며 사용자가이를 조사하는 데 시간을 낭비 할 수 있습니다.
Chris

1
가변 프레임 속도 인 경우 어떻게합니까?
0xcaff

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

결과:

2997/100

3
이것은 아마도 정확한 프레임 속도를 제공한다는 점에서 가장 좋은 대답 일 것입니다 (예제 24000/1001 = 23.976023976)
ntg

1
때로는 0/0형식에 따라 다름
Daniel_L

1
원하는 내용에 따라 작동하거나 작동하지 않습니다. 인코딩의 프레임 속도는보고하지만 비디오의 실제 프레임 속도는보고하지 않습니다. 예를 들어 60fps로 인코딩 된 30fps 비디오는 60fps를보고하지만 실제 출력에서는 여전히 30fps입니다.
Harvey

8
비디오 스트림이 첫 번째 스트림이 아닌 경우 작동하지 않습니다. 오디오 스트림을 보면 0/0이 표시됩니다. 을 넣어 편집 -select_streams V:0하면 첫 번째 움직이는 비디오 스트림이 선택됩니다.
Sam Watkins

2
@SamWatkins의 보완이 중요합니다. 그것없이, 명령은 output을주었습니다 0/0.
jdhao

4

정확한 프레임 속도를 제공하는 ffprobe를 사용한 Steven Penny의 답변을 기반으로 한 Python 함수는 다음과 같습니다.

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

2

명령 행의 대안은 노틸러스 (그래픽 파일 관리자)의 상황에 맞는 메뉴를 통해 파일의 속성을 보는 것입니다. 오디오 / 비디오 파일의 경우 추가 정보가있는 추가 탭이 있습니다.


2

이것은 누군가 관심이있는 경우 mplayer를 사용 하여이 작업을 수행하는 Python 스크립트입니다. 사용됩니다 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

0

대상 파일, 속성, 오디오 / 비디오를 마우스 오른쪽 버튼으로 클릭 할 수 있지만 정확한 프레임 속도는 얻을 수 없습니다. 정확한 프레임 속도를 얻으려면 MediaInfo를 설치할 수 있습니다.


0

누군가가 이것을 우연히 발견 한 경우를 대비하여 ... 입력 인수를 경로로 사용할 수 있습니다.)

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

나는 보통 exiftool모든 파일 형식의 정보를 얻는 데 사용 합니다 ... 예를 들어 명령 exiftool file.swf을 사용하면 swf 파일의 프레임 속도를 알 수 있습니다.ffmpeg


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

1
그것이 무엇을하는지 설명해 주시겠습니까?
rɑːdʒɑ
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.