合并多个音频和视频文件
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
. 之前添加输出选项
我是 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
. 之前添加输出选项