使用 ffmpeg 同步两个 rtsp 流

使用 ffmpeg 同步两个 rtsp 流

在创建帖子之前,我在网上搜索了几次,但没有找到解决我的问题的方法。

我需要从 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 摄像头兼容

相关内容