在保存图片时添加时间戳的代码修改

ChatGPT4o 使用 ChatGPT 4o 回答

问题:

更改以下代码,保存图片时加入时间戳 import gi import sys

导入 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 # 要保存的图片数量

修正 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=%03d_rpi_v3_imx477_cam{0}.jpeg".format(SENSOR_ID) )

创建 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 rece
回答:

要在保存图片时加入时间戳,可以通过修改 multifilesinklocation 属性来实现。我们可以使用 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 的形式。然后在 multifilesinklocation 属性中使用这个时间戳,以便每个保存的图片文件名中都包含