【问题标题】:How to use codec type properly in NPM如何在 NPM 中正确使用编解码器类型
【发布时间】:2017-06-23 14:12:44
【问题描述】:

尝试在我的 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.

我的库是最新的,我只需要正确使用编解码器 libopus。 有什么建议吗?

 \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

【问题讨论】:

  • “但不工作”……会发生什么?生成的命令行是什么?为什么您的代码指定了某种格式和-vn,而您在开头给出的示例行没有那个?注意:在 ffmpeg 中,放置选项的位置很重要,即,它是输入选项还是输出选项。你的ffmpeg是什么版本的? (在命令行上运行时显示ffmpeg 命令的输出。)
  • @slhck,相应地更新了问题。 -vn 用于“无视频”。
  • 与我在your other question 中提出的建议类似,您需要弄清楚如何告诉 fluent-ffmpeg 您希望它使用 libopus 解码音频。我只是不确定如何使用 API fluent 定义来做到这一点。常规 ffmpeg 通过参数/选项顺序来理解它,因为你说 -acodec libopus before 你定义你的输入(或者至少我是这么理解的)。
  • 令我困惑的是:您在第一行显示了一个命令。然后,在您的代码中,添加一些与格式和-vn 无关的选项。如果你想展示一个例子,你应该确保它们展示的是同样的东西。当我问“生成的命令行是什么?”我想看看 fluent-ffmpeg 作为进程实际运行的内容以及输出的内容,即完整的、未剪切的命令行输出,就好像你在 shell 中运行它一样。我不确定如何使用 fluent-ffmpeg 做到这一点,但是当在 Stack Overflow 上询问有关 ffmpeg 的问题时,请尝试始终包含该内容。
  • @zero298 我明白了,谢谢你的信息。好建议,嗯。 (我一开始就不明白你为什么需要这样的库,因为它们只会增加已经很复杂的工具的复杂性。)

标签: ffmpeg fluent-ffmpeg


【解决方案1】:

根据the README,可以给进程添加输入选项:

proc.addInputOption('-acodec libopus');

在 ffmpeg 中放置选项的位置很重要。如果你把它放在-i 之前,它适用于那个特定的输入。如果你把它放在输出文件名之前,它适用于那个输出。

【讨论】:

  • 太棒了!就像你说的,知道你在用这些命令做什么是非常重要的。每个参数都有一个 location 。对于输入文件,这就是您设置编解码器的方式!奇迹般有效 。现在我需要弄清楚如何无缝减小输出音频文件的大小! :)) 我为此创建了另一个主题! stackoverflow.com/questions/44891840/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-17
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 2017-11-27
  • 2021-09-11
  • 1970-01-01
相关资源
最近更新 更多