我是新使用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 (https://stackoverflow.com/questions/11552565/vertically-or-horizontally-stack-mosaic-several-videos-using-ffmpeg)
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调用来分别组合每个输入的音频和视频文件吗?谢谢你的帮助!
发布于 2022-03-23 00:11:00
试试这个:
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
tpad
作为视频,而adelay
用于音频。在这里,您将看到120和180年代延迟是如何编码的。对于tpad
,您也可以设置填充视频帧的颜色。adelay
必须为所有频道指定延迟。假设音频是立体声的,您需要添加我在评论中已经解释过的all=1
all=1
。我增加了weights
选项,以防你决定改变混合平衡。[vout]
和一个音频流[aout]
。然后使用-map
选项将它们分配给输出文件,每个选项一个。[vout]
和[aout]
都将持续到最长的2个流结束(较短的音频流退出,而较短的视频流保存其最后一个帧)(如果这是一个问题,请描述情况和所需的情况。-vcodec copy
和-acodec copy
是不去的。我已经删除它们以使用.mkv
文件的默认编解码器,但是如果您需要自定义它,则在output.mkv
.之前添加输出选项
https://stackoverflow.com/questions/71575519
复制相似问题