我打算使用ffprobe函数来提取视频信息,这是我的代码:
var FFmpeg = require('fluent-ffmpeg');
//...
var convert_using_ffmpeg = function (source, target) {
var tempfile = path.join(config.tmproot, path.basename(target));
new FFmpeg({ source: source })
.withVideoCodec('libx264')
.withVideoBitrate('512')
.withAudioQuality(5)
.withAudioCodec('libmp3lame')
.withSize('360x288')
//.ffprobe(function(err,data) {
// console.dir(data);
//})
.toFormat('flv')
.on('error', function (err) {
console.log('An error occurred: ' + err.message);
})
.saveToFile(tempfile, function () {
fs.rename(tempfile, target);
});
};
当我执行程序时,编译器只是说Object #<FfmpegCommand> has no method 'ffprobe
。 fluent-ffmpeg API说我应该在执行之前添加FFMPEG_PATH和FFPROBE_PATH环境变量,但事实是我可以直接在命令行执行ffmpeg,即使它在PATH环境变量中不存在,并且node.js程序成功运行而没有唤起ffprobe功能。此外,API还说ffprobe与ffmpeg的大多数分布一起使用,如果是这样,我如何单独将ffprobe添加到环境变量中?
我目前正在使用fluent-ffmpeg 1.7.0。
答案 0 :(得分:1)
在调用之前尝试设置FFprobe路径:
ffmpeg.setFfprobePath("c:\\program files\\ffmpeg\\bin\\ffprobe.exe");
ffmpeg.ffprobe(sourceFile.path, function(err, metadata) {
if (err)
{
console.log(err);
}
else{
console.log(metadata);
}
});
答案 1 :(得分:0)
我认为您阅读的文档实际上是2.x而不是1.x。
尝试使用npm install --save fluent-ffmpeg@2.0.0-rc1
答案 2 :(得分:0)
我当时正在处理Electron项目,我的Node版本是10.x.x,遇到了这个问题并尝试了多种方法,最后解决了我的问题:
在ffmpeg v4.0.0之后,如果您尚未下载二进制文件,则需要下载 FF Binaries
您需要将二进制路径明确设置到您的节点项目中。
const ffmpeg = require('fluent-ffmpeg');
var ffmpegPath = require("ffmpeg-binaries");
ffmpeg.setFfmpegPath(ffmpegPath);
ffmpeg.setFfprobePath("D:\\sandbox\\node-proj\\binaries\\ffprobe.exe");
答案 3 :(得分:0)
对于ffprobe,对于其他扩展名也应执行类似的操作
这样,无需在操作系统中安装ffmpeg
const ffmpeg = require('fluent-ffmpeg');
var ffprobe = require('ffprobe-static');
ffmpeg.setFfprobePath(ffprobe.path);