如何在Fluent FFMPEG中运行此复杂的过滤器?

时间:2019-09-10 00:04:40

标签: ffmpeg fluent-ffmpeg

我正在尝试将以下复杂过滤器转换为Fluent FFMPEG命令,但我无法弄清楚映射的工作原理。

ffmpeg -i audio.mp3 -filter_complex "[0:a]showfreqs=s=200x100:colors=white|white,format=yuv420p[vid]" -map "[vid]" -map 0:a video.mp4

这是我到目前为止的内容,但是我收到关于“ vid”流的错误。

ffmpeg()
    .input("audio.mp3")
    .audioCodec("aac")
    .audioBitrate("320")
    .complexFilter(
      {
        filter: "showfreqs",
        options: { s: "200x100" },
        inputs: "0:a",
      },
      {
        filter: "format",
        options: { pix_fmts: "yuv420p" },
        outputs: ["vid"],
      }
    )
    .outputOptions(['-map "[vid]"', "-map 0:a"])
    .save(spectrumTmp)

错误:ffmpeg exited with code 1: Stream map '"[vid]"' matches no streams. To ignore this, add a trailing '?' to the map.

如果我添加结尾的'?'在outputOptions中,我得到一个没有视频流的文件。

1 个答案:

答案 0 :(得分:1)

解决了这个问题。我的原始代码有三件事:

  1. complexFilter必须是一个对象数组,但缺少数组括号。
  2. 似乎您需要在fluent-ffmpeg中为链接过滤器明确指定输入和输出。
  3. 正如@llogan所指出的,我在outputOptions中遇到了一个报价问题

最终的工作代码:

ffmpeg()
    .input("audio.mp3")
    .audioCodec("aac")
    .audioBitrate("320")
    .complexFilter([
      {
        filter: "showfreqs",
        options: { s: "200x100" },
        inputs: "0:a",
        outputs: "[freqs]",
      },
      {
        filter: "format",
        options: { pix_fmts: "yuv420p" },
        inputs: "[freqs]",
        outputs: "[vid]",
      },
    ])
    .outputOptions(["-map [vid]", "-map 0:a"])
    .save(spectrumTmp)