You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Deepstream SDK读取视频并导出JPG格式帧(含代码需求)

实现读取视频输出JPG帧的代码示例

DeepStream Python 版本

该版本利用DeepStream的硬件加速编解码能力,适合同时需要执行AI推理+抽帧存图的场景:

import gi
gi.require_version('Gst', '1.0')
from gi.repository import Gst, GObject
import pyds

# 初始化GStreamer
Gst.init(None)

# 构建Pipeline,根据你的需求修改输入uri和输出路径
pipeline_desc = """
uridecodebin uri=file:///home/user/test_video.mp4 name=src
src. ! nvv4l2decoder ! nvvidconv ! video/x-raw,format=I420 ! jpegenc quality=85 ! multifilesink location=/home/user/output/frame_%06d.jpg
"""

pipeline = Gst.parse_launch(pipeline_desc)

# 启动pipeline
pipeline.set_state(Gst.State.PLAYING)

# 等待运行结束或错误
bus = pipeline.get_bus()
msg = bus.timed_pop_filtered(Gst.CLOCK_TIME_NONE, Gst.MessageType.ERROR | Gst.MessageType.EOS)

# 资源释放
pipeline.set_state(Gst.State.NULL)

如果需要在抽帧的同时执行目标检测等推理操作,只需要在nvv4l2decoder后插入nvstreammux + nvinfer组件即可

原生GStreamer Python 版本

无DeepStream依赖,适合仅需抽帧存图的轻量场景:

import gi
gi.require_version('Gst', '1.0')
from gi.repository import Gst

Gst.init(None)

# 可调整framerate参数控制抽帧频率,比如加videorate ! video/x-raw,framerate=1/1 表示每秒抽1帧
pipeline_desc = """
filesrc location=/home/user/test_video.mp4 ! qtdemux ! h264parse ! avdec_h264 ! videoconvert ! jpegenc quality=85 ! multifilesink location=/home/user/output/frame_%06d.jpg
"""

pipeline = Gst.parse_launch(pipeline_desc)
pipeline.set_state(Gst.State.PLAYING)

bus = pipeline.get_bus()
msg = bus.timed_pop_filtered(Gst.CLOCK_TIME_NONE, Gst.MessageType.ERROR | Gst.MessageType.EOS)

pipeline.set_state(Gst.State.NULL)

原生GStreamer CPP 版本

#include <gst/gst.h>

int main(int argc, char *argv[]) {
    GstElement *pipeline;
    GstBus *bus;
    GstMessage *msg;

    gst_init(&argc, &argv);

    // 修改输入输出路径即可使用
    const gchar *pipeline_desc = "filesrc location=/home/user/test_video.mp4 ! qtdemux ! h264parse ! avdec_h264 ! videoconvert ! jpegenc quality=85 ! multifilesink location=/home/user/output/frame_%06d.jpg";
    pipeline = gst_parse_launch(pipeline_desc, NULL);

    gst_element_set_state(pipeline, GST_STATE_PLAYING);

    bus = gst_element_get_bus(pipeline);
    msg = gst_bus_timed_pop_filtered(bus, GST_CLOCK_TIME_NONE, (GstMessageType)(GST_MESSAGE_ERROR | GST_MESSAGE_EOS));

    if (msg != NULL)
        gst_message_unref(msg);
    gst_object_unref(bus);
    gst_element_set_state(pipeline, GST_STATE_NULL);
    gst_object_unref(pipeline);
    return 0;
}
运行注意事项
  • DeepStream版本需要提前安装对应版本的DeepStream SDK和NVIDIA驱动,确保硬件加速编解码组件可用
  • 原生GStreamer版本需要提前安装基础插件包:gstreamer1.0-plugins-base、gstreamer1.0-plugins-good、gstreamer1.0-plugins-bad
  • 若需要控制抽帧频率,可在pipeline中插入videorate组件,例如加入videorate ! video/x-raw,framerate=1/1表示每秒仅抽取1帧
  • 输出路径需要提前创建,否则会出现写入失败的问题

内容的提问来源于stack exchange,提问作者devl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 19:18:03