gpt4 book ai didi

ffmpeg - 如何让Gstreamer只返回关键帧?

转载 作者:行者123 更新时间:2023-12-02 08:53:30 36 4
gpt4 key购买 nike

gstreamer 管道中,我试图弄清楚是否有办法指定我只需要 RTSP 流中的关键帧

ffmpeg中,您可以使用-skip_frame nokey标志来做到这一点。例如:

ffmpeg -skip_frame nokey -i rtsp://184.72.239.149/vod/mp4:BigBuckBunny_175k.mov -qscale 0 -r 1/1 帧%03d.jpg

读取 RTSP feed 的相应 gstreamer 命令如下所示:

gst-launch-1.0 rtspsrc location=rtsp://184.72.239.149/vod/mp4:BigBuckBunny_175k.mov !解码器!视频率! “视频/x-raw,帧速率=1/1”!视频转换!自动视频接收器

有谁知道是否可以要求 gstreamer 仅返回关键帧?

最佳答案

花了几天时间寻找这个问题的完整答案后,我最终找到了一个解决方案,它为我提供了我正在寻找的 rtsp 处理能力。

以下是 Python 中管道的差异,从处理每个 RTSP 帧过渡到仅处理关键帧。

https://github.com/ambianic/ambianic-edge/pull/171/files#diff-f89415777c559bba294250e788230c5e

首先注册流启动总线事件:

Gst.MessageType.STREAM_START

当流处理开始时触发。当此事件发生时,请求寻找下一个关键帧。

当请求完成时,管道会触发我们需要监听的下一个总线事件:

Gst.MessageType.ASYNC_DONE

最后,这是关键帧搜索请求本身:

    def _gst_seek_next_keyframe(self):
found, pos_int = self.gst_pipeline.query_position(Gst.Format.TIME)
if not found:
log.warning('Gst current pipeline position not found.')
return
rate = 1.0 # keep rate close to real time
flags = \
Gst.SeekFlags.FLUSH | Gst.SeekFlags.KEY_UNIT | \
Gst.SeekFlags.TRICKMODE | Gst.SeekFlags.SNAP_AFTER | \
Gst.SeekFlags.TRICKMODE_KEY_UNITS | \
Gst.SeekFlags.TRICKMODE_NO_AUDIO
is_event_handled = self.gst_pipeline.seek(
rate,
Gst.Format.TIME,
flags,
Gst.SeekType.SET, pos_int,
Gst.SeekType.END, 0)

关于ffmpeg - 如何让Gstreamer只返回关键帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51307975/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com