更改以下代码,保存图片时加入时间戳 import gi import sys
gi.require_version('Gst', '1.0') from gi.repository import Gst
Gst.init(None)
SENSOR_ID = 0 # 0 表示 CAM0,1 表示 CAM1 FRAMERATE = 30 # 帧率 NUMBER_OF_SNAPSHOTS = 20 # 要保存的图片数量
pipeline_str = ( f"nvarguscamerasrc num-buffers={NUMBER_OF_SNAPSHOTS} sensor-id={SENSOR_ID} ! " f"video/x-raw(memory:NVMM),width=4032,height=3040,framerate={FRAMERATE}/1 ! " "nvjpegenc ! multifilesink location=%03d_rpi_v3_imx477_cam{0}.jpeg".format(SENSOR_ID) )
pipeline = Gst.parse_launch(pipeline_str)
pipeline.set_state(Gst.State.PLAYING)
bus = pipeline.get_bus() while True: message = bus.timed_pop_filtered( Gst.CLOCK_TIME_NONE, Gst.MessageType.EOS | Gst.MessageType.ERROR )
if message:
if message.type == Gst.MessageType.ERROR:
err, debug_info = message.parse_error()
print(f"Error rece
要在保存图片时加入时间戳,可以通过修改 multifilesink
的 location
属性来实现。我们可以使用 Python 的 datetime
模块来获取当前时间,并将其格式化为字符串。以下是修改后的代码:
import gi
import sys
from datetime import datetime
# 导入 GStreamer 库
gi.require_version('Gst', '1.0')
from gi.repository import Gst
# 初始化 GStreamer
Gst.init(None)
# 设置参数
SENSOR_ID = 0 # 0 表示 CAM0,1 表示 CAM1
FRAMERATE = 30 # 帧率
NUMBER_OF_SNAPSHOTS = 20 # 要保存的图片数量
# 获取当前时间并格式化为字符串
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
# 修正 GStreamer 管道字符串,注意 Python 的 f 字符串格式化
pipeline_str = (
f"nvarguscamerasrc num-buffers={NUMBER_OF_SNAPSHOTS} sensor-id={SENSOR_ID} ! "
f"video/x-raw(memory:NVMM),width=4032,height=3040,framerate={FRAMERATE}/1 ! "
"nvjpegenc ! multifilesink location={timestamp}_%03d_rpi_v3_imx477_cam{SENSOR_ID}.jpeg"
)
# 创建 GStreamer 管道
pipeline = Gst.parse_launch(pipeline_str)
# 启动管道
pipeline.set_state(Gst.State.PLAYING)
# 处理管道消息
bus = pipeline.get_bus()
while True:
message = bus.timed_pop_filtered(
Gst.CLOCK_TIME_NONE,
Gst.MessageType.EOS | Gst.MessageType.ERROR
)
if message:
if message.type == Gst.MessageType.ERROR:
err, debug_info = message.parse_error()
print(f"Error received from element {message.src.get_name()}: {err.message}")
print(f"Debugging information: {debug_info if debug_info else 'none'}")
break
# 停止管道
pipeline.set_state(Gst.State.NULL)
在这个修改后的代码中,我们使用 datetime.now().strftime("%Y%m%d_%H%M%S")
获取当前时间,并将其格式化为 YYYYMMDD_HHMMSS
的形式。然后在 multifilesink
的 location
属性中使用这个时间戳,以便每个保存的图片文件名中都包含