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

FFmpeg filter_complex_script调用movie滤镜无法使用输入文件问题

问题背景

我尝试使用FFmpeg而非GUI编辑器剪辑视频素材。

以下可正常运行的示例功能为读取PNG文件,将缩放后的视频叠加在该图片之上:

ffmpeg -y \
 -loop 1 -i 'Title.png' \
 -i 'Presentation.mp4' \
 -filter_complex_script 'my.nodes'  \
 -map "[video]" -map 1:a -codec:a copy output.mkv

其中 my.nodes 文件内容如下:

[1:v]scale=430:240[a];
[1:v]scale=1280:720[b];
[0:v][a]overlay=0:0[c];
[c][b]overlay=overlay_w*2:overlay_h:shortest=1[video]

我不希望通过数字索引(如1:v等)指代输入文件,想要使用movie滤镜作为源滤镜直接在滤镜配置里引入文件,对应调用方式如下:

ffmpeg -y \
 -filter_complex_script 'my_improved.nodes'  \
 -map "[video]" output.mkv

其中 my_improved.nodes 文件内容如下:

movie=Title.png[title];
movie=Presentation.mp4[talk];
[talk]scale=430:240[a];
[talk]scale=1280:720[b];
[title][a]overlay=0:0[c];
[c][b]overlay=overlay_w*2:overlay_h:shortest=1[video]

运行该命令时出现如下报错:

Invalid file index 0 in filtergraph description movie=Title.png[title];
movie=Presentation.mp4[talk];
[talk]scale=430:240[a];
[talk]scale=1280:720[b];
[title][a]overlay=0:0[c];
[c][b]overlay=overlay_w*2:overlay_h:shortest=1[video]
.

解决方案

报错来自两个配置疏漏:

  • 原本通过-loop 1给背景PNG设置的循环效果,在改用movie滤镜引入文件时没有配置,单帧图片无法匹配视频时长。
  • 调用命令没有传入任何-i输入项时,滤镜中加载视频的movie滤镜默认仅读取视频流,不会自动加载音频轨,同时需要显式指定音频源映射。

修正后的滤镜脚本my_improved.nodes内容:

movie=Title.png:loop=0,format=rgba[title];
movie=Presentation.mp4[talk];
amovie=Presentation.mp4[aout];
[talk]scale=430:240[a];
[talk]scale=1280:720[b];
[title][a]overlay=0:0[c];
[c][b]overlay=overlay_w*2:overlay_h:shortest=1[video]

对应执行命令:

ffmpeg -y \
 -filter_complex_script 'my_improved.nodes'  \
 -map "[video]" -map "[aout]" -c:a copy output.mkv

配置说明:

  • 给图片源添加loop=0参数实现无限循环,和原命令-loop 1效果一致,配合overlay滤镜的shortest=1参数,会在主视频播放结束时自动终止编码,不会无限运行。
  • 音频轨单独用amovie滤镜加载,直接映射输出即可保留原命令的音频流复制逻辑,不需要重新编码音频。
  • 如果文件名包含空格、冒号等特殊字符,用单引号包裹文件名即可,例如movie='My Presentation.mp4'[talk]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:01:06