ffmpeg - 在窗格中添加多个视频,一个主轨道,如何给出偏移开始时间?

ffmpeg - 在窗格中添加多个视频,一个主轨道,如何给出偏移开始时间?

在疫情期间,我们的合唱团指挥正在录制一段视频作为伴奏,然后每个合唱团成员(在家)戴着耳机听伴奏,一起唱歌,并把他们的声音和可爱的脸录成视频。我现在想把所有这些不同的视频合并成一个视频,所有成员都放在小窗格中,就像 Brady Bunch 风格一样。当然,每个合唱团成员的硬件都不同,所以音频级别都不同,需要标准化。当然,有一个人把视频拍成了横向的(纵向而不是横向),所以他们的视频在添加进去之前必须先裁剪一下。

此外,我需要将导演的视频定义为“主”流。假设导演的视频开头有 3 秒的无意义内容,这些内容是不必要的。我想在这段无意义内容之后立即开始播放最终视频。然后,如果合唱团成员 #1 在导演之后 0.4 秒开始播放她的视频,我想丢弃她视频的前 2.6 秒。如果合唱团成员 #2 完全无视指示,在导演之后 4.3 秒开始播放他的视频,那么我需要他的窗格在最终视频中空白 1.3 秒。

最后,如果某些视频需要裁剪,导致形状不正确,我会用这种可爱的绿色填充空白处。有没有办法定义背景颜色,或者甚至有某种背景图像,让其部分只显示在没有视频流的地方?

我问过上一个问题现在正在使用这个命令行:

ffmpeg -y -i "Director.MOV"
  -itsoffset 5 -i "Member1.MOV"
  -itsoffset 10 -i "Member2.mp4"
  -filter_complex "
  nullsrc=size=1920x1080 [base];
  [0:v] scale=960x540 [clip0];
  [0:a]volume=1[aud0];
  [1:v] crop=1080:1000:0:920,scale=583x540 [clip1];
  [1:a]volume=2,aresample=async=1:first_pts=0[aud1];
  [2:v] scale=960x540 [clip2];
  [2:a]volume=1.1,aresample=async=1:first_pts=0[aud2];
  [base][clip0] overlay=shortest=1:x=0:y=0 [tmp0];
  [tmp0][clip1] overlay=shortest=1:x=1148:y=0:enable='gt(t\,5)' [tmp1];
  [tmp1][clip2] overlay=shortest=1:x=0:y=540:enable='gt(t\,10) [tmp2];
  [aud0][aud1][aud2]amix=inputs=3[a]
" -map "[tmp2]" -map "[a]" -c:v libx264 output.mkv"

但这会导致第一个人的脸独自出现在屏幕上几秒钟,然后其他成员随机加入,最后是导演。我想要一个美好的“干净的开始”。

答案1

假设导演视频中添加的偏移量为 X 秒。假设她视频前面的无意义部分为 Y 秒。然后,您将-ss X+Y在所有输入后添加(用计算值替换)。

替换nullsrccolor。对于 YUV 格式的帧,nullsrc 转换为深绿色画布。color默认为黑色。

相关内容