Python統計某文件夾下所有視頻文件(主要針對flv)的時長信息

常常須要看各類視頻教程,不少視頻是flv格式的,視頻分佈在不一樣文件夾,須要看總共一個系列的視頻須要花多長時間。flv格式的視頻,win下沒辦法直接看到時長信息。用python寫了個小程序,來解決這個問題

須要先安裝moviepy庫python

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())))
相關文章
相關標籤/搜索