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

Node.js环境下使用fluent-ffmpeg添加多字幕的问题求助

问题根因

你多次传入-vf参数的写法不符合FFmpeg的参数规则,FFmpeg遇到重复的-vf参数时,只会保留最后一个生效,因此第一个字幕的渲染规则被覆盖,仅第二个字幕生效。

解决方案

根据你的需求可选择以下两种实现方案:

场景1:硬烧录多字幕到视频画面

这种场景下字幕会直接嵌入视频画面,无法被播放器关闭或切换,适合需要强制显示字幕的场景。
你需要将多个字幕滤镜合并到同一个-vf参数中,用逗号分隔即可,代码示例:

ffmpeg()
    .addInput("./sample3.mp4")
    .addInput("merged.wav")
    // 两个字幕滤镜合并为一个vf参数,先渲染114.srt再叠dd.srt,顺序可以根据需求调整
    .outputOptions(
      "-vf subtitles=./subt/114.srt:force_style='Alignment=10,FontName=QCF2604,Fontsize=18,MarginL=5,MarginV=25,Outline=0',subtitles=dd.srt:force_style='Alignment=1,FontName=QCF2604,Fontsize=18,MarginL=5,MarginV=25,Outline=0'"
    )
    .outputOptions("-shortest")
    .output("./test.mp4")
    .on("end", function () {
      console.log("conversion ended");
      callback(null);
    })
    .on("error", function (e) {
      console.log("error: ", e.code, e.msg, e);
      callback(e);
    })
    .run();

场景2:封装多软字幕轨道(对应你给出的原生FFmpeg命令效果)

这种场景下字幕是独立的轨道,用户可以在播放器中切换、关闭字幕,输出建议使用MKV格式(MP4对SRT软字幕的兼容性较差),代码示例:

ffmpeg()
    .addInput("./sample3.mp4") // 输入0:视频
    .addInput("merged.wav") // 输入1:音频
    .addInput("./subt/114.srt") // 输入2:第一个字幕
    .addInput("dd.srt") // 输入3:第二个字幕
    // 映射所有需要的流:视频、音频、两个字幕
    .outputOptions("-map 0:v -map 1:a -map 2 -map 3")
    // 编码设置:视频音频直接复制,字幕用srt编码
    .outputOptions("-c:v copy -c:a copy -c:s srt")
    // 设置字幕轨道语言元数据,可根据实际字幕语言修改
    .outputOptions("-metadata:s:s:0 language=chi")
    .outputOptions("-metadata:s:s:1 language=eng")
    .outputOptions("-shortest")
    // 软字幕建议输出为mkv格式
    .output("./test.mkv")
    .on("end", function () {
      console.log("conversion ended");
      callback(null);
    })
    .on("error", function (e) {
      console.log("error: ", e.code, e.msg, e);
      callback(e);
    })
    .run();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:36:08