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 = input("请输入文件夹路径:")

正则表达式匹配码率数据中的空格

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)}'

# 以分钟计算的时长 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])
# 打印文件信息
print(f'{file_name}, {size_str}, {duration}, {video_info[1]}, {bitrate}, {video_info[3]}, {" / ".join(audio_lang)}, {ratio}')
取消下面的python3代码中的循环import osimport reimport subprocessimport math# 视频格式supported_formats = mp4 avi mkv wmv mov flv m2ts ts rm rmvb vob 3gp webm hdmov mp4v mpv4 divx xvid f4v

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

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