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
相关产品推荐
相关产品推荐

