ga('set', 'anonymizeIp', 1);
本文介紹如何使用python寫出整理影片檔長度資訊,並且存入excel整理。
假設你有很多影片檔,需要整理出所有檔案的資訊,並且處理存為excel檔案,因為不可能一個一個檔案去查找metadata,所以我們可以利用python批次處理。
pip3 install tinytag
pip3 install XlsxWriter
from tinytag import TinyTag
import os
import xlsxwriter
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
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()
從檔案meta data取得影片長度。使用到的是duration這個key。
中的divmod
是將取兩數之商,餘數,返回一個數組(tuple)。
Ex: divmod(7,2) = (3,1)
Python中//
指的是除法取floor。
Ex: 5//2 = 2
因為meta data的影片長度output是"秒",所以寫一個處理,取得轉換為"分+秒"。