在创建帖子之前,我在网上搜索了几次,但没有找到解决我的问题的方法。
我需要从 2 个 ipcam 捕获两个 rtsp 流,以便稍后使用 opencv 进行分析。我使用的是 raspberry,计算能力低下不允许我使用 opencv 实时对两个 1080p 视频流进行分析。所以我想用 raspberry 捕获这两个流,稍后用更强大的机器进行分析。
用于捕获的命令:
ffmpeg -stimeout 2000000 -re -rtsp_transport tcp -i rtsp://192.168.1.131/h264 -c copy -f mp4 -y out1.mp4
ffmpeg -stimeout 2000000 -re -rtsp_transport tcp -i rtsp://192.168.1.132/h264 -c copy -f mp4 -y out2.mp4
问题是,两个文件 out1.mp4 和 out2.mp4 中捕获的两个 rtsp 流从未完全同步。延迟大约为 1 秒变量,对我来说是一个问题。我认为与摄像头通信的延迟会影响延迟。
我该如何解决这个问题?提前致谢。
答案1
尝试删除
-stimeout 2000000 -re -rtsp_transport tcp
ffmpeg 通常比我们能更好地解决问题!
使用设置视频点
-filter_complex "[0:v]setpts='(RTCTIME - RTCSTART) / (TB * 1000000)'[v1];[1:v]setpts='(RTCTIME - RTCSTART) / (TB * 1000000)'[v2]"
来自 ffmpeg 文档 https://ffmpeg.org/ffmpeg-filters.html#Examples-139:(有些文档说这个已经被弃用了,但我正在使用 11 月 27 日的版本并且它可以工作。)
然后你需要重新编码视频
-map '[v1]' -map '[v2]' -map a -c:v libx265 -c:a copy
因此,对于您的最后一个命令行,它看起来像这样:
ffmpeg -i rtsp://192.168.5.131/h264 \ -i rtsp://192.168.5.132/h264 \ -filter_complex \ "[0:v]setpts='(RTCTIME - RTCSTART) / (TB * 1000000)'[v1]; \ [1:v]setpts='(RTCTIME - RTCSTART) / (TB * 1000000)'[v2]" \ -map '[v1]' -map '[v2]' -map a -c:v libx264 -c:a copy -f mpegts -y out.ts
YMMV,但它与我便宜的中国 IP 摄像头兼容