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

OpenCV获取MKV视频帧率与总帧数异常的解决咨询

解决OpenCV读取MKV视频帧率和帧数错误的问题

针对你遇到的cv2.VideoCapture读取MKV视频时帧率返回1000.0、总帧数返回负数的问题,可尝试以下几种解决方案:

1. 强制指定FFmpeg后端读取视频

MKV作为容器格式,FFmpeg对其支持更完善。初始化VideoCapture时显式指定使用FFmpeg后端:

import time
import cv2

video_file_name = 'my_video_0.mkv'
# 强制使用FFmpeg后端
cap = cv2.VideoCapture(video_file_name, cv2.CAP_FFMPEG)

if not cap.isOpened():
    print("视频文件无法打开")
else:
    fps = cap.get(cv2.CAP_PROP_FPS)
    frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    print(f"帧率: {fps}")
    print(f"总帧数: {frame_count}")

2. 手动遍历帧获取准确的帧数和帧率

若元数据读取始终异常,可通过逐帧读取的方式计算真实帧数和帧率:

import time
import cv2

video_file_name = 'my_video_0.mkv'
cap = cv2.VideoCapture(video_file_name, cv2.CAP_FFMPEG)

if not cap.isOpened():
    print("视频文件无法打开")
    exit()

frame_count = 0
start_time = time.time()

# 逐帧读取直到结束
while True:
    ret, frame = cap.read()
    if not ret:
        break
    frame_count += 1
    # 若需要保存帧,可在此处添加保存逻辑
    # cv2.imwrite(f"frame_{frame_count}.jpg", frame)

end_time = time.time()
actual_fps = frame_count / (end_time - start_time)

print(f"实际总帧数: {frame_count}")
print(f"实际帧率: {actual_fps:.2f} FPS")

cap.release()

3. 确认OpenCV已集成FFmpeg支持

检查你的OpenCV是否包含FFmpeg后端支持,运行以下代码查看编译信息:

print(cv2.getBuildInformation())

在输出中查找FFmpeg相关条目,若显示NO,则需要重新安装带FFmpeg的OpenCV版本。推荐使用conda安装:

conda install -c conda-forge opencv-python-headless

4. 修复视频元数据

若视频本身元数据损坏,可使用FFmpeg重新封装视频(不重新编码,速度快):

ffmpeg -i my_video_0.mkv -c copy fixed_video.mkv

之后用修复后的fixed_video.mkv重新测试读取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 18:42:12