우분투에서 비디오의 FPS를 찾는 간단한 방법이 있습니까? Windows에서는 Gspot을 사용하여 비디오 파일에 대한 모든 정보를 찾습니다. 그러나 우분투에서는이 기본 정보를 찾는 것이 매우 어렵다는 것을 알았습니다. 도움을 주시면 감사하겠습니다.
우분투에서 비디오의 FPS를 찾는 간단한 방법이 있습니까? Windows에서는 Gspot을 사용하여 비디오 파일에 대한 모든 정보를 찾습니다. 그러나 우분투에서는이 기본 정보를 찾는 것이 매우 어렵다는 것을 알았습니다. 도움을 주시면 감사하겠습니다.
답변:
가변 프레임 속도가 아닌 경우 프레임 속도를 알려줍니다.
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"
sed -n "s/.*, \(.*\) tbr.*/\1/p
그리움 "
을 생각한다 .
ffprobe -v 0 -of csv=p=0 -select_streams v:0 -show_entries stream=r_frame_rate infile
결과:
2997/100
0/0
형식에 따라 다름
-select_streams V:0
하면 첫 번째 움직이는 비디오 스트림이 선택됩니다.
0/0
.
정확한 프레임 속도를 제공하는 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
이것은 누군가 관심이있는 경우 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
누군가가 이것을 우연히 발견 한 경우를 대비하여 ... 입력 인수를 경로로 사용할 수 있습니다.)
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)))