Tình hình mình có viết cái hàm nhỏ để lấy tổng thời gian của một video tính bằng giây sử dụng subprocess trong Python và MediaInfo .
Thực ra thì nó có một thư viện cho việc này nhưng mình chỉ muốn lấy tổng thời gian của một Video nên không muốn kéo nguyên một thư viện mà code một hàm riêng
def Get_video_stream_duration(path_input,path_mediainfo="mediainfo"):
def run_mediainfo():
if platform.system()=='Linux':
cmd="'{}' --Inform=\"Video;%Duration%\" '{}'".format(path_mediainfo,path_input)
elif platform.system()=='Windows':
cmd="\"{}\" --Inform=\"Video;%Duration%\" \"{}\"".format(path_mediainfo,path_input)
else:
print("You system not support by this script \n System support: \n -Linux -Windows")
return False
try:
result = subprocess.run(cmd,shell=True,stdout=subprocess.PIPE)
print(result.stdout)
result=''.join([n for n in str(result.stdout) if n.isdigit()])
return (int(result)/1000000)
except :
print("Somthing wrong.Please check ! \n Video cannot read or other problems")
return False
path_input=os.path.normpath(path_input)
if os.path.exists(path_input)==True:
if is_video_file(path_input)==True:
if path_mediainfo=="mediainfo":
if shutil.which(path_mediainfo)!=None:
return run_mediainfo()
path_mediainfo=Get_MediaInfo()
return run_mediainfo
path_mediainfo=path_mediainfo
return run_mediainfo()
return False
Và hàm Get_MediaInfo để tải và cài đặt Media Info trong trường hợp trên máy chưa cài !
def Get_MediaInfo(path_dir="./MediaInfo"):
if platform.system()=='Windows':
if os.path.exists(path_dir+"/MediaInfo.exe")==True:
return path_dir+"/MediaInfo.exe"
else :
os.makedirs(path_dir)
if os.path.exists(path_dir)!=True:
print("Cannot create folder to download MediaInfo \n Please check! ")
return False
url_file="https://github.com/Kulteam/AutoLazy/blob/main/mediainfo/win/MediaInfo_CLI_21.09_Windows_i386.zip?raw=true"
filename=Download_file_from_direct_link(url_file,path_folder=path_dir)
while get_digest(filename)!="a8341a4b3db85d55d5ee81b0978b3d801eb221a14f15d0487f92fb7f387a446b":
filename=Download_file_from_direct_link(url_file,path_folder=path_dir)
shutil.unpack_archive(filename,path_dir)
cmd="set PATH %PATH%;"+path_dir
subprocess.run(cmd,shell=True)
if shutil.which("mediainfo")!=None:
print("Install MediaInfo on your Windows computer is successfully")
return os.path.normpath(path_dir+"/mediainfo")
else:
print("Somthing wrong while try to install MediaInfo on your Windows computer")
return False
if platform.system()=='Linux':
if os.path.exists(path_dir+"/mediainfo")==True:
if os.access(path_dir+"/mediainfo", os.X_OK)!=True:
try:
path_file=path_dir+"/mediainfo"
os.chmod(path_file, 0o777)
except:
print("Cannot Chmod File \"mediainfo\" \n Please check! ")
return False
return os.path.normpath(path_dir+"/mediainfo")
else :
os.makedirs(path_dir)
if os.path.exists(path_dir)!=True:
print("Cannot create folder to download MediaInfo \n Please check! ")
return False
url_file="https://github.com/Kulteam/AutoLazy/blob/main/mediainfo/linux/MediaInfo_CLI_21.09_Linux_Portal_x64.zip?raw=true"
filename=Download_file_from_direct_link(url_file,path_folder=path_dir)
while get_digest(filename)!="fdf7d301597fd9bbc0092acc67d5b053485279e9c072e50903357e91ee01804e":
filename=Download_file_from_direct_link(url_file,path_folder=path_dir)
shutil.unpack_archive(filename,path_dir)
#Set path lib on Linux
path_lib="LD_LIBRARY_PATH=$LD_LIBRARY_PATH:{}/.libs".format(path_dir)
export="export LD_LIBRARY_PATH"
subprocess.run(path_lib,shell=True)
subprocess.run(export,shell=True)
chmod="chmod -R +x {}".format(path_dir)
subprocess.run(chmod,shell=True)
#set_path="export PATH=$PATH:{}/mediainfo".format(path_dir)
#subprocess.run(set_path,shell=True)
if os.path.exists(path_dir+"/mediainfo")==True:
print("Install MediaInfo on your Linux computer is successfully")
return os.path.normpath(path_dir+"/mediainfo")
else:
print("Somthing wrong while try to install MediaInfo on your Linux computer")
return False
else:
print("Your system computer not support by this Script \n System Support: \n -Windows \n -Linux ")
return False
Khi mình chạy
print(Get_video_stream_duration("Sabai - Million Days (Official Lyric Video) ft. Hoang & Claire Ridgely-fVeD9vWCpZ8.mkv"))
thì bị lỗi :
<function Get_video_stream_duration.<locals>.run_mediainfo at 0x7f902cf28510>
Trước đó thì nó cũng bị lỗi này , mình đã fix và đã chạy bình thường mà không hiểu sao giờ nó lại lặp lại lỗi này …Thật hết nói lun
Hi vọng ai đó có thể giúp