如何用Python循环统计多个MP4文件的视频帧数
解决多视频帧数统计的循环整合问题
直接把单个视频的统计逻辑套进视频列表的遍历循环里就行,我给你调整并优化了代码(顺便把低效的逐帧遍历改成直接调用视频属性,处理大视频快很多):
# 把所有导入语句放在开头,符合Python编码规范 import glob from moviepy.editor import VideoFileClip from datetime import timedelta # 获取目标目录下所有MP4文件的路径 video_list = glob.glob('C:\\Users\\---\\Documents\\**\\*.mp4', recursive=True) # 遍历每个视频文件,逐一处理 for video_path in video_list: print(f"正在处理: {video_path}") # 打开当前视频文件 clip = VideoFileClip(video_path) # 直接读取视频总帧数(比逐帧循环计数高效N倍) frame_count = clip.reader.nframes # 获取视频实际帧率,不用硬写固定值 fps = clip.fps # 计算视频总时长 total_duration = timedelta(seconds=(frame_count / fps)) # 输出当前视频的统计结果 print(f"总帧数: {frame_count}") print(f"帧率: {fps:.2f}") print(f"视频时长: {total_duration}\n") # 关闭视频释放资源,避免内存占用过高 clip.close()
关键调整说明:
- 把零散的
import移到代码开头,结构更清晰 - 将单个视频的处理逻辑(打开、统计、计算时长)完全嵌入
for循环,遍历所有找到的视频 - 用
clip.reader.nframes直接获取总帧数,替代逐帧遍历的低效方式,大视频处理速度会快很多 - 用视频自身的
clip.fps获取真实帧率,适配不同视频的参数,不用硬编码20.0 - 每次处理完视频调用
clip.close()释放资源,防止内存泄漏
如果你一定要用原来的逐帧遍历方式计数,把frame_count = clip.reader.nframes替换成下面这段代码即可:
# 原逐帧计数逻辑(效率低,不推荐大视频使用) counter = 0 for _ in clip.iter_frames(): counter += 1 frame_count = counter
内容的提问来源于stack exchange,提问作者Kayla Silver
相关产品推荐
相关产品推荐

