gpt4 book ai didi

python opencv videoWriter fps舍入

转载 作者:行者123 更新时间:2023-12-04 11:34:17 28 4
gpt4 key购买 nike

我正在尝试测量输入视频文件中的某些事件:“test.mp4”。这是通过分几个步骤处理视频来完成的,其中每个步骤对视频数据执行一些操作并将中间结果写入新的视频文件。

输入视频的fps为:29.42346629489295 fps

下面我写了一个脚本来测试这个问题。当我使用此脚本编写新文件时,输出文件中的 fps 会四舍五入为 29.0 fps,这就是问题所在。

import cv2
import sys

inputfilepath = "test.mp4"
outputfilepath = "testFps.mp4"

video = cv2.VideoCapture(inputfilepath)

fps = video.get(cv2.CAP_PROP_FPS)
framecount = int(video.get(cv2.CAP_PROP_FRAME_COUNT))
width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))

print("original fps: ", fps)
# fps = 29.4
print("writing fps: ", fps)

writer = cv2.VideoWriter(outputfilepath, 0x00000020, fps, (width, height))

for i in range(framecount):
success, image = video.read()
if not success:
break

writer.write(image)

writer.release()
video.release()

video = cv2.VideoCapture(outputfilepath)
fps = video.get(cv2.CAP_PROP_FPS)

# the next line will not print the same fps as I passed to cv2.VideoWriter(...) above.
print("output fps: ", fps)
video.release()

我试图为 fps 硬编码不同的值。似乎低于 29.5 fps 的所有内容都四舍五入到小数点零 (29 fps),而上面的所有内容都四舍五入到一位小数 (29.x fps)

所以我的问题是:

是否可以使用 mp4 格式获得任何 fps?

输出文件中实际使用的是哪个fps?

如何在输出文件中获得正确的 fps?

附加信息

我尝试了许多不同的值,范围从 28 fps 到 31 fps,并绘制了实际输出文件帧速率与预期的关系。这显示了某种分形行为,也许这个提示会激发这里的一些数学向导:)

expected vs actual framerate

expected vs actual framerate zoomed

最佳答案

OpenCV 使用一些工具包来编写。就我而言,在 iOS 上,OpenCV 使用 native AVFoundation 库。似乎 AVFoundation(或 OpenCV api)无法很好地处理具有许多有效数字的 fps 值,例如 29.7787878779,并且某些内容在 OpenCV 的 api 或 AVFoundation 中被错误地四舍五入。
为了解决这个问题,我在调用 VideoWriter::open 之前四舍五入了一些有效数字

normalizedFPS = round(1000.0 * normalizedFPS) / 1000.0;
希望它也适用于您!
我已经看到 30,000 用作时间刻度推荐,所以也许测试 1000.0 与 30,000.0

关于python opencv videoWriter fps舍入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49654051/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com