我有三个罗技Brio摄像头,我使用OpenCV从不同Angular 同时录制视频。为了实现这一点,我打开了三个线程,并在每个线程中创建一个捕获和VideoWriter对象,以捕获视频帧并将其写入文件。我将每个相机的FPS(每秒帧数)设置为60。然而,当我回顾录音时,我注意到视频之间的帧率存在差异。具体地,两个相机一致地保持其帧速率,而第三相机随着时间逐渐降低其帧速率。
例如,在
camera1_frames_time:2019 - 02 - 16 00:00:00
camera2_frames_time:2019 - 02 - 16 00:00:00
camera3_frames_time:2019 - 01 - 16 00:00:00
尽管我努力解决这个问题,但我已经尝试了几种可能的修复方法,但都没有成功:
- 我试图通过更换摄像机电缆来解决问题。
- 我还试验了不同的USB端口,看看这是否会有所不同。
- 为了将问题隔离到特定的相机,我购买了一台新相机,并在有问题的相机旁边进行了测试,但帧率仍然下降。
- 尝试用两个摄像头拍摄(“有问题”和好的一个,FPS速率仍然下降)
- 我甚至进行了测试,只用有问题的相机拍摄视频,但帧率继续下降。
- 在最后一次尝试中,我用一个全新的相机替换了有问题的相机,但问题仍然存在。
- 此外,我使用OBS(开放广播软件)将相机配置重置为默认设置,看看这是否能解决问题。
我有一个运行的时钟,显示毫秒,这有助于我调试帧速率。该脚本在Ubuntu 20上使用Python 3,OpenCV www.example.com运行4.7.0.72。
def run(self) -> None:
"""Thread runnable function."""
self.capture = cv2.VideoCapture(int(self.src_id))
self.capture.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'))
self.capture.set(cv2.CAP_PROP_FRAME_WIDTH, 1080);
self.capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 720);
self.capture.set(cv2.CAP_PROP_FPS, 60)
self.capture.set(cv2.CAP_PROP_BUFFERSIZE, 10)
width = int(self.capture.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(self.capture.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = self.capture.get(cv2.CAP_PROP_FPS)
file_name = f"recording-{self.src_id}.avi"
out = cv2.VideoWriter(
file_name,
cv2.VideoWriter_fourcc("M", "J", "P", "G"),
fps,
(width, height)
)
if self.capture.isOpened():
prev_frame_ts = 0
while not self.done:
(self.status, self.frame) = self.capture.read()
if self.status:
out.write(self.frame)
else:
print("could not read frame, Return")
break
else:
print("Failed to open camera. source id:" + str(self.src_id))
self.capture.release()
字符串
在投入了相当多的时间进行故障排除之后,我发现自己已经没有办法解决这个持续存在的问题了。令人困惑的是,虽然其中两个摄像机准确地捕获帧,但第三个摄像机的帧速率随着时间的推移而逐渐下降。我正在寻找这种差异背后的潜在原因。
1条答案
按热度按时间7gcisfzg1#
似乎相机之间存在差异。通过调整多个配置设置,我能够解决“有问题”的相机的FPS较低的问题。具体来说,修改曝光和增益速率配置值使我能够实现接近60 FPS的帧速率。