如何在ffmpeg中同步多个rtsp输入?

KOM*_*nds 6 ffmpeg rtmp

我正在使用 ffmpeg 将来自本地网络摄像机的多个 rtsp 流组合到单个输出中。在生成的视频中,视频不同步。

ffmpeg -loglevel warning \
        -f image2 -loop 1 \
        -i logo.png \
        -rtsp_transport tcp -thread_queue_size 1024 \
        -i "rtsp://10.0.0.1" \
        -rtsp_transport tcp -thread_queue_size 1024 \
        -i "rtsp://10.0.0.2" \
        -rtsp_transport tcp -thread_queue_size 1024 \
        -i "rtsp://10.0.0.3" \
        -filter_complex "[3:v][2:v][0:v][1:v]xstack=inputs=4:layout=0_0|w0_0|0_h0|w0_h0[v]" \
        -map "[v]" \
        -filter_complex "[1:a][1:a]amerge=inputs=2[aout]" -map "[aout]" \
        -vcodec libx264 -pix_fmt yuv420p -r 30 -g 60 \
        -preset fast -b:v 2400k -maxrate 4600k -bufsize 6000k \
        -acodec aac -ar 44100 -b:a 128k \
        -f flv "rtmp://live-api-s.facebook.com:80/rtmp/$STREAMKEY"

Run Code Online (Sandbox Code Playgroud)

如果我们以第一个输入 (0) (10.0.0.1) 为参考,第二个输入 (1) 最初大约提前 1000 毫秒,第三个输入 (2) 提前大约 2000 毫秒。看起来偏移量甚至会随着时间的推移而略微增加。

我尝试交换不同的输入(例如 10.0.0.3 输入 0,10.0.0.1 输入 2),然后 10.0.0.1 领先于 10.0.0.3。所以我认为这是 ffmpeg 以及它如何处理输入的问题。

如何同步输出中的不同来源?

avi*_*Che 7

尝试添加-fflags nobuffer -flags low_delay -strict experimental之前-i。由于没有参考帧,您可能会在开始时看到很少的损坏帧。