python獲取指定影片解析度並移動到相應的資料夾中-2

大话人生發表於2024-04-08
import os
import shutil
from moviepy.editor import VideoFileClip

# 獲取所有檔案
def getAllFiles(fire_dir,houzui=".mp4"):
    filepath_list = []
    for root,folder_names,file_names in os.walk(fire_dir):
        for file_name in file_names:
            file_path = root+os.sep+file_name
            if file_path.endswith(houzui):  #判斷檔案是否以指定字尾結尾
                filepath_list.append(file_path)
                print(file_path)
    print(filepath_list)
    return filepath_list

#獲取指定資料夾下所有MP4檔案的時長
def getFileNames(path,houzui=".mp4"):
    return [os.path.join(path,f) for f in os.listdir(path) if f.endswith(houzui)]


#獲取影片時長
def getTimeLong(videoFile):

    clip = VideoFileClip(videoFile)
    sicahng = clip.duration
    print(sicahng) # seconds
    clip.close()
    return sicahng

#獲取影片解析度
def getKuanAndGao(videoFile):

    clip = VideoFileClip(videoFile)
    fenbianlv = clip.size # 獲取解析度
    print(fenbianlv)
    clip.close()
    return fenbianlv

#如果不存在就建立
def createDir(file_dir):
    # 如果不存在資料夾,就建立
    if not os.path.isdir(file_dir):
        os.mkdir(file_dir)

#移動檔案到指定資料夾下的yiqiege目錄
def moveFile(zhidingmulu,file_path):
    # # 將已經切割的移動到已經切割資料夾gen_dir
    # zhumulu = str(gen_dir).strip(gen_dir.split("\\")[-1])
    # # 建立資料夾
    # qiegewenjianjia = r"%s\yiqiege" % zhumulu
    # print("切割資料夾名字:")
    # print(qiegewenjianjia)
    # createDir(qiegewenjianjia)
    try:
        # 移動檔案到資料夾目錄中
        shutil.move(file_path, zhidingmulu)
        print("移動檔案%s到已切割資料夾" % file_path)
    except Exception as e:
        print("移動出錯:%s" % str(e))

#獲取指定路徑下MP4檔案的時長
def mp4FIleTime(path,houzui=".mp4"):
    file_list = getFileNames(path,houzui)
    for one in file_list:
        try:
            one_shichang = getTimeLong(one)
            print("%s檔案的時長為 %s 秒"%(one,one_shichang))
            zhengshu = int(one_shichang)
            zhengshijia1 = zhengshu+1
            #移動到指定時間的資料夾
            xiaoyu1miao = "%s/大於%s秒小於%s秒"% (path,str(zhengshu),str(zhengshijia1))
            createDir(file_dir=xiaoyu1miao)
            moveFile(zhidingmulu=xiaoyu1miao, file_path=one)

        except Exception as e:
            print("%s檔案的時長失敗,原因:%s"%(one,str(e)))
            #移動到指定時間的資料夾
            jieshishibai = "%s/解析失敗"% path
            createDir(file_dir=jieshishibai)
            moveFile(zhidingmulu=jieshishibai, file_path=one)
            continue

#獲取指定路徑下MP4檔案的解析度
def mp4FIleFenBianLv(path,houzui=".mp4"):
    file_list = getAllFiles(path,houzui)
    for one in file_list:
        try:
            one_fenbianlv = getKuanAndGao(one)
            print("%s檔案的解析度為 %s "%(one,one_fenbianlv))

            #移動到指定時間的資料夾
            xiaoyu1miao = "%s/%sx%s"% (path,one_fenbianlv[0],one_fenbianlv[1])
            createDir(file_dir=xiaoyu1miao)
            moveFile(zhidingmulu=xiaoyu1miao, file_path=one)

        except Exception as e:
            print("%s檔案的解析度失敗,原因:%s"%(one,str(e)))
            #移動到指定時間的資料夾
            jieshishibai = "%s/解析失敗"% path
            createDir(file_dir=jieshishibai)
            moveFile(zhidingmulu=jieshishibai, file_path=one)
            continue



if __name__ == '__main__':
    filePath =r"F:\BaiduNetdiskDownload"
    mp4FIleFenBianLv(path=filePath,houzui=".mp4")

相關文章