chatgpt驱动的视频卡顿分析.md

大家好,我是烤鸭:

   最近在尝试做视频卡顿分析,对python不是特别了解。以前也没感觉GPT有能好用,这次用了一下,真的是有点牛了,起码可以节省半天的工作量。使用的是百度AI-文心一言,感觉还是比较好用的。

卡顿分析的方式

尽量模拟肉眼感观,通过对比不同帧画面,来确认是否有卡顿出现,直接问AI吧。

在这里插入图片描述

在这里插入图片描述

不够直观的话,再加个框框。

在这里插入图片描述

第一版代码:

import cv2

# 打开视频文件
cap = cv2.VideoCapture('video.mp4')

# 逐帧读取视频
while cap.isOpened():
    ret, frame = cap.read()

    # 如果读取到帧,则进行比较
    if ret:
        # 比较当前帧与前一帧的差异
        diff = cv2.absdiff(frame, prev_frame)

        # 设定差异阈值
        threshold = 100

        # 如果差异小于阈值,认为没有卡顿
        if cv2.countNonZero(diff) < threshold:
            # 统计没有卡顿的帧数,并在当前帧周围添加绿色外框
            non_jerky_frames += 1
            cv2.rectangle(frame, (0, 0), (frame.shape[1] - 1, frame.shape[0] - 1), (0, 255, 0), 2)
        else:
            # 否则认为有卡顿,并在当前帧周围添加红色外框
            jerky_frames += 1
            cv2.rectangle(frame, (0, 0), (frame.shape[1] - 1, frame.shape[0] - 1), (0, 0, 255), 2)

        # 将当前帧保存为前一帧,用于下一次比较
        prev_frame = frame.copy()

    # 读取下一帧
    else:
        break

# 关闭视频文件,显示结果和添加外框的视频帧
cap.release()
cv2.imshow('Video Frame', frame)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 计算卡顿率
jerky_rate = jerky_frames / (jerky_frames + non_jerky_frames) * 100
print('卡顿率为:', jerky_rate, '%')

在这里插入图片描述

变量没有定义,也可以自动修正。

完整代码

import cv2
import time

def videoCap(url, frame_series_count):
    # 打开视频文件
    cap = cv2.VideoCapture(url)
    frame_rate = cap.get(cv2.CAP_PROP_FPS)
    if frame_rate > 100:
        frame_rate = 30
    else:
        frame_rate = 60
    print("frame_rate", frame_rate)
    non_jerky_frames = 0
    jerky_frames = 0
    prev_frame = 0

    # 逐帧读取视频
    while cap.isOpened():
        ret, frame = cap.read()

        # 如果读取到帧,则进行比较
        if ret:
            gray_roi_list = []

            # 将指定区域转换为灰度图像
            gray_roi = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
            gray_roi_list.append(gray_roi)
            # 比较当前帧与前一帧的差异
            diff = cv2.absdiff(frame, prev_frame)
            scaled_abs_diff = cv2.normalize(diff, None, 0, 255, cv2.NORM_MINMAX)
            # 设定差异阈值
            threshold = 1.5
            diff_intensity = 0.0
            print(diff.mean())
            # 如果差异大于阈值,认为没有卡顿
            if scaled_abs_diff.mean() > threshold:
                # 统计没有卡顿的帧数,并在当前帧周围添加绿色外框
                non_jerky_frames += 1
                cv2.rectangle(frame, (0, 0), (frame.shape[1] - 1, frame.shape[0] - 1), (0, 255, 0), 2)
            else:
                # 否则认为有卡顿,并在当前帧周围添加红色外框
                jerky_frames += 1
                cv2.rectangle(frame, (0, 0), (frame.shape[1] - 1, frame.shape[0] - 1), (0, 0, 255), 2)

            # 将当前帧保存为前一帧,用于下一次比较
            prev_frame = frame.copy()

            # 关闭视频文件,显示结果和添加外框的视频帧
            cv2.imshow('Video Frame', frame)
            if cv2.waitKey(frame_rate) & 0xFF == ord('q'):
                break

        # 读取下一帧
        else:
            break

    cap.release()
    cv2.destroyAllWindows()

    # 计算卡顿率
    jerky_rate = jerky_frames / (jerky_frames + non_jerky_frames) * 100
    print('卡顿率为:', jerky_rate, '%')


# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    videoCap('C:\\Users\\xxxx\\Desktop\\xxxc\\test\\1.mkv', 1)

实现的效果就是对比当前画面帧是否有变化,如果有不动的话就加个红框(认为是卡顿)。

效果演示

在这里插入图片描述

文章参考

https://blog.csdn.net/cangqiongxiaoye/article/details/126334385

https://www.cnblogs.com/Tdazheng/p/13608737.html

https://blog.csdn.net/juzicode00/article/details/120934559

https://blog.csdn.net/weixin_54977011/article/details/120208280

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烤鸭的世界我们不懂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值