【问题标题】:OPENCV: Extract the lifetime for a frame in a video with variable frame rateOPENCV:以可变帧速率提取视频中帧的生命周期
【发布时间】:2020-11-12 02:43:48
【问题描述】:

我正在使用 python OpenCV 从具有可变帧速率的视频文件中读取帧。

我需要了解帧之间的挂墙时间如何变化(即我希望能够在每一帧上写入时间戳)。我的理解是,底层视频格式存储每帧持续多长时间,即视频文件包含告诉视频播放器在移动到下一帧之前应该显示给定帧多长时间的信息。 p>

我想使用 python OpenCV 接口以编程方式访问这些数据。这可能看起来像的一个示例(不起作用)是:

import numpy as np
import cv2 as cv

cap = cv.VideoCapture('my_variable_frame_rate_video.mp4')

while cap.isOpened():
    ret, frame = cap.read()

    frame_length_ms = ret.frame_length()   # obviously doesn't work

    print("The length of the frame in ms is {}".format(frame_length_ms))

   # Should print: The length of the frame in ms is 23

不起作用的事情

  1. 从捕获设备读取源帧速率:

fps = cap.get(cv2.cv.CV_CAP_PROP_FPS)

  1. 计算总帧数:

fps = cap.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT)/total_length

这两个都不起作用,因为我们正在处理可变帧速率

【问题讨论】:

    标签: python opencv video-capture frame-rate


    【解决方案1】:

    一个想法可以是提取时间量并将其写入每一帧

    import cv2
    import time
    
    path="video.mp4"    
    video = cv2.VideoCapture(path);
    
    start = time.time()
    ret, frame = video.read()
    font = cv2.FONT_HERSHEY_SIMPLEX
    i = 0
    while ret:
        start = time.time()
        ret, frame = video.read()
        end = time.time()
        seconds = end - start
        cv2.putText(frame,str(seconds),(10,500), font, 4,(255,255,255),2,cv2.LINE_AA)
        cv2.imwrite(str(i)+".jpg", frame)
        i+=1
    
    video.release()
    

    【讨论】:

    • 感谢您的建议,但此代码测量捕获对象解码帧所需的时间 - 不知道帧应该持续多长时间,即在处理器较弱的较慢 PC 上,解码将花费更长的时间,但单个帧仍代表固定的真实时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多