过去几天我一直在研究 FFMPEG...所以请原谅我的知识匮乏。现在还处于早期阶段。
我需要将 3 个视频元素合并在一起,并使其中一个视频在特定时间成为叠加层。
介绍.mp4
主视频.mp4
尾板.mp4
我需要介绍.mp4用螺栓固定在主视频.mp4然后在比赛结束前 20 秒主视频.mp4,我需要尾板.mp4视频被固定到序列中并接管帧。当这种情况发生时,我需要主视频.mp4叠加在左上角并通过过渡继续无缝播放。
我还需要播放主视频的音频直到视频结束。
将会有很多主视频.mp4这些文件将单独应用,并且这些视频的长度将始终不同。我希望有一种方法可以过渡到尾板.mp4发生在文件结束前 20 秒左右。
我大致在理论上了解需要做什么,但是由于我对这个世界还很陌生,我真的不确定如何将如此复杂的东西拼凑在一起。
如果有人能帮助我,我将不胜感激!
非常感谢!
答案1
虚拟分割主视频,结束前 20 秒。如果视频 60 秒,则分割为 40 秒。为音频添加了第 5 个输入
ffmpeg \
-i "intro.mkv" \
-to 40 -i "main_60sec.mkv" \
-ss 40 -i "main_60sec.mkv" \
-i "endboard.mkv" \
-i "main_60sec.mkv" \
-filter_complex "
[0:v][1:v]concat=n=2:v=1:a=0[1v];
[2:v]scale=iw/2:-2[2v];
[3:v][2v]overlay[3v];
[1v][3v]concat=n=2:v=1:a=0;
[0:a][4:a]concat=n=2:v=0:a=1
" output.mp4 -y
或使用 trim:
ffmpeg \
-i "intro.mp4" \
-i "main_60sec.mp4" \
-i "end.mp4" \
-filter_complex "
[1:v]trim=duration=40,setpts=PTS-STARTPTS[m1];
[1:v]trim=start=40,setpts=PTS-STARTPTS[m2];
[0:v][m1]concat=n=2:v=1:a=0[v1];
[m2]scale=iw/2:-2[m2];
[2:v][m2]overlay[v2];
[v1][v2]concat=n=2:v=1:a=0;
[0:a][1:a]concat=n=2:v=0:a=1
" output.mp4 -y