我想将工作 FFmpeg 命令转换为 GStreamer 管道,以从 RTSP 流中提取图像。
ffmpeg -hide_banner -v error -rtsp_transport tcp -stimeout 10000000 -i 'rtsp://{domain}/Streaming/tracks/101?starttime=20220831T103000Z&endtime=20220831T103010Z' -vframes 1 -y image.jpg
这是我尝试转换的 GStreamer 管道:
gst-launch-1.0 rtspsrc location="rtsp://{domain}/Streaming/tracks/101?starttime=20220831T103000Z&endtime=20220831T103010Z" max-rtcp-rtp-time-diff=0 latency=0 is_live=true drop-on-latency=true ! decodebin3 ! videoconvert ! jpegenc snapshot=true ! filesink location="/mnt/c/images/frame3.jpg"
我无法让它工作。它给出了错误的时间戳图像,并且 Gstreamer 管道在提取图像后从未停止过,就像无限循环一样工作。
但是 FFmpeg 命令工作完美,提取了正确的图像,并在成功提取图像后退出命令。
您可以尝试使用 num-buffers=1 添加 imagefreeze :
gst-launch-1.0 rtspsrc protocols=tcp location="rtsp://{domain}/Streaming/tracks/101?starttime=20220831T103000Z&endtime=20220831T103010Z" max-rtcp-rtp-time-diff=0 latency=0 is-live=true drop-on-latency=true ! decodebin ! videoconvert ! imagefreeze num-buffers=1 ! jpegenc snapshot=true ! filesink location="/mnt/c/images/frame3.jpg"
试试这个
gst-launch-1.0 -e rtspsrc location="rtsp://{domain}/Streaming/tracks/101?starttime=20220831T103000Z&endtime=20220831T103010Z" max-rtcp-rtp-time-diff=0 延迟=0 is_live=true 下降-on-latency=true !解码bin3!视频转换! jpegenc快照=真!多文件接收器位置=“/mnt/c/images/frame3.jpg”最大文件=1