Python3 FFprobe獲取視頻參數
直接上代碼 可以直接用
get parameter from ffmpeg
function check_ffmepg_exist
function return_all_parameter
function return_video_height_wigth
function return_video_filesize
function return_video_full_frame
function return_video_time_length
import os
import subprocess
import json
class ffprboe_parameter():
def __init__(self,env=0):
env 1 代表使用本地環境變數
env 2 代表使用bin目錄下的
:param env:
self.check_ffmepg_exist() if env == 1 else print(end=)
def check_ffmepg_exist(self):
base_dir = os.getcwd() + os.sep + bin
assert os.path.exists(base_dir + os.sep + ffmpeg.exe), FileNotFoundError(The bin dir not have ffmpeg.exe)
assert os.path.exists(base_dir + os.sep + ffprobe.exe), FileNotFoundError(The bin dir not have ffprobe.exe)
def return_all_parameter(self,video_path=None):
video_path=self.video_path_check(video_path=video_path)
assert os.path.exists(video_path),FileNotFoundError(video not found)
assert os.path.isfile(video_path),FileExistsError(video is not file,please check it )
try:
all_parameter=subprocess.check_output([ffprobe,-i,video_path,-print_format,json,-show_format,-show_streams,-v,quiet])
all_parameter=all_parameter.decode(utf8)
all_parameter=json.loads(all_parameter)
except Exception:
raise Exception(error for get video info)
return all_parameter
def return_video_height_wigth(self,video_path=None):
video_path = self.video_path_check(video_path=video_path)
tmp=self.return_all_parameter(video_path=video_path)[streams][0]
return (tmp[width],tmp[height])
def return_video_filesize(self,format=GB,video_path=None):
video_path = self.video_path_check(video_path=video_path)
tmp = self.return_all_parameter(video_path=video_path)[format]
if format.lower()==gb:
return float(%.4f%(int(tmp[size])/1024/1024/1024)),format.upper()
if format.lower()==mb:
return float(%.4f%(int(tmp[size])/1024/1024)),format.upper()
if format.lower()==kb:
return float(%.4f % (int(tmp[size]) / 1024 )), format.upper()
def return_video_full_frame(self,video_path=None):
video_path=self.video_path_check(video_path=video_path)
tmp = self.return_all_parameter(video_path=video_path)[streams][0]
return tmp[nb_frames]
def init_video_path(self,video_path):
self.video_path=video_path
return self.video_path
def video_path_check(self,video_path):
if video_path == None:
try:
video_path=self.video_path
except:
raise BaseException(video_path is not define )
return video_path
def return_video_time_length(self,video_path=None):
video_path=self.video_path_check(video_path=video_path)
tmp = self.return_all_parameter(video_path=video_path)[format]
return str(int(float(tmp[duration])/3600)).__add__(小時).__add__(str(int(float(tmp[duration])%3600/60))).__add__(分鐘)
def return_all_items(self,video_path=None):
video_path=self.video_path_check(video_path=video_path)
tmp={
video_height_wigth:list(self.return_video_height_wigth()),
video_filesize:.join([.join(str(x)) for x in self.return_video_filesize()]),
video_full_frame:self.return_video_full_frame(),
video_time_length:self.return_video_time_length()
}
return tmp
if __name__ == __main__:
video_info_api=ffprboe_parameter()
video_info_api.init_video_path(video_path=rd:\test.mp4)
video_info_api.return_all_items()
推薦閱讀: