передача параметров в execFileSync не удалась для ffmpeg - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь написать небольшие скрипты для автоматизации создания видеофайлов.У меня это почти работает, но я застрял в одной части, вот мой код js узла:

let str1 = "-c:v libvpx -i sourceVideos/a1.mkv -c:v libvpx -i sourceVideos/a2.mkv -c:v libvpx -i sourceVideos/a3.mkv";
let str2 = "[1]setpts=PTS+5.00/TB[a2];[2]setpts=PTS+10.00/TB[a3];[0][a2]overlay[o2];[o2][a3]overlay";
let outFile = 'validout.mp4';
const masterStream = execFileSync('ffmpeg', [str1, '-filter_complex', str2, outFile]);

console.log('All processing completed');

Приведенный выше код представляет команду ffmpeg для создания видео из нескольких видео:

ffmpeg -c:v libvpx -i sourceVideos/a1.mkv -c:v libvpx -i sourceVideos/a2.mkv -c:v libvpx -i sourceVideos/a3.mkv -filter_complex "[1]setpts=PTS+5.00/TB[a2];[2]setpts=PTS+10.00/TB[a3];[0][a2]overlay[o2];[o2][a3]overlay" validationout.mp4

Таким образом, я поместил аргументы в str2 и опции / входы в str1.Проблема в том, что когда я передаю входные данные с их параметрами в str1 и помещаю их в мою команду execFileSync, она не анализируется командой.Я также проверил на подтверждение, и если я передаю опции в следующем формате, он работает в скрипте узла js:

//version 1 with separated arguments
const masterStream = execFileSync('ffmpeg', ['-c:v', 'libvpx', '-i', 'sourceVideos/a1.mkv', '-c:v', 'libvpx', '-i', 'sourceVideos/a2.mkv', '-c:v', 'libvpx', '-i', 'sourceVideos/a3.mkv', '-filter_complex', str2, outFile]);

Мой вопрос: как я могу передать опции / входные данные вexecFileSync в str1, чтобы их можно было выполнить?

1 Ответ

0 голосов
/ 17 октября 2018

Аргументы, которые сочетаются друг с другом как -i sourceVideos/a1.mkv, должны быть разделены (-i, sourceVideos/a1.mkv, если вы не включили shell: true в options объекте:

execFileSync('ffmpeg'), ['-i', 'sourceVideos/a1.mkv']) // must be separate
// or
execFileSync('ffmpeg', ['-i sourceVideos/a1.mkv'], { shell: true })

Это должно действительнобыли помещены в документы nodejs. Очевидно, это связано с тем, как программа вызывается в C на более глубоком уровне. Для получения дополнительной информации см. этот ответ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...