我正在编写一个Node脚本,它使用fluent-ffmpeg复制和重新标记我的一些fluent-ffmpeg文件。
它不适用于任何包含空格的元数据。执行复制/标记的代码如下所示:
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放在单引号、双引号和无引号中。我试过逃离里面的空间。我尝试将options数组作为单个选项而不是元组传递,例如:'-metadata album="Some title"' --但是无论我尝试什么,当有空格时,它仍然会抛出一个错误。
(值得注意的是,这是在Windows上进行的)
有人能提出办法让它发挥作用吗?
发布于 2018-03-07 08:05:33
我解决了!(或者至少,我找到了一个解决办法-我相信这个问题是由fluent-ffmpeg中的一个bug引起的)
只需在包含空格的选项末尾添加一个额外的空间即可。所以,这一行:
'-metadata', 'album=Some title',变成这样:
'-metadata', 'album=Some title ',当传递给ffmpeg时,终端空间似乎会被忽略,也就是说,它不会出现在生成的文件的元数据中。
发布于 2018-03-25 14:19:47
我注意到了一个类似的问题,但在Windows上没有,只有Linux。我通过Lazarus/FPC GUI发送命令行。我以这种方式引用titre.Text中的空格:
如果changemeta.Checked那么chmeta :=‘-元数据title=’+title=+ titre.Text +title=+ -metadata:s:v:0 language=+ VLang.Text + -metadata:s:a:0 language=+ ALang.Text +‘
变量‘引号’被定义为‘,在Windows上,整个标题被正确地插入到元数据中,但是在Linux上,它显示为带有引号的“一些标题”。更改单引号在单引号中给出’一些标题‘,插入空格在结束引号之前插入一个空格,删除引号会导致错误。
也许一个肮脏的解决办法是创建一个函数,用不可破坏的空间来代替空间,但这并不令人满意,而且可能会在一些玩家中错误地显示出来。
https://stackoverflow.com/questions/48966767
复制相似问题