合并多个音频和视频文件

Merge multiple audio and video files

我是 ffmpeg 的新手,我想做的是合并多个视频和音频文件并将它们显示在马赛克中。

我目前拥有的:

2个视频文件和2个音频文件,其中1个音频文件属于1个视频文件,而另一个音频文件属于另一个视频文件

input1.mkv
input1.mka
input2.mkv
input2.mka

我想要完成的事情

1. Combine input1.mkv with input1.mka and input2.mkv with input2.mka
2. I want to display input1.mkv and input2.mkv in a horizontal mosaic (
3. Input2.mkv should start 120 seconds after input1.mkv in output.mkv

通过多次调用组合的方式

ffmpeg -i input1.mkv -i input1.mka -map 0:0 -map 1:0 input1.mkv
ffmpeg -i input2.mkv -i input2.mka -map 0:0 -map 1:0 input2.mkv   

以上可以一次调用完成吗?

我目前拥有的命令行参数:

ffmpeg -i input1.mkv -i input1.mka -itsoffset 120 -i input2.mkv -i input2.mka -filter_complex hstack=inputs=2 -map 0:0 -map 1:0 -map 2:0 -map 3:0 -acodec copy -vcodec copy output.mkv

我得到的错误:

Streamcopy requested for output stream 0:0, which is fed from a complex filtergraph. Filtering and streamcopy cannot be used together.

我是否正确地完成了我要完成的任务?我应该从 C# 执行多个 ffmpegs 调用来分别组合每个输入的音频和视频文件吗?感谢您的帮助!

试试这个:

ffmpeg -i input1.mkv -i input1.mka -i input2.mkv -i input2.mka -i input3.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]; \
     [0:v][vpad]hstack=inputs=2[vout]; \
     [1:a][a2pad][a3pad]amix=inputs=3:weights=1|1|1[aout]" \
  -map [vout] -map [aout] \
  output.mkv
  • 要延迟第二组 A/V 文件,您对视频使用 tpad,对音频使用 adelay。在这里您可以看到 120 秒和 180 秒的延迟是如何编码的。对于 tpad,您还可以设置填充视频帧的颜色。
  • [edit] adelay 必须为所有通道指定延迟。假设音频是立体声,您需要添加 all=1 选项。
  • amix 我已经在评论里解释过了。我已经添加了 weights 选项,以防您决定更改混合平衡。
  • filtergraph 输出一个视频流 [vout] 和一个音频流 [aout]。然后,您使用 -map 选项将它们分配给输出文件,每个选项一个。
  • 顺便说一句,[vout][aout] 都将持续到 2 个流中最长的流结束(较短的音频流退出,而较短的视频流保留其最后一帧)如果这是一个问题,请描述情况和期望。
  • 您不能复制过滤图的输出流。所以 -vcodec copy-acodec copy 是行不通的。我已经删除它们以使用 .mkv 文件的默认编解码器,但如果您需要对其进行自定义,请在 output.mkv.
  • 之前添加输出选项