Как использовать ffmpeg в nodejs для объединения .m4a и .m4v в .mkv - PullRequest
0 голосов
/ 29 июня 2019

Я использую приведенный ниже скрипт для загрузки потокового видео vimeo.

Проблема в том, что скрипт загружает различные фрагменты .m4s и создает файл .m4a для аудио и .m4v для видео. Поэтому я должен использовать команду ffmpeg вручную через cmd, чтобы объединить их в один файл .mkv

Я бы хотел добавить командную строку в скрипт, чтобы это делалось автоматически. Я пробовал несколько разных команд и комбинаций между ними, таких как .exec, .execFile, .spawn, все безуспешно

Те же примеры:

1) с использованием execFile


const child = execFile('ffmpeg', ['-i', 'input.m4v' , '-i' , 'input.m4a' , '-c' , 'copy' , 'output.mkv' ], (error, stdout, stderr) => {
    if (error) {
        console.error('stderr: =============================', stderr);
        throw error;
    }
    console.log('stdout: ==========================', stdout);
});

console.log('here');

2) используя exec


const child = exec('ffmpeg', ['-i', 'input.m4v' , '-i' , 'input.m4a' , '-c' , 'copy' , 'output.mkv', (error, stdout, stderr) => {
    if (error) {
        console.error('stderr: =============================', stderr);
        throw error;
    }
    console.log('stdout: ==========================', stdout);
});

console.log('here');

3) с помощью spawn


var cmd = 'D:\vimeo\ffmpeg';

var args = [
    '-i', 'D:\vimeo\input.m4a',
    '-i', 'D:\vimeo\input.m4v', 
    '-c', 'copy', 'D:\vimeo\output.mkv'
];

var proc = spawn(cmd, args);

proc.stdout.on('data', function(data) {
    console.log(data);
});

proc.stderr.on('data', function(data) {
    console.log(data);
});

proc.on('close', function() {
    console.log('finished');
});

Что я делаю не так?


Мессангены ошибки:

1)

D:\vimeo\vimeo-downloader.js:94
const child = execFile('ffmpeg', ['-i', 'input.m4v' , '-i' , 'input.m4a' , '-c' , 'copy' , 'output.mkv' ], (error, stdout, stderr) => {
              ^

ReferenceError: execFile is not defined
    at Object.<anonymous> (D:\vimeo\vimeo-downloader.js:94:15)
    at Module._compile (internal/modules/cjs/loader.js:776:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:829:12)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)

2)

D:\vimeo\vimeo-downloader.js:100
});
 ^

SyntaxError: Unexpected token )
    at Module._compile (internal/modules/cjs/loader.js:721:23)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:829:12)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)

3) * * тысяча тридцать-пять

D:\vimeo\vimeo-downloader.js:102
var proc = spawn(cmd, args);
           ^

ReferenceError: spawn is not defined
    at Object.<anonymous> (D:\vimeo\vimeo-downloader.js:102:12)
    at Module._compile (internal/modules/cjs/loader.js:776:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:829:12)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...