假设我有 3个视频文件和 2 个音频文件:v1.mp4
,,,,,。v2.mp4
v3.mp4
a2.mp3
a1.mp3
通常人们希望将音频“叠加”到视频上。
如果人们真正想要的是以下内容;
- v1 播放,无音频
- a1 播放音频,不播放视频
- v2 播放,无音频
- a2 播放音频,不播放视频
- v3 播放视频,无音频
所有内容都合并在一个 mp4 中。我的尝试都失败了,要么音频合并到视频中,要么视频损坏,要么编码时间过长。
最后,我想将这些视频流与空白且没有视频的“中间”部分连接在一起。我试过了
片段串联的复杂过滤器
color=black
。可以工作,但需要重新编码,而且速度很慢ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -filter_complex " color=black:s=1280x720:d=5[s1]; color=black:s=1280x720:d=10[s2]; color=black:s=1280x720:d=15[s3]; [0:v][s1][1:v][s2][2:v][s3]concat=n=6:v=1:a=0[aout]" -map [aout] -y output.mp4
从头开始创建一堆
color=black
mp4 并使用合并文件。视频变绿并且时间框架出现问题。ffmpeg -t 60 -s 640x480 -f rawvideo -pix_fmt rgb24 -r 25 -i /dev/zero empty.mpeg ffmpeg -f concat -i mylist.txt -c copy test.mp4
(列表基本上是1.mp4
,,,,)empty.mp4
2.mp4
empty.mp4
3.mp4
创建一堆只有静音的 mp3 并将它们合并在一起。
ffmpeg -f concat -i mylist.txt -c copy test.mp4
(但 mylist 包含silence.mp3
文件而不是empty.mp4
每个文件之间)
答案1
下面的命令可以完成这个任务。它从头开始创建三个静音音频和两个黑色视频流,然后通过两个concat
过滤器将它们与其他流合并。(假设所有输入的持续时间为 15 秒)。
ffmpeg -t 15 -f lavfi -i anullsrc -i a1.mp3 -t 15 -f lavfi -i anullsrc -i a2.mp3 -t 15 -f lavfi -i anullsrc -i v1.mp4 -f lavfi -i color=black:s=1280x720:r=25:d=15 -i v2.mp4 -f lavfi -i color=black:s=1280x720:r=25:d=15 -i v3.mp4 -filter_complex [0:a][1:a][2:a][3:a][4:a]concat=n=5:v=0:a=1[aud];[5:v][6:v][7:v][8:v][9:v]concat=n=5:v=1:a=0[vid] -c:v libx264 -c:a libmp3lame -map [vid] -map [aud] output.mp4