我想拿一个RSTP摄像头,将视频降到更低的速率(例如每5秒一帧),并将结果作为RTSP流提供。是否可以配置ffmpeg (或libffmpeg)来做这样的事情?
发布于 2022-04-08 10:21:03
是的,我们所要做的就是添加-r 0.2参数,并重新编码视频。
还建议添加-tune zerolatency或-g 1,以确保每个帧都是关键帧(在视频延迟相关的情况下需要这样做)。
示例:
从本地主机接收RTSP流,并以0.2fps (到具有不同端口的本地主机)进行流:
ffmpeg -rtsp_flags listen -rtsp_transport tcp -stimeout 1000000 -i rtsp://127.0.0.1:10000/live.stream -r 0.2 -vcodec libx264 -tune zerolatency -pix_fmt yuv420p -rtsp_transport tcp -f rtsp rtsp://127.0.0.1:20000/live.stream测试:
为了进行测试,我用FFmpeg (25 For的流合成视频)模拟了RTSP摄像机。
RTSP流由另一个FFmpeg进程捕获,该进程将速率降低到0.2fps。
该0.2fps视频被捕获和显示使用FFprobe。
测试是作为批处理文件实现的:
::Play the video for testing
start ffplay -rtsp_flags listen -rtsp_transport tcp -flags low_delay -vf setpts=0 -listen_timeout 1000000 rtsp://127.0.0.1:20000/live.stream
::Wait 5 seconds
ping 127.0.0.1 -n 5 > nul
::Capture the RTSP camera at 25fps, convert to 0.2fps (with re-encoding)
start ffmpeg -rtsp_flags listen -rtsp_transport tcp -stimeout 1000000 -i rtsp://127.0.0.1:10000/live.stream -r 0.2 -vcodec libx264 -tune zerolatency -pix_fmt yuv420p -rtsp_transport tcp -f rtsp rtsp://127.0.0.1:20000/live.stream
::Wait 5 seconds
ping 127.0.0.1 -n 5 > nul
::Simulate an RTSP camera at 25fps
ffmpeg -re -f lavfi -i testsrc=size=192x108:rate=25 -vcodec libx264 -pix_fmt yuv420p -g 30 -rtsp_transport tcp -f rtsp -muxdelay 0.1 rtsp://127.0.0.1:10000/live.stream它开始尴尬,并得到稳定后,几个帧。
(我们使用select滤波器解决这个问题)。
样本框架:






https://stackoverflow.com/questions/71774828
复制相似问题