本文介紹如何使用python寫出整理影片檔長度資訊,並且存入excel整理。
目標
假設你有很多影片檔,需要整理出所有檔案的資訊,並且處理存為excel檔案,因為不可能一個一個檔案去查找metadata,所以我們可以利用python批次處理。
Library
- tinytag
pip3 install tinytag
- XlsxWriter
pip3 install XlsxWriter
- OS
import library
1 2 3 |
from tinytag import TinyTag import os import xlsxwriter |
Coding
Structure
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
st=>start: 程式進入點 op1=>operation: 創建excel op2=>operation: 進入資料夾 op3=>operation: 遍歷檔案檢查是否為.mp4 op4=>operation: Excel新增tab,以資料夾名稱命名 op5=>operation: 取得影片檔之meta data op6=>operation: 將影片時長解析存入list op7=>operation: list資料存入目前excel tab cond=>condition: 是否為最後一個資料夾路徑? op8=>operation: 關閉excel e=>end: 程式結束 st->op1->op2->op3->op4->op5->op6->op7->cond cond(no)->op3 cond(yes)->op8->e |
Source Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
from tinytag import TinyTag import os import xlsxwriter dirPath = ['D:/Projects/folder1/',\ 'D:/Projects/folder2/',\ 'D:/Projects/folder3/'] def main(): fileExt = r".mp4" workbook = xlsxwriter.Workbook('Video List.xlsx') for folder in dirPath: folderNow = '' vedioTimeList = [] TTL_duration = 0 folderNow = folder.split('/')[-2] worksheet = workbook.add_worksheet(folderNow[:30]) for i in os.listdir(folder): if i.endswith(fileExt): try: vedioPath = folder + i v = TinyTag.get(vedioPath) vedioDuration = getVedioDetail(v) vedioTimeList.append((i, str(vedioDuration[0])+"分"+str(vedioDuration[1])+"秒")) TTL_duration += v.duration except Exception: # print(str(Exception)) pass row = 0 TTL_duration = second_to_minite(TTL_duration) for i in vedioTimeList: worksheet.write(row, 0, i[0]) worksheet.write(row, 1, i[1]) row+=1 worksheet.write(row, 0, '總時間') worksheet.write(row, 1, TTL_duration) # print(vedioTimeList) workbook.close() def second_to_minite(sec): time = divmod(sec, 60) return (str(int(time[0]))+'分'+ str(int(time[1]//1))+'秒') def getVedioDetail(v): # return v.duration//60 time = divmod(v.duration, 60) return (int(time[0]), int(time[1]//1)) if __name__ == '__main__': main() |
Functions
def getVedioDetail(v)
從檔案meta data取得影片長度。使用到的是duration這個key。
-
function中的
divmod
是將取兩數之商,餘數,返回一個數組(tuple)。
Ex: divmod(7,2) = (3,1) -
Python中
//
指的是除法取floor。
Ex: 5//2 = 2
def second_to_minite(sec)
因為meta data的影片長度output是"秒",所以寫一個function處理,取得轉換為"分+秒"。
留言