背景:现在有2个mp4文件,一个文件分辨率是854x480,另一个是320x240,想要通过ffmpeg实现把多路视频流进行拼接,实现不同效果
overlay滤镜拼接多路视频流实现画中画效果
ffmpeg -i input_854x480.mp4 -i input_320x240.mp4 -filter_complex "[1:v]scale=240:-1,setsar=1[small]; [0:v][small]overlay=W-w-10:H-h-10:shortest=1" -c:v libx264 -preset fast -c:a copy output_overlay.mp4
overlay 滤镜将 320x240 的小视频作为画中画展示在右下角,如下图所示:

下面针对各个参数做解释:
- 缩放小视频(320x240 → 240x135)
bash
[1:v]scale=240:-1,setsar=1[small]
- scale=240:-1:将小视频宽度缩放到 240px,高度按比例自适应(原始宽高比 320:240=4:3 → 缩放后 240x135,保持 16:9)
- setsar=1:强制设置像素宽高比为 1:1(防止播放时变形)
- 叠加到主视频右下角
bash
[0:v][small]overlay=W-w-10:H-h-10:shortest=1
- W-w-10:X 坐标 = 主视频宽度 (854) - 小视频宽度 (240) - 右边距 (10px) → 854-240-10=604
- H-h-10:Y 坐标 = 主视频高度 (480) - 小视频高度 (135) - 下边距 (10px) → 480-135-10=335
- shortest=1:以最短的输入流时长为准(若两路视频时长不同)
- 其他参数
- c:a copy:直接复制主视频的音频流(若需混合两路音频,改用 amix 滤镜)
- -preset fast:平衡编码速度与压缩率