【问题标题】:Pass options containing spaces to ffmpeg using fluent-ffmpeg使用 fluent-ffmpeg 将包含空格的选项传递给 ffmpeg
【发布时间】:2018-08-04 15:02:00
【问题描述】:

我正在编写一个 Node 脚本,它使用 fluent-ffmpeg 复制和重新标记我的一些 MP4 文件

它不适用于任何包含空格的元数据。进行复制/标记的代码如下所示:

const ffmpeg = require('fluent-ffmpeg');

const inputFilename = 'path/to/original.m4a';
const outputFilename = 'path/to/new.m4a';

const options = [
    '-metadata', 'artist=Someone',
    '-metadata', 'album=Some title',
    // ...etc
];

ffmpeg(inputFilename)
  .outputOptions(options)
  .saveToFile(outputFilename);

这会导致错误:

events.js:183
      throw er; // Unhandled 'error' event

An error occurred: ffmpeg exited with code 1: title: Invalid argument

我尝试将Some title 放在单引号、双引号和不带引号中。我试过逃避其中的空间。我尝试将选项数组作为单个选项而不是元组传递,例如:'-metadata album="Some title"' - 但无论我尝试什么,当有空格时它仍然会引发错误。

(可能需要注意这是在 Windows 上)

谁能建议一种让它工作的方法?

【问题讨论】:

    标签: javascript node.js ffmpeg escaping fluent-ffmpeg


    【解决方案1】:

    我解决了! (或者至少,我找到了一种解决方法——我相信问题是由fluent-ffmpeg 中的错误引起的)

    只需在包含空格的选项的末尾添加一个额外的空格。所以,这一行:

    '-metadata', 'album=Some title',
    

    变成这样:

    '-metadata', 'album=Some title ',
    

    似乎在传递给ffmpeg 时会忽略终端空间,即它不会出现在生成的文件的元数据中。

    【解决方案2】:

    我注意到一个类似的问题,但不是在 Windows 上,只有在 Linux 上。我通过 Lazarus/FPC GUI 发送命令行。我以这种方式引用 titre.Text 中的空格:

    如果 changemeta.Checked 则 chmeta := '-metadata title=' + quote + titre.Text + 引用 + ' -metadata:s:v:0 语言=' + VLang.Text + ' -metadata:s:a:0 语言=' + ALang.Text + ' '

    变量 'quote' 被定义为 '"',在 Windows 上,整个标题被正确插入到元数据中,但在 Linux 上,它显示为带有引号的“Some title”。更改为单引号会给出 'Some title ' 在单引号中,插入空格会在右引号之前插入一个空格,删除引号会导致错误。

    也许一个肮脏的解决方法是创建一个用不可破坏的空格替换空格的函数,但这并不令人满意,并且可能在某些播放器中显示错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-18
      • 2020-02-23
      • 2011-07-21
      • 2017-01-10
      • 1970-01-01
      • 1970-01-01
      • 2016-10-04
      相关资源
      最近更新 更多