在疫情期间,我们的合唱团指挥正在录制一段视频作为伴奏,然后每个合唱团成员(在家)戴着耳机听伴奏,一起唱歌,并把他们的声音和可爱的脸录成视频。我现在想把所有这些不同的视频合并成一个视频,所有成员都放在小窗格中,就像 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
在所有输入后添加(用计算值替换)。
替换nullsrc
为color
。对于 YUV 格式的帧,nullsrc 转换为深绿色画布。color
默认为黑色。