问题描述
我有两个文件(音频和视频)已在录制后输出。我试图将它们合并到节点JS中,但没有成功。
有人可以指导我,我如何合并音频和视频.webm文件。
下面是我正在尝试的示例代码。
var util = require("util");
var child_process = require("child_process");
var exec = child_process.exec;
const audioFile =
"./RMa56600d802119433a6fcd59b5404ff49_works/MT56a3ad9dfad21408331fb93b2205061d/1.webm";
const videoFile =
"./RMa56600d802119433a6fcd59b5404ff49_works/MTf4a4283fa27c7f6193749f39462fdeec/1.webm";
const outputFileName = "./RMa56600d802119433a6fcd59b5404ff49_works/merged.webm";
function puts(error,stdout,stderr) {
console.log("Puts func called");
stdout ? util.print("stdout: " + stdout) : null;
stderr ? util.print("stderr: " + stderr) : null;
error ? console.log("exec error: " + error) : null;
}
exec("ffmpeg -i videoFile -i audioFile -map 0:0 -map 1:0 outputFileName",puts);
下面是我得到的错误。
app.js:237未捕获的TypeError:exec不是函数
解决方法
就其价值而言,我目前在我的一个项目中使用 webm/opus 和 mp4/mp4a 文件成功地做到了这一点。为了达到预期的结果,我使用的 ffmpeg 命令如下所示:
ffmpeg -i vfn -i afn -vcodec copy -acodec copy ofn
但我使用:
const spawn = require('child_process').spawnSync;
const output = spawn('ffmpeg',['-i',vfn,'-i',afn,'-vcodec','copy','-acodec',ofn]);
其中 vfn、afn 和 ofn 是视频、音频和输出文件名。我在分叉进程中使用它,因此同步阻塞不是问题。无论如何,ffmpeg 复制操作非常快。