ga('set', 'anonymizeIp', 1);
Categories: CodingPython

[python] 檔案整理 – 整理影片檔長度資訊存入excel

Share

本文介紹如何使用python寫出整理影片檔長度資訊,並且存入excel整理。

目標

假設你有很多影片檔,需要整理出所有檔案的資訊,並且處理存為excel檔案,因為不可能一個一個檔案去查找metadata,所以我們可以利用python批次處理。

Library

import library

from tinytag import TinyTag
import os
import xlsxwriter

Coding

Structure

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

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。

  • 中的divmod是將取兩數之商,餘數,返回一個數組(tuple)。
    Ex: divmod(7,2) = (3,1)

  • Python中//指的是除法取floor。
    Ex: 5//2 = 2

def second_to_minite(sec)

因為meta data的影片長度output是"秒",所以寫一個處理,取得轉換為"分+秒"。

Jys

Published by
Jys

Recent Posts

[python] Flask Create RESTful API

This article gi... Read More

3 年 前發表

[Javascript] 新增/刪除JSON中key值

在web訊息交換常會需要對JS... Read More

3 年 前發表

[JAVA] SQL Server Connection

本文介紹JAVA連線SQL s... Read More

3 年 前發表