在疫情期间,我们的合唱团导演正在录制一段视频,即伴奏,然后每个合唱团成员(在家)都戴着耳机听伴奏,跟着唱,并将他们的声音和可爱的脸录制成视频。我现在想拍摄所有这些不同的视频,并将它们组合成一个视频,所有成员都在小窗格中,Brady Bunch 风格。当然,每个合唱团成员都有不同的硬件,所以音频电平都是不同的,需要标准化。当然,一个人将视频横向拍摄(纵向而不是横向),因此他们的视频必须在添加之前进行裁剪。
我已经让它大部分工作了,我的命令行看起来像这样(简化):
ffmpeg -y -i "Director.MOV"
-i "Member1.MOV"
-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[aud1];
[2:v] scale=960x540 [clip2];
[2:a]volume=1.1[aud2];
[base][clip0] overlay=shortest=1:x=0:y=0 [tmp0];
[tmp0][clip1] overlay=shortest=1:x=1148:y=0 [tmp1];
[tmp1][clip2] overlay=shortest=1:x=0:y=540 [tmp2];
[aud0][aud1][aud2]amix=inputs=3[a]
" -map "[tmp2]" -map "[a]" -c:v libx264 output.mkv"
这工作得很好。
现在是(希望是最终的)问题。每个人都在不同的时间点了“录制”按钮,所以视频在合并之前必须进行时移。
我尝试添加 -itsoffet ,如此处所述,但当然会偏移视频而不是音频。我尝试在此处提到的 STARTPTS 之后添加偏移量,并且再次仅偏移视频。我尝试使用此处提到的 asetpts 方法来抵消音频,但这似乎没有任何作用。
编辑
[0:v] setpts=PTS-STARTPTS-0.2/TB,scale=960x540 [clip0];
[0:a]volume=1.7066118239302597,asetpts=PTS-STARTPTS-0.2/TB[aud0];
[1:v] setpts=PTS-STARTPTS-3.2/TB,crop=1080:1000:0:920,scale=583x540 [clip1];
[1:a]volume=2.384951956074125,asetpts=PTS-STARTPTS-3.2/TB[aud1];
[2:v] setpts=PTS-STARTPTS,scale=960x540 [clip2];
[2:a]volume=1.1[aud2];
如何及时向前或向后移动视频,同时保持音频同步?
我尝试了另一个方向(为稍后开始的视频添加正偏移,而不是为较早开始的视频添加负偏移),只是为了看看会发生什么(看看 PTS-STARTPTS 是否不喜欢负数) ,也好不到哪里去——
[0:v] setpts=PTS-STARTPTS+3/TB,scale=960x540 [clip0];
[0:a]volume=1.7066118239302597,asetpts=PTS-STARTPTS+3/TB[aud0];
[1:v] setpts=PTS-STARTPTS,crop=1080:1000:0:920,scale=583x540 [clip1];
[1:a]volume=2.384951956074125[aud1];
[2:v] setpts=PTS-STARTPTS+3.2/TB,scale=960x540 [clip2];
[2:a]volume=1.1,asetpts=PTS-STARTPTS+3.2/TB[aud2];
[base][clip0] overlay=shortest=1:x=0:y=0 [tmp0];
[tmp0][clip1] overlay=shortest=1:x=1148:y=0 [tmp1];
[tmp1][clip2] overlay=shortest=1:x=0:y=540 [tmp2];
[aud0][aud1][aud2]amix=inputs=3[a]
编辑:ffmpeg -版本报告
ffmpeg version git-2020-08-07-fab00b0 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 10.2.1 (GCC) 20200805
这似乎是最新的。
itsoffset
也适用于音频;只是 amix 不尊重绝对时间戳。使用 aresample 以静音填充开头。我还建议您更改相对于最早开始视频的偏移量,因此所有偏移量都是正数。
overlay
对于延迟的流,必须进行更改以避免在播放开始之前显示冻结的第一帧。使用 ffmpeg 4.1 或更高版本。