2016-12-02 16 views
1

скажите, пожалуйста, как я могу отрезать аудиофайл с помощью node.js? Теперь я прочитал документацию для модуля ffmpeg, но не понимаю, как разрезать аудиофайл с помощью этого модуля. Я нашел этот код, но он выдает ошибку об ошибке: NaNКак я могу отрезать аудиофайл с помощью node.js

ffmpeg('music/ant.mp3') 
    .setStartTime('00:00:03') 
    .setDuration('10') 
    .output('music/ant.mp3') 
    .on('end', function(err) { 
     if(!err) 
     { 
      console.log('conversion Done'); 
     } 
    }) 
    .on('error', function(err){ 
     console.log('error: ', +err); 
    }).run(); 
+0

точно, как вы хотели разрезать аудиофайл? – nmnsud

+0

@nmnsud Я обновил вопрос. У меня есть время начала и окончания, мне нужно вырезать аудио в этот период. –

ответ

0

Не много информации здесь, но от взглядов его вы передаете строку в методы .setStartTime и .setDuration. NaN означает не число, если вы не знаете

'00: 00: 03 '- это строка, как и' 10 ', потому что вы ставите кавычки вокруг них. Даже если вы удалите кавычки из «00: 00: 03», он не сможет разобрать это число. Вероятно, вам нужно передать значение в виде некоторого целого числа, но это может быть не количество секунд, это может быть миллисекунды или таковые. Если бы были секунды, вы бы поставили «3» (без кавычек) или миллисекунды, вы бы поставили «3000» без кавычек. Кроме того, если единица времени, которая должна быть передана, не равна секундам, но миллисекундам или примерно так, вам, вероятно, придется изменить значение «10» (опять без кавычек) до «10000» (без кавычек) в течение миллисекунд и т. Д.

0

Возможно, вы можете использовать ffmpeg. Это основанная на командной строке, что отлично, поскольку она доступна, но подпроцессы иногда могут умереть. Вот интерфейс узла, который абстрагирует использование FFmpeg из командной строки вызывает: https://npmjs.org/package/ffmpeg

Ваших окончательные команд в командной строке, вероятно, выглядеть следующим образом:

ffmpeg -i long.mp3 -acodec copy -ss 00:00:00 -t 00:30:00 half1.mp3 
    ffmpeg -i long.mp3 -acodec copy -ss 00:30:00 -t 00:60:00 half2.mp3 

Этой команда состояния:

- -i: the input file is long.mp3 
- -acodec: use the audio codec  
- copy: we are making a copy 
- -ss: start time  
- -t: length  
- and finally the output file name 

Чтобы обрабатывать потенциально тайм-ауты/зависания процессов, вы должны «повторить попытку» и предоставить таймауты. Не знаете, насколько хорошо работают обратные вызовы. То есть они терпят неудачу должным образом в процессе, который зависает.

0

Я сделал это с помощью child_process

https://nodejs.org/api/child_process.html

const spawn = require('child_process').spawnSync; 

var ffmpeg = spawn('ffmpeg', [ 
    '-i', 
    filename, 
    '-acodec', 
    'copy', 
    '-ss', 
    ss, 
    '-t', 
    t, 
    output.mp3 
], { shell: true }); 

Несколько вещей, чтобы отметить:

  • Убедитесь, что у FFmpeg установлен, то нерест с нужной командой. Поместите аргументы в массив. spawn делает странные вещи с кавычками, но {shell:true} должен позаботиться об этом.

  • Создайте желаемый выходной каталог перед рукой или с помощью другого икры, потому что ffmpeg не создаст его для вас, если он еще не существует.

  • Проверьте процесс с этим:

    process.on('exit', (code, signal) => { 
        console.log(`ffmpeg exited with code ${code} and signal ${signal}`); 
    });