经常需要看各种视频教程,很多视频是flv格式的,视频分布在不同文件夹,需要看总共一个系列的视频需要花多长时间。flv格式的视频,win下没办法直接看到时长信息。用python写了个小程序,来解决这个问题
需要先安装moviepy库
pip install moviepy
直接上代码了
import os
from moviepy.editor import VideoFileClip
import traceback
class MovieDirUtil():
def __init__(self,file_dir):
self.file_dir = file_dir
def get_filesize(self, filename):
u"""
获取文件大小(M: 兆)
"""
file_byte = os.path.getsize(filename)
return self.sizeConvert(file_byte)
def get_file_times(self, filename):
u"""
获取视频时长(s:秒)
"""
file_time = 0
clip = None
try:
clip = VideoFileClip(filename)
file_time = clip.duration
except Exception as e:
traceback.print_exc()
finally:
if clip:
clip.close()
return file_time
def sizeConvert(self, size): # 文件大小单位换算
K, M, G = 1024, 1024 ** 2, 1024 ** 3
if size >= G:
return str(size / G) + 'G Bytes'
elif size >= M:
return str(size / M) + 'M Bytes'
elif size >= K:
return str(size / K) + 'K Bytes'
else:
return str(size) + 'Bytes'
def timeConvert(self, size): # 时间单位换算
M, H = 60, 60 ** 2
if size < M:
return str(size) + u'秒'
if size < H:
return u'%s分钟%s秒' % (int(size / M), int(size % M))
else:
hour = int(size / H)
mine = int(size % H / M)
second = int(size % H % M)
tim_srt = u'%s小时%s分钟%s秒' % (hour, mine, second)
return tim_srt
def get_all_file(self):
u"""
获取目录下下所有的文件
"""
file_list = []
for root, dirs, files in os.walk(file_dir):
for file in files:
# begin
#print(os.path.join(root, file))
file_list.append(os.path.join(root, file))
# end
return file_list
def get_all_file_duration(self):
u"""
获取目录下下所有的文件的播放总时长,单位s
"""
fileList = self.get_all_file()
file_duration = 0
for f in fileList:
# print(f)
print(f, mdu.timeConvert(self.get_file_times(f)))
file_duration += self.get_file_times(f)
return file_duration
if __name__=="__main__":
file_dir = u"L:/教程/xxxx/" # 定义目录地址
mdu = MovieDirUtil(file_dir)
print("目录里面包含的视频总共时长为:{duration}".format(duration=mdu.timeConvert(mdu.get_all_file_duration())))