我目前正在开发一个实用程序,用于从云端提取音频和视频文件并通过 FFMPEG 将它们合并在一起。由于我是 FFMPEG 的新手,因此在将视频连接与视频和音频延迟相结合时,我遇到了一些问题。
目前,如果只有 1 个视频文件并且需要将其与多个文件合并,我有一个有效的 FFMPEG 参数。
ffmpeg -i input1.mkv -i input1.mka -i input2.mka -i input3.mka -i input4.mka -filter_complex "[1:a]adelay=0s:all=1[a1pad];[2:a]adelay=20s:all=1[a2pad];[3:a]adelay=30s:all=1[a3pad];[4:a]adelay=40s:all=1[a4pad];[a1pad][a2pad][a3pad][a4pad]amix=inputs=4:weights=1|1|1|1[aout]" -map [aout] -map 0:0 output4.mkv
您在此处看到的延迟是通过从最早创建的音频或视频文件的开始时间中减去每个文件的开始时间来确定的。我知道如果我想创建多个视频的水平堆栈,我只需执行以下操作:
ffmpeg -i input1.mkv -i input1.mka -i input2.mkv -i input2.mka -i input3.mka -i input4.mka
-filter_complex
"[2:v]tpad=start_duration=120:color=black[vpad];
[3:a]adelay=120000:all=1[a2pad];
[4:a]adelay=180000:all=1[a3pad];
[5:a]adelay=200000:all=1[a4pad];
[0:v][vpad]hstack=inputs=2[vout];
[1:a][a2pad][a3pad][a4pad]amix=inputs=4:weights=1|1|1|1[aout]"
-map [vout] -map [aout]
output.mkv
但我想要做的是既保留音频和视频文件的延迟,又连接(而不是堆叠)这些视频,我该怎么做呢?