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

使用FFmpeg添加字幕叠加时出现“No Output pad”错误求助

错误原因分析

  1. 滤镜链语法错误:原滤镜链中[1][v]overlay=-100:320[vid][2]overlay[out]部分,[vid]输出后未用分号分隔后续滤镜,直接拼接[2]overlay导致FFmpeg无法识别[2]的关联逻辑,触发pad匹配错误。
  2. 字幕滤镜误用:ASS字幕不能用overlay滤镜加载,overlay仅用于叠加视频/图像层,ASS字幕需要使用专门的subtitles滤镜处理。

修正后的实现方案

调整后的滤镜链

[0]scale=iw/1.5:ih/1.5,setsar=1[v];[1][v]overlay=-100:320[vid];[vid]subtitles='{subtitles_file}'[out]

滤镜链拆解:

  • [0]scale=iw/1.5:ih/1.5,setsar=1[v]:对原视频(输入流0)缩放并设置像素宽高比,输出标记为[v]
  • [1][v]overlay=-100:320[vid]:将缩放后的视频[v]叠加到背景图(输入流1)上,输出标记为[vid]
  • [vid]subtitles='{subtitles_file}'[out]:给叠加后的视频[vid]添加ASS字幕,最终输出标记为[out]

修正后的代码

try:
    subprocess.check_call([
        '/opt/ffmpeg',
        '-i', source_file,
        '-i', padding_image_file,
        '-filter_complex',
        f'[0]scale=iw/1.5:ih/1.5,setsar=1[v];[1][v]overlay=-100:320[vid];[vid]subtitles={subtitles_file}[out]',
        '-map', '[out]',
        '-c:a', 'copy', '-crf', '20', '-preset', 'fast', '-movflags', '+faststart',
        '-y', output_file
    ])
except subprocess.CalledProcessError as e:
    print(f"FFmpeg执行失败: {e}")

关键调整说明

  • 移除了原代码中多余的-i subtitles_file参数,subtitles滤镜可直接读取本地字幕文件路径,无需将字幕作为输入流引入
  • 添加-map '[out]'明确指定输出流,避免FFmpeg自动选择流时出现异常
  • 若字幕文件路径包含空格或特殊字符,需给路径添加单引号,即subtitles='{subtitles_file}'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 16:20:20