一、背景
文接上回,在成功编译出 GStreamer 支持的cv2后,本文介绍如何使用GStreamer管道读取摄像头rtsp流,同时实现自定义码率的视频录制,有效控制视频体积。
二、代码及参数说明
1. 代码
import cv2
# 使用GStreamer管道
gst_str = (
'appsrc ! videoconvert ! x264enc bitrate=2000 speed-preset=ultrafast ! '
'video/x-h264,profile=baseline ! h264parse ! mp4mux ! filesink location=output.mp4'
)
# 打开摄像头,此处rtsp为摄像头的rtsp流地址
cap = cv2.VideoCapture(rtsp)
# 获取视频帧宽度和高度
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# 创建VideoWriter对象
out = cv2.VideoWriter(gst_str, cv2.CAP_GSTREAMER, 0, 30, (frame_width, frame_height), True)
while cap.isOpened():
ret, frame = cap.read()
if ret:
# 写入帧到视频文件
out.write(frame)
# 显示帧
cv2.imshow('frame', frame)
# 按q键退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
# 释放资源
cap.release()
out.release()
cv2.destroyAllWindows()
代码很简单,一看就懂,下面着重说一下部分参数的含义(以下来自 ChatGPT)
2. 参数说明
(1)gst_str
- appsrc:GStreamer 元素,用于从应用程序中接收数据。它将 OpenCV 捕获的帧输入到 GStreamer 管道中;
- videoconvert:GStreamer 元素,用于视频格式转换。它确保输入的视频帧格式与编码器兼容;
- x264enc:使用 x264 编码器对视频进行编码;<

最低0.47元/天 解锁文章
148

被折叠的 条评论
为什么被折叠?



