import os
import re
import subprocess
import math

# 视频格式
supported_formats = [
    '.mp4', '.avi', '.mkv', '.wmv', '.mov', '.flv', '.m2ts', '.ts', '.rm', '.rmvb',
    '.vob', '.3gp', '.webm', '.hdmov', '.mp4v', '.mpv4', '.divx', '.xvid', '.f4v',
    '.mpeg', '.asf', '.asx', '.m2t'
]

# 视频文件夹
video_folder = '/home/115/up'

# 正则表达式匹配码率数据中的空格
pattern = re.compile(r'(\d+)\s+(\d+)')

# 获取视频文件列表(包括子目录)
video_files = []
for root, dirs, files in os.walk(video_folder):
    for file in files:
        for format in supported_formats:
            if file.endswith(format):
                video_files.append(os.path.join(root, file))
                break

# 遍历所有视频文件
for video_file in video_files:
    # 获取文件名
    file_name = os.path.basename(video_file)

    # 获取文件大小并进行单位换算
    size = os.path.getsize(video_file)
    if size < 1024:
        size_str = f'{size} B'
    elif size < 1024 * 1024:
        size_str = f'{size / 1024:.2f} KiB'
    elif size < 1024 * 1024 * 1024:
        size_str = f'{size / 1024 / 1024:.2f} MiB'
    else:
        size_str = f'{size / 1024 / 1024 / 1024:.2f} GiB'

    # 使用mediainfo获取视频信息 / 音频信息
    video_result = subprocess.run([
        'mediainfo', '--Inform=Video;%Format%|%Width%x%Height%|%BitRate/String%|%FrameRate%|%Duration/String3%',
        video_file
    ], stdout=subprocess.PIPE)
    video_output = video_result.stdout.decode().strip()

    audio_result = subprocess.run([
        'mediainfo', '--Inform=Audio;%BitRate/String%|%SamplingRate/String%|%Language/String%', video_file
    ], stdout=subprocess.PIPE)
    audio_output = audio_result.stdout.decode().strip()

    # 解析输出结果
    video_info = video_output.split('|')
    audio_info = audio_output.split('|')

    # 处理多音轨情况
    audio_bitrate = []
    audio_sampling_rate = []
    audio_lang = []
    for i in range(len(audio_info) // 3):
        audio_bitrate.append(audio_info[i * 3])
        audio_sampling_rate.append(audio_info[i * 3 + 1])
        audio_lang.append(audio_info[i * 3 + 2])

    # 时长取整
    duration = video_info[4].split('.')[0]
    h, m, s = duration.split(':')
    duration = f'{h}:{m}:{str(s).zfill(2)}'

    # 以分钟计算的时长
    duration_minutes = int(h) * 60 + int(m) + math.ceil(float(s)) / 60

    # 计算压缩比率
    ratio = round(duration_minutes / size * 1000000000, 2)

    # 使用正则表达式替换码率数据中第一个数字和第二个数字之间的空格
    bitrate = re.sub(pattern, r'\1\2', video_info[2])

    # 获取帧率
    try:
        framerate = float(video_info[3])
    except ValueError:
        framerate = None

    # 打印文件信息
    print(
        f'{file_name}, {size_str}, {duration}, {video_info[1]}, {bitrate}, {framerate}, {' / '.join(audio_lang)}, {ratio}'
    )

该脚本可以帮助你快速了解视频文件的基本信息,并进行简单的整理和分析。你可以根据自己的需要修改脚本中的参数,例如视频文件夹路径、支持的视频格式等。

使用方法:

  1. 将脚本保存为 .py 文件,例如 video_info.py
  2. 修改脚本中的 video_folder 参数,将其设置为你要扫描的视频文件夹路径。
  3. 运行脚本,例如 python video_info.py

输出示例:

video.mp4, 123.45 MiB, 01:23:45, 1920x1080, 2000000, 24.0, 中文 / English, 12345.67

解释:

  • video.mp4: 文件名
  • 123.45 MiB: 文件大小
  • 01:23:45: 时长
  • 1920x1080: 分辨率
  • 2000000: 码率
  • 24.0: 帧率
  • 中文 / English: 音频语言
  • 12345.67: 压缩比率

注意:

  • 该脚本需要安装 mediainfo 工具。
  • 脚本中使用了 f-string,需要 Python 3.6 以上版本才能运行。
  • 脚本中使用了 subprocess 模块,需要确保你的系统可以正常运行 mediainfo 命令。
  • 输出结果可能会因视频文件内容的不同而有所差异。
Python3 视频文件信息提取与美化脚本

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

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