对下面的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
定义函数获取视频文件列表
def get_video_files(video_folder, supported_formats): 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 return video_files
定义函数获取文件大小的字符串表示
def get_size_str(size): 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' return size_str
定义函数获取视频信息和音频信息
def get_video_audio_info(video_file): 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() return video_output, audio_output
定义函数处理多音轨情况
def process_audio_info(audio_info): 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]) return audio_bitrate, audio_sampling_rate, audio_lang
定义函数获取帧率
def get_framerate(video_info): try: framerate = float(video_info[3]) except ValueError: framerate = None return framerate
定义主函数
def main(): # 视频格式 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'
# 获取视频文件列表(包括子目录)
video_files = get_video_files(video_folder, supported_formats)
# 遍历所有视频文件
for video_file in video_files:
# 获取文件名
file_name = os.path.basename(video_file)
# 获取文件大小并进行单位换算
size = os.path.getsize(video_file)
size_str = get_size_str(size)
# 使用mediainfo获取视频信息 / 音频信息
video_output, audio_output = get_video_audio_info(video_file)
# 解析输出结果
video_info = video_output.split('|')
audio_info = audio_output.split('|')
# 处理多音轨情况
audio_bitrate, audio_sampling_rate, audio_lang = process_audio_info(audio_info)
# 时长取整
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])
# 获取帧率
framerate = get_framerate(video_info)
# 打印文件信息
print(f'{file_name}, {size_str}, {duration}, {video_info[1]}, {bitrate}, {framerate}, {" / ".join(audio_lang)}, {ratio}')
调用主函数
if name == 'main': main()
原文地址: https://www.cveoy.top/t/topic/bfV6 著作权归作者所有。请勿转载和采集!