使用 ffmpeg 将 4 个带延迟的视频并排组合在一起

使用 ffmpeg 将 4 个带延迟的视频并排组合在一起

我有至少 4 个来自meetecho/janus-gateway
Janus 制作的视频会议的视频,为每个用户创建两个 mjr 视频和音频文件,首先我将它们合并为一个 webm 文件,然后全部转换为 500*500 视频。
现在我尝试将这些视频像马赛克一样组合起来,并找到了以下代码:

ffmpeg -i 1.webm -i 2.webm -i 3.webm -i 4.webm \
-speed 8 -deadline realtime -filter_complex "[0]pad=2*iw:2*ih[l]; \
[1]setpts=PTS-STARTPTS+428/TB[1v]; [l][1v]overlay=x=W/2[a]; \
[2]setpts=PTS-STARTPTS+439/TB[2v]; [a][2v]overlay=y=H/2[b]; \
[3]setpts=PTS-STARTPTS+514/TB[3v]; [b][3v]overlay=y=H/2:x=W/2[v]; \
[1]adelay=428372|428372[1a]; \
[2]adelay=439999|439999[2a]; \
[3]adelay=514589|514589[3a]; \
[0][1a][2a][3a]amix=inputs=4[a]" \
-map "[v]" -map "[a]" merged.webm

我根据每个文件的创建日期时间计算了与第一个视频相关的延迟时间。

我的问题:

  1. 此代码不起作用!控制台冻结几分钟后,它显示以下行:

    已杀死 29 fps=0.1 q=0.0 大小= 1kB 时间=00:04:30.07 比特率= 0.0kbits/s 速度=0.896x

  2. 我没有弄清楚叠加前后字母的含义,[1v][2v][3v][l][a][b][v]……

答案1

不要多次使用覆盖,而是尝试对所有视频轨道使用“xstack”过滤器,您可以先延迟所有输入,然后将它们传送到 xstack 并制作自己的布局。

这里有一个如何使用带有 xstack 的管道制作马赛克的示例。

[ 和 ] 之间的符号含义仅仅是用于识别您的曲目的名称/ID。

如果像“scale”这样的过滤器被赋予一个输入,而您想用另一个过滤器处理其输出,您可以这样做:

-filter_complex "[0:v]scale=1920:1080[video_yourscaledoutput];[video_yourscaledoutput]your_next_filter=args[video_finaloutput]" -map "[video_finaloutput]" your_final_file.mp4

[0:v]这是您的第一个输入流的视频轨道的 ID,您可以按照您想要的方式命名其余部分:)

相关内容