Я пытаюсь программировать конвертер, который может взять любой источник видео и преобразовать его в mp3. MP3 должен быть сохранен на моем жестком диске или в буфере, чтобы отправить его по телеграмме.NodeJS - многопроцессорные процессы FFMPEG
Это хорошо работает, единственная проблема, с которой я столкнулся, заключается в том, что она может принимать только одно видео за раз, и я не знаю почему.
// IMPORTS
var fs = require('fs');
var https = require('https');
var child_process = require('child_process');
// EVENTEMITER (Not used so far)
var util = require('util');
var EventEmitter = require('events').EventEmitter;
// STREAMHANDLER
var StreamHandler = function(url, name){
// VARIABLES
self = this;
this.url = url;
this.name = name;
// CREATE FFMPEG PROCESS
var spawn = child_process.spawn;
var args = ['-i', 'pipe:0', '-f', 'mp3', '-ac', '2', '-ab', '128k', '-acodec', 'libmp3lame', 'pipe:1'];
this.ffmpeg = spawn('ffmpeg', args);
// GRAB STREAM
https.get(url, function(res) {
res.pipe(self.ffmpeg.stdin);
});
// WRITE TO FILE
this.ffmpeg.stdout.pipe(fs.createWriteStream(name));
//DEBUG
this.ffmpeg.stdout.on("data", function (data) {
console.error(self.name);
});
}
util.inherits(StreamHandler, EventEmitter);
// TESTING
var test1 = new StreamHandler(vidUrl, "test1.mp3");
test1.ffmpeg.on("exit", function (code, name, signal) {
console.log("Finished: " + test1.name);
});
var test2 = new StreamHandler(vidUrl, "test2.mp3");
test2.ffmpeg.on("exit", function (code, name, signal) {
console.log("Finished: " + test2.name);
});
Он пропускает test1.mp3 и только преобразует test2.mp3, но были созданы 2 FFmpeg процессы:
После test2.mp3 конвертируется другой FFmpeg поток остается открытым, но ничего не делает, и программа узла застряла в ожидании (я думаю, так), чтобы она что-то послала.
Я надеюсь, что кто-то может помочь мне :)
Спасибо. Посмотрим позже. Я действительно надеюсь, что кто-то еще знает, почему это не сработает, поэтому я могу уклониться от этой проблемы в будущем. – Alaska
@Alaska См. Вышеизложенное. –
Спасибо. Это сработало! – Alaska