使用 ffmpeg 的几个网络输入的视频叠加
Video overlay of several network inputs using ffmpeg
我正在使用 FFMPEG
库编写我的第一个程序,不幸的是它不是一个简单的程序。
我需要的是:
- 捕获多个网络输入 (udp)。
- 解复用输入。
- 叠加视频流。
- 混合音频(或其他一些逻辑)。
- 对生成的流进行编码。
- 重新混合流并将结果写入文件。
目前我正在使用 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
当 input0
和 input1
是文件时,结果输出是正确的,另一方面,当输入是 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
它对我有用。
我正在使用 FFMPEG
库编写我的第一个程序,不幸的是它不是一个简单的程序。
我需要的是:
- 捕获多个网络输入 (udp)。
- 解复用输入。
- 叠加视频流。
- 混合音频(或其他一些逻辑)。
- 对生成的流进行编码。
- 重新混合流并将结果写入文件。
目前我正在使用 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
当 input0
和 input1
是文件时,结果输出是正确的,另一方面,当输入是 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
它对我有用。