Ffmpeg 如何在NPM中正确使用编解码器类型

Ffmpeg 如何在NPM中正确使用编解码器类型,ffmpeg,fluent-ffmpeg,Ffmpeg,Fluent Ffmpeg,尝试在我的npm项目中使用“-acodec libopus”,就像我在命令行中使用的一样,格式如下 ffmpeg -acodec libopus -i 1.webm 1.wav 这很好用!但我想在我的NPM项目中实现这一点 如何设置参数? 这是我拥有的,但不是工作。输出文件被破坏,导致音频文件的某些帧丢失。就好像有声音,然后就没有了。反之亦然 var proc = new ffmpeg({ source: file, nolog: false

尝试在我的npm项目中使用“-acodec libopus”,就像我在命令行中使用的一样,格式如下

ffmpeg -acodec libopus -i 1.webm 1.wav
这很好用!但我想在我的NPM项目中实现这一点

如何设置参数? 这是我拥有的,但不是工作。输出文件被破坏,导致音频文件的某些帧丢失。就好像有声音,然后就没有了。反之亦然

var proc = new ffmpeg({
        source: file,
        nolog: false       
    });


format = "opus"; // or could be wav as well!   


    proc.addOptions([
        '-f ' + format,          
        '-acodec libopus',
        '-vn'
    ]);
目的是无缝地从视频文件中获取音频文件

如果没有编解码器libopus,我会在命令提示符中出现以下错误,因此我认为我也应该在我的NPM项目中处理同样的问题

[opus @ 00000000006d4520] LBRR frames is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.


[opus @ 00000000006d4520] Error decoding a SILK frame.

[opus @ 00000000006d4520] Error decoding an Opus frame.
我的库是最新的,我只需要正确使用编解码器库。 有什么建议吗

 \node-js>ffmpeg -version
 ffmpeg version N-86175-g64ea4d1 Copyright (c) 2000-2017 the FFmpeg 
 developers
 built with gcc 6.3.0 (GCC)

Output in command line;
xtranscribe transcodeWatson: file : ./data/that/2.webm
progress 62.625273103421605%
progress 100.01224534515762%
SAVED - transcodeWatson : .mp3
out of transcode!
fileSizeInBytes  : 16284033
根据,您可以向流程添加输入选项:

proc.addInputOption('-acodec libopus');
在ffmpeg中放置选项的位置很重要。如果将它放在
-i
之前,它将应用于该特定输入。如果将其放在输出文件名之前,它将应用于该输出。

根据,您可以向流程添加输入选项:

proc.addInputOption('-acodec libopus');

在ffmpeg中放置选项的位置很重要。如果将它放在
-i
之前,它将应用于该特定输入。如果将其放在输出文件名之前,它将应用于该输出。

“但不工作”…会发生什么?生成的命令行是什么?为什么您的代码指定了某种格式和
-vn
,而您在开头给出的示例行却没有这样的格式?注意:在ffmpeg中,放置选项的位置很重要,即是输入选项还是输出选项。您的ffmpeg版本是什么?(在命令行上运行时显示
ffmpeg
命令的输出。)@slhck相应地更新了问题-vn用于“无视频”。类似于我在中提出的建议,您需要弄清楚如何告诉fluent ffmpeg,您希望它使用libopus解码音频。我只是不知道如何使用API fluent定义来实现这一点。常规ffmpeg通过参数/选项顺序来理解它,因为在定义输入之前你说了
-acodec libopus
(或者至少我是这样理解的)。让我困惑的是:你在第一行显示了一个命令。然后,在代码中添加一些与格式和
-vn
无关的选项。如果你想展示一个例子,你应该确保他们展示了相同的东西。当我问“生成的命令行是什么?”时,我想看看fluent ffmpeg作为一个进程实际运行的是什么,以及它输出的是什么,即完整的、未剪切的命令行输出,就像在shell中运行一样。我不知道如何使用fluent ffmpeg实现这一点,但在询问有关ffmpeg堆栈溢出的问题时,请尽量将其包括在内。@zero298我明白了,谢谢您提供的信息。好建议,是的。(我从来都不明白为什么一开始你会需要这样的库,因为它们只是给一个已经很复杂的工具增加了复杂性。)“但不起作用”…发生了什么?生成的命令行是什么?为什么您的代码指定了某种格式和
-vn
,而您在开头给出的示例行却没有这样的格式?注意:在ffmpeg中,放置选项的位置很重要,即是输入选项还是输出选项。您的ffmpeg版本是什么?(在命令行上运行时显示
ffmpeg
命令的输出。)@slhck相应地更新了问题-vn用于“无视频”。类似于我在中提出的建议,您需要弄清楚如何告诉fluent ffmpeg,您希望它使用libopus解码音频。我只是不知道如何使用API fluent定义来实现这一点。常规ffmpeg通过参数/选项顺序来理解它,因为在定义输入之前你说了
-acodec libopus
(或者至少我是这样理解的)。让我困惑的是:你在第一行显示了一个命令。然后,在代码中添加一些与格式和
-vn
无关的选项。如果你想展示一个例子,你应该确保他们展示了相同的东西。当我问“生成的命令行是什么?”时,我想看看fluent ffmpeg作为一个进程实际运行的是什么,以及它输出的是什么,即完整的、未剪切的命令行输出,就像在shell中运行一样。我不知道如何使用fluent ffmpeg实现这一点,但在询问有关ffmpeg堆栈溢出的问题时,请尽量将其包括在内。@zero298我明白了,谢谢您提供的信息。好建议,是的。(我从来都不明白为什么你一开始就需要这样的库,因为它们只是给一个已经很复杂的工具增加了复杂性。)太棒了!就像你说的,知道你在用这些命令做什么是非常重要的。每个参数都有一个位置。对于输入文件,这就是设置编解码器的方式!工作起来很有魅力。现在我需要弄清楚如何无缝地减小输出音频文件的大小!:)我为此创建了另一个主题!令人惊叹的!就像你说的,知道你在用这些命令做什么是非常重要的。每个参数都有一个位置。对于输入文件,这就是设置编解码器的方式!工作起来很有魅力。现在我需要弄清楚如何无缝地减小输出音频文件的大小!:)我为此创建了另一个主题!