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

视频帧提取失败求助:Python+OpenCV代码返回Read a new frame: False

解决OpenCV读取视频帧返回False的问题

我之前也碰到过一模一样的情况,给你几个实用的排查和解决思路:

先揪出最容易忽略的路径问题

首先确认你的video_01.mp4路径是否正确。如果视频文件和脚本不在同一个文件夹,一定要写绝对路径——Windows下记得用双反斜杠\\或者原始字符串(比如r'C:\Users\你的用户名\Desktop\video_01.mp4')。很多时候读取失败,本质就是系统根本找不到你指定的视频文件。

修正代码里的逻辑漏洞

你当前的代码有个小bug:进入循环前先读了一次帧,循环里又立刻读一次,不仅会跳过第一帧,而且当读到视频最后一帧时,下一次read()返回False,这时候你还会尝试写入image(此时image可能是空的),也会引发异常。调整后的代码应该是这样:

import cv2
vidcap = cv2.VideoCapture('video_01.mp4')
count = 0

# 先检查视频是否成功打开
if not vidcap.isOpened():
    print("无法打开视频文件,请检查路径或文件完整性")
    exit()

while True:
    success, image = vidcap.read()
    # 读取失败(到结尾或者文件损坏)就退出循环
    if not success:
        print("视频读取完成或文件损坏")
        break
    print(f'Read a new frame: {success}, 正在保存第{count}帧')
    cv2.imwrite(f"frame{count}.jpg", image)
    count += 1

# 记得释放视频资源,避免内存泄漏
vidcap.release()

确认OpenCV是否真的集成了FFmpeg

你说已经装了FFmpeg和av,但可能你的OpenCV并没有真正用上它们。可以运行这段代码查看OpenCV的编译信息:

import cv2
print(cv2.getBuildInformation())

在输出里找FFmpeg相关的部分,如果显示NO,说明你的OpenCV版本没有FFmpeg支持。这时候建议卸载现有OpenCV,重新安装带FFmpeg的版本:

pip uninstall opencv-python
pip install opencv-python-headless

opencv-python-headless包默认包含FFmpeg支持,适合无GUI的运行场景,能解决大部分视频编码的读取问题。

最后检查视频文件本身

如果上面的方法都没用,先试试用Windows自带的播放器打开视频,确认视频没有损坏。有些特殊编码的视频(比如某些小众格式)即使有FFmpeg也可能读不了,这时候可以用FFmpeg把视频转成通用的H.264编码的MP4:

ffmpeg -i video_01.mp4 -c:v libx264 -crf 23 output.mp4

然后用新生成的output.mp4再跑一次代码试试。

内容的提问来源于stack exchange,提问作者Darlyn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:39:09