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

Python遍历播放文件夹中所有MP4视频文件的问题求助

Python遍历播放文件夹中所有MP4视频文件的问题求助

兄弟,我瞅了你的代码,问题主要出在缩进错误和逻辑顺序上,导致你能遍历到文件列表,但没法逐个播放视频。咱们一步一步来改:

首先看你的原代码,cap = cv2.VideoCapture(tt)这行以及后面的播放逻辑,都写在了外层的for file in files:循环外面!而且cap.release()和cv2.destroyAllWindows()还不小心放到了while循环的内部,这就导致视频刚读一帧就被释放资源了,根本播不起来。

给你修正后的代码,我会标清楚关键改动的地方:

import os
import cv2
import numpy as np

# 遍历目标文件夹下的所有文件
for root, dirs, files in os.walk('f:\\a'):
    for file in files:
        # 只处理MP4格式的文件,避免其他格式文件干扰
        if file.endswith('.mp4'):
            tt = os.path.join(root, file)
            print(f"正在播放: {tt}")
            
            # 把视频捕获初始化放到内层循环,每个文件单独处理
            cap = cv2.VideoCapture(tt)
            
            # 检查视频是否成功打开,避免报错
            if not cap.isOpened():
                print(f"无法打开视频文件: {tt}")
                continue
            
            # 播放当前视频的循环,注意缩进
            while cap.isOpened():
                ret, frame = cap.read()
                if ret == True:
                    cv2.imshow('frame', frame)
                    # 按q键直接退出所有播放
                    if cv2.waitKey(1) == ord('q'):
                        cap.release()
                        cv2.destroyAllWindows()
                        exit()
                else:
                    # 视频播放完毕,跳出当前视频的循环
                    break
            
            # 单个视频播放完成后,再释放资源、销毁窗口
            cap.release()
            cv2.destroyAllWindows()

我给你加了几个关键优化点:

  • 把视频捕获和播放的逻辑完全放到内层的文件遍历循环里,这样每个MP4文件都会被单独处理
  • 增加了file.endswith('.mp4')的判断,避免尝试播放非MP4格式的文件
  • 把cap.release()和cv2.destroyAllWindows()移到了while循环外面,确保整个视频播放完成后才释放资源
  • 加了视频打开失败的判断,避免程序报错崩溃
  • 优化了退出逻辑,按q键会直接终止所有播放并退出程序

你运行这个代码试试,应该就能逐个播放文件夹里的所有MP4文件了,播放完一个会自动切换到下一个,按q键可以随时退出。

备注:内容来源于stack exchange,提问作者Ka nguyen van

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 18:18:05