使用 ffmpeg 的几个网络输入的视频叠加

Video overlay of several network inputs using ffmpeg

我正在使用 FFMPEG 库编写我的第一个程序,不幸的是它不是一个简单的程序。

我需要的是:

目前我正在使用 ffmpeg.exe 工具来尝试实现此功能。我的命令如下所示:

.\ffmpeg.exe -threads auto -y -i input0 -i input1 \
    -filter_complex "[0:v]scale=1920x1080[v0];[1:v]scale=480x270[v1];[v0][v1]overlay=1440:810[v2]" \
    -map [v2] -map 0:a -c:v libx264 -preset ultrafast -c:a copy output.mp4

input0input1 是文件时,结果输出是正确的,另一方面,当输入是 udp 流时,结果输出不正确,视频大部分时间冻结.

文件输入是使用以下命令从 udp 流生成的:

.\ffmpeg.exe -threads auto -y -i "udp://@ip:port" -c copy -f mpegts input1.mpg

Question 1。 为什么上面的命令不能为 udp 流产生良好的输出? ffmpeg.exe.

的原始流和该流的转储之间有什么区别

Question 2。 是否有一些 argument/s 可以修复命令?

Question 3。 需要什么样的 logic/algorithm 才能正确叠加两个网络流。

可能 ffmpeg 正在丢弃一些数据,因为您没有足够的缓冲区。

我认为您需要放置这两个标志(将其应用于输入)以实现您的目标:

-thread_queue_size 512 -rtbufsize 50M

I.E.(使用您输入的命令):

    .\ffmpeg.exe -threads auto -y -i input0 -i input1 \
    -thread_queue_size 512 -rtbufsize 50M \
    -filter_complex "[0:v]scale=1920x1080[v0];[1:v]scale=480x270[v1];[v0][v1]overlay=1440:810[v2]" \
    -map [v2] -map 0:a -c:v libx264 -preset ultrafast -c:a copy output.mp4

它对我有用。