Có cách nào đơn giản để tìm fps của video trong ubfox không? Trong windows tôi sử dụng Gspot để tìm hiểu tất cả thông tin về một tệp video. Nhưng trong ubfox tôi thấy rất khó để tìm ra thông tin cơ bản này. Bất kỳ trợ giúp được đánh giá cao.
Có cách nào đơn giản để tìm fps của video trong ubfox không? Trong windows tôi sử dụng Gspot để tìm hiểu tất cả thông tin về một tệp video. Nhưng trong ubfox tôi thấy rất khó để tìm ra thông tin cơ bản này. Bất kỳ trợ giúp được đánh giá cao.
Câu trả lời:
Điều này sẽ cho bạn biết tốc độ khung hình nếu nó không phải là tốc độ khung hình:
tên tệp ffmpeg -i
Đầu ra mẫu với tên tệp bị che khuất:
Đầu vào # 0, matroska, webm, từ 'somerandom.mkv': Thời lượng: 01: 16: 10,90, bắt đầu: 0,000000, bitrate: Không áp dụng Luồng # 0,0: Video: h264 (Cao), yuv420p, 720x344 [PAR 1: 1 DAR 90:43], 25 khung hình / giây, 25 tbr, 1k tbn, 50 tbc (mặc định) Luồng # 0,1: Âm thanh: aac, 48000 Hz, âm thanh nổi, s16 (mặc định)
ffmpeg -i tên tệp 2> & 1 | sed -n "s /.*, \ (. * \) fp. * / \ 1 / p"
Ai đó đã chỉnh sửa với một cái không hoạt động theo cách tôi muốn. Nó được tham chiếu ở đây
Chỉnh sửa bổ sung ... Nếu bạn muốn giá trị tbr thì dòng sed này hoạt động
sed -n "s /.*, \ (. * \) tbr. * / \ 1 / p"
sed -n "s/.*, \(.*\) tbr.*/\1/p
bỏ lỡ "
cuối cùng, không?
ffprobe -v 0 -of csv=p=0 -select_streams v:0 -show_entries stream=r_frame_rate infile
Kết quả:
2997/100
0/0
tùy thuộc vào định dạng
-select_streams V:0
, sẽ chọn luồng video di chuyển đầu tiên.
0/0
.
Đây là một hàm python dựa trên câu trả lời của Steven Penny bằng cách sử dụng ffprobe cho tốc độ khung hình chính xác
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
Thay thế cho dòng lệnh, đang xem xét các thuộc tính của tệp của bạn thông qua menu ngữ cảnh trong Nautilus (trình quản lý tệp đồ họa). Đối với các tệp âm thanh / video, bạn nhận được một tab bổ sung ở đó với thông tin bổ sung.
Đây là một kịch bản python để làm điều này bằng cách sử dụng mplayer, trong trường hợp bất cứ ai quan tâm. Nó được sử dụng path/to/script path/to/movie_name1 path/to/movie/name2
vv
#!/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
Bạn có thể nhấp chuột phải vào tệp mục tiêu, Thuộc tính, Âm thanh / Video nhưng bạn sẽ không nhận được tốc độ khung hình chính xác. Để có được tốc độ khung hình chính xác, bạn có thể cài đặt MediaInfo.
Chỉ trong trường hợp ai đó vấp phải điều này ... tất nhiên bạn có thể sử dụng đầu vào arg làm đường dẫn;)
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)))