Как правильно использовать тип кодека в NPM

Попытка использовать «-acodec libopus» в моем проекте npm, как я использую в командной строке, как в следующем формате;

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'
    ]);

Цель состоит в том, чтобы легко извлечь аудиофайл из видеофайла.

Без codec 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

person shamaleyte    schedule 23.06.2017    source источник
comment
но не работает… что происходит? Что такое сгенерированная командная строка? Почему в вашем коде указан какой-то формат и -vn, а в строке примера, которую вы дали в начале, этого нет? Примечание. В ffmpeg важно, где размещается параметр, т. е. является ли он параметром ввода или вывода. Какая у вас версия ffmpeg? (Покажите вывод вашей команды ffmpeg при запуске в командной строке.)   -  person slhck    schedule 03.07.2017
comment
@slhck, соответственно обновил вопрос. -vn не используется для видео.   -  person shamaleyte    schedule 03.07.2017
comment
Подобно предложению, которое я сделал в вашем другом вопросе, вам нужно выяснить, как сообщить fluent-ffmpeg, что вы этого хотите. для декодирования аудио с помощью libopus. Я просто не уверен, как это сделать с помощью API fluent. Обычный ffmpeg понимает это через порядок аргументов/опций, поскольку вы говорите -acodec libopus прежде чем вы определяете свой ввод (или, по крайней мере, так я это понял).   -  person zero298    schedule 03.07.2017
comment
Что меня смутило: вы показываете команду в первой строке. Затем в свой код вы добавляете несколько несвязанных опций, касающихся формата и -vn. Если вы хотите показать пример, вы должны убедиться, что они показывают одно и то же. Когда я спрашиваю: «Что такое сгенерированная командная строка?» Я хотел увидеть, что fluent-ffmpeg на самом деле работает как процесс и что он выводит, то есть полный, неразрезанный вывод командной строки, как если бы вы запускали его в оболочке. Я не знаю, как это сделать с помощью fluent-ffmpeg, но, задавая вопросы о Stack Overflow о ffmpeg, старайтесь всегда указывать это.   -  person slhck    schedule 03.07.2017
comment
@slhck Думаю, это моя вина. В его связанном вопросе я предоставлял необработанные команды ffmpeg, так как я не знаком с fluent-ffmpeg. Чтобы выполнить команду -vn (нет видео), автор должен использовать API: noVideo().   -  person zero298    schedule 03.07.2017
comment
@zero298 Понятно, спасибо за информацию. Хорошее предложение, да. (Я никогда не понимал, зачем вообще нужны такие библиотеки, потому что они только усложняют и без того сложный инструмент.)   -  person slhck    schedule 03.07.2017


Ответы (1)


Согласно README, вы можете добавить в процесс параметры ввода:

proc.addInputOption('-acodec libopus');

Имеет значение, где вы размещаете опцию в ffmpeg. Если вы поместите его перед -i, он будет применяться к этому конкретному вводу. Если вы поместите его перед именем выходного файла, оно будет применяться к этому выводу.

person slhck    schedule 03.07.2017
comment
Потрясающий! Как вы сказали, очень важно знать, что вы делаете с этими командами. Каждый параметр имеет местоположение. И для входного файла именно так вы установили кодек! Работает как шарм. Теперь мне нужно выяснить, как легко уменьшить размер выходного аудиофайла! :)) Я для этого создал еще одну тему! stackoverflow.com/questions/44891840/ - person shamaleyte; 03.07.2017