You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 14:32:49