You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用melt.exe实现可调控大小位置的画中画(PiP)视频叠加?

实现Melt画中画(PiP):命令行脚本与手动MLT XML创建指南

我经常用Melt处理视频批量任务,画中画是很常用的效果,下面分两部分给你详细解答:

一、用Melt命令行直接实现画中画

Melt实现画中画的核心思路是多轨道叠加,给上层叠加视频添加geometry滤镜(同时控制大小和位置),或者分开用resize+mov滤镜。geometry更高效,推荐优先使用。

基础示例:固定大小位置的画中画

假设你有主视频main.mp4,叠加视频overlay.mp4,要把叠加视频缩放到原大小的30%,放在主视频右上角(距离顶部10%,右侧30%的位置),并且叠加视频在主视频的第5秒到第15秒显示:

melt main.mp4 -track overlay.mp4 in=5 out=15 -filter geometry=0.3:0.3:70%:10% -consumer avformat:output.mp4

参数解释:

  • -track overlay.mp4:添加叠加轨道,将overlay.mp4放在主轨道上方
  • in=5 out=15:指定叠加视频在主时间线上的显示区间(单位:秒)
  • geometry=0.3:0.3:70%:10%:width_ratio:height_ratio:x_pos:y_pos
    • 0.3:0.3:叠加视频缩放到原大小的30%(保持宽高比,只写一个值也可以,比如0.3::70%:10%)
    • 70%:10%:x轴位置为主视频宽度的70%(相当于右侧留30%),y轴位置为主视频高度的10%(顶部留10%)
  • -consumer avformat:output.mp4:指定输出格式和文件名

进阶:控制叠加视频自身的入出点

如果叠加视频不需要完整使用,而是从自身的第2秒开始,到第12秒结束,同时在主时间线的5-15秒显示:

melt main.mp4 -track overlay.mp4 in=5 out=15 clip_in=2 clip_out=12 -filter geometry=0.3:0.3:70%:10% -consumer avformat:output.mp4

这里clip_in=2 clip_out=12是叠加视频自身的时间区间(单位:秒),和主时间线的in/out区分开。

用像素精确控制位置大小

如果主视频分辨率是1920x1080,想把叠加视频缩放到640x360,放在右上角(x=1920-640=1280,y=50像素):

melt main.mp4 -track overlay.mp4 in=5 out=15 -filter geometry=640:360:1280:50 -consumer avformat:output.mp4

二、手动创建MLT XML文件(xxx.mlt)

MLT文件是XML格式的项目文件,Shotcut生成的就是这类文件。你可以直接编写XML来定义画中画效果,核心结构包括:producer(媒体源)、playlist(轨道内容)、tractor(时间线,整合轨道和滤镜)、consumer(输出配置)。

对应命令行示例的MLT文件(pip.mlt)

<mlt>
  <!-- 1. 定义主视频媒体源 -->
  <producer id="main_video">
    <property name="resource">main.mp4</property>
    <!-- length可以留空,Melt会自动识别;也可以手动填毫秒数,比如10000表示10秒 -->
    <property name="length">0</property>
  </producer>

  <!-- 2. 定义叠加视频媒体源(自身入出点:2秒到12秒,即2000-12000毫秒) -->
  <producer id="overlay_video" in="2000" out="12000">
    <property name="resource">overlay.mp4</property>
  </producer>

  <!-- 3. 主轨道播放列表:使用完整主视频 -->
  <playlist id="main_track">
    <entry producer="main_video" in="0" out="0"/>
  </playlist>

  <!-- 4. 叠加轨道播放列表:在主时间线5-15秒(5000-15000毫秒)显示 -->
  <playlist id="overlay_track">
    <entry producer="overlay_video" in="5000" out="15000"/>
  </playlist>

  <!-- 5. 时间线:整合轨道并添加滤镜 -->
  <tractor id="main_timeline">
    <multitrack>
      <playlist id="main_track"/>
      <playlist id="overlay_track"/>
    </multitrack>
    <!-- 给叠加轨道添加geometry滤镜 -->
    <filter producer="overlay_track">
      <property name="service">geometry</property>
      <property name="argument">0.3:0.3:70%:10%</property>
    </filter>
  </tractor>

  <!-- 6. 输出配置 -->
  <consumer producer="main_timeline">
    <property name="resource">output.mp4</property>
    <property name="service">avformat</property>
    <property name="vcodec">libx264</property>
    <property name="acodec">aac</property>
    <property name="preset">medium</property>
    <property name="crf">23</property>
  </consumer>
</mlt>

关键参数说明

  • 时间单位:所有in/out属性都是毫秒(1秒=1000毫秒)
  • producer的in/out:媒体源自身的裁剪区间
  • playlist entry的in/out:该媒体在时间线上的显示区间
  • geometry滤镜的argument:和命令行格式完全一致,支持百分比或像素值
  • 运行MLT文件:直接用melt pip.mlt即可渲染输出

对比Shotcut生成的XML

Shotcut生成的MLT文件结构和上面类似,只是会多一些Shotcut特定的UI配置属性(比如窗口位置、历史记录等),核心的producer、playlist、filter部分是通用的,你可以参考它的结构来调整自己的手动XML。

内容的提问来源于stack exchange,提问作者bigZack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:33:13