FFmpeg命令行怎么实现画中画

发布时间:2021-10-21 14:43:00 作者:柒染
来源:亿速云 阅读:957
# FFmpeg命令行怎么实现画中画

画中画(Picture-in-Picture, PiP)是视频编辑中常见的特效,通过FFmpeg命令行工具可以高效实现这一效果。本文将介绍两种典型实现方法:基础叠加法和复杂布局法。

---

## 一、基础叠加法(固定位置)

```bash
ffmpeg -i main.mp4 -i sub.mp4 -filter_complex \
"[1:v]scale=iw/4:ih/4 [pip]; \
[0:v][pip]overlay=W-w-10:H-h-10:enable='between(t,5,20)'" \
-c:a copy output.mp4

参数解析: 1. scale=iw/4:ih/4 将子视频缩小为原尺寸1/4 2. overlay=W-w-10:H-h-10 定位到主视频右下角(距右边/底边10像素) 3. enable='between(t,5,20)' 控制仅在5-20秒显示画中画 4. -c:a copy 直接复制音频流避免重编码


二、复杂布局法(动态调整)

ffmpeg -i bg.mp4 -i fg1.mp4 -i fg2.mp4 -filter_complex \
"[1:v]scale=320:240,setpts=PTS-STARTPTS [top]; \
[2:v]scale=480:360,setpts=PTS-STARTPTS [bottom]; \
[0:v][top]overlay=x=10:y=10:shortest=1[tmp]; \
[tmp][bottom]overlay=x=main_w-overlay_w-10:y=main_h-overlay_h-10" \
-c:v libx264 -preset fast output.mp4

高级特性: - 同时叠加多个子视频 - shortest=1 使输出时长与最短输入一致 - 使用绝对坐标(x/y)精确定位 - 动态计算位置(main_w-overlay_w


三、实用技巧

  1. 透明通道支持: 若子视频含alpha通道,可直接叠加透明元素:

    ffmpeg -i main.mp4 -i overlay.png -filter_complex \
    "[1:v]format=rgba,scale=300:-1[ov];[0:v][ov]overlay=10:10" output.mp4
    
  2. 动态移动效果: 通过表达式实现动画:

    overlay=x='if(gte(t,2), 100+(t-2)*20, NAN)':y=50
    
  3. 音频混合

    -filter_complex "amix=inputs=2:duration=shortest"
    

注意事项

  1. 建议先对子视频进行预裁剪(trim/setpts)减少处理量
  2. 使用-preset ultrafast可加速测试过程
  3. 复杂场景建议先用ffplay预览效果:
    
    ffplay -f lavfi "movie=main.mp4[m];movie=sub.mp4[s];[m][s]overlay"
    

通过灵活组合FFmpeg的滤镜链,可以实现从简单到专业的各种画中画效果。 “`

注:实际使用时需根据视频分辨率调整缩放比例和坐标值,建议先通过ffprobe获取视频尺寸信息。

推荐阅读:
  1. ffmpeg使用
  2. 利用ffmpeg命令行转压视频示例代码

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

ffmpeg

上一篇:有关String源码知识点总结

下一篇:如何掌握IntelliJ IDEA

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》