如何使用 gstreamer / 关闭流从视频流中提取单帧

Ond*_*rej 5 shell command-line rtsp gstreamer

我需要从网络摄像头的视频流中取出一帧并将其写入文件。在 ffmpeg 中我可以这样做:

ffmpeg -i rtsp://10.6.101.40:554/video.3gp -t 1 img.png
Run Code Online (Sandbox Code Playgroud)

我的 GStreamer 命令:

gst-launch-1.0  rtspsrc location="rtsp://10.6.101.40:554/video.3gp" is_live=true ! decodebin ! jpegenc ! filesink location=img.jpg
Run Code Online (Sandbox Code Playgroud)

问题是,gstreamer进程一直运行并且没有结束。如何在文件写入后仅拍摄一帧并强制流关闭?是否可以从命令行执行此操作,或者我应该在 c/python 等中进行编码...

多谢。

par*_*y72 4

我能够做到这一点:

! jpegenc snapshot=TRUE
Run Code Online (Sandbox Code Playgroud)

请参阅jpegenc - 快照

但我的来源不同,所以你的里程可能会有所不同。

  • `rtph26xdepay` 有一个问题(由 `rtspsrc` 内部使用)https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/535 - 这意味着在这个问题得到解决之前,管道永远不会结束。我现在必须将它与旧版 gstreamer 一起使用,因此我将这个“hack”与 `identity` 元素一起使用: `gst-launch-1.0 rtspsrc location="rtsp://<url>" !解码器!jpegenc快照=真!身份错误-after=2!filesink location=image.jpeg`(请注意,您需要在第二个缓冲区之后发送错误,以便能够保存第一个缓冲区) (2认同)