直接上代碼 可以直接用


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()

推薦閱讀:

查看原文 >>
相关文章