以下是一个利用 mediainfo 统计视频元数据并写入 excel 的 Python3 脚本示例:

注意:在运行代码之前,请先确保已安装 mediainfo 和 openpyxl 模块。

import os
import openpyxl
from openpyxl import Workbook
from openpyxl.utils import get_column_letter
from openpyxl.styles import Font
from openpyxl.styles.colors import Color
from openpyxl.styles.colors import BLACK
from openpyxl.styles.colors import WHITE
from openpyxl.styles.colors import BLUE
from openpyxl.styles.colors import RED
from openpyxl.styles.colors import GREEN
from openpyxl.styles.colors import YELLOW
from openpyxl.styles.colors import PURPLE
from openpyxl.styles.colors import ORANGE
from openpyxl.styles.colors import GRAY
from openpyxl.styles.colors import DARKYELLOW
from openpyxl.styles.colors import DARKGREEN
from openpyxl.styles.colors import DARKRED
from openpyxl.styles.colors import DARKBLUE

# Define colors for different metadata types
COLORS = {
    'General': DARKYELLOW,
    'Video': DARKGREEN,
    'Audio': DARKRED,
    'Text': DARKBLUE,
    'Menu': ORANGE,
    'Chapters': PURPLE,
    'Image': BLUE
}

# Define header row for Excel file
HEADER = ['File Name', 'Duration', 'Size', 'Format', 'Width', 'Height', 'Frame Rate', 'Codec ID', 'Bit Rate', 'Channels', 'Language', 'Codec ID']

# Define mediainfo command
MEDIAINFO_CMD = 'mediainfo --Output=XML ''{file}''

def get_media_info(file_path):
    # Run mediainfo command and get output
    cmd = MEDIAINFO_CMD.format(file=file_path)
    output = os.popen(cmd).read()
    
    # Parse XML output and get relevant metadata
    metadata = {}
    for track in output.split('<track type=')[1:]:
        type_ = track.split(' type='')[1].split(''')[0]
        if type_ not in metadata:
            metadata[type_] = {}
        for line in track.splitlines():
            if '<' in line:
                key = line.split('>')[0].replace('<', '')
                value = line.split('>')[1].split('<')[0]
                metadata[type_][key] = value
    
    return metadata

def write_to_excel(file_path, metadata, sheet):
    # Write file name to first column
    sheet.append([os.path.basename(file_path)])
    
    # Write metadata to subsequent columns
    for type_, data in metadata.items():
        for key in HEADER[1:]:
            if key in data:
                sheet.append([type_ + ' ' + key, data[key]])
                sheet.cell(row=sheet.max_row, column=1).fill = Color(COLORS[type_])
    
    # Add empty row for spacing
    sheet.append([])

def main():
    # Create Excel workbook and sheet
    wb = Workbook()
    sheet = wb.active
    sheet.title = 'Video Metadata'
    
    # Write header row to Excel file
    sheet.append(HEADER)
    for col_num, column_title in enumerate(HEADER, 1):
        column_letter = get_column_letter(col_num)
        cell = sheet[column_letter + '1']
        cell.value = column_title
        cell.font = Font(bold=True)
    
    # Get list of video files in current directory
    video_files = [f for f in os.listdir('.') if os.path.isfile(f) and f.lower().endswith('.mp4')]
    
    # Loop through video files, get metadata, and write to Excel file
    for file_path in video_files:
        metadata = get_media_info(file_path)
        write_to_excel(file_path, metadata, sheet)
    
    # Save Excel file
    wb.save('Video Metadata.xlsx')

if __name__ == '__main__':
    main()

该脚本将在当前目录中查找所有.mp4文件,并为每个文件生成一个新的Excel行,包含该视频的元数据。元数据将按照类型(例如“General”,“Video”,“Audio”等)进行分组,并使用不同的颜色进行区分。最后将所有元数据写入到名为“Video Metadata.xlsx”的Excel文件中。

Python3 脚本使用 MediaInfo 统计视频元数据并写入 Excel

原文地址: https://www.cveoy.top/t/topic/mzY9 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录