我尝试使用fluent-ffmpeg创建一个视频缩略图,这是我的代码
var ffmpeg = require('fluent-ffmpeg');
exports.thumbnail = function(){
var proc = new ffmpeg({ source: 'Video/express2.mp4',nolog: true })
.withSize('150x100')
.takeScreenshots({ count: 1, timemarks: [ '00:00:02.000' ] }, 'Video/', function(err, filenames) {
console.log(filenames);
console.log('screenshots were saved');
});
}
但我一直收到此错误
"mate data contains no duration, aborting screenshot creation"
任何想法,
顺便说一句,在Windows上,我将ffmpeg文件夹放在c / ffmpeg中,我将ffmpeg / bin添加到我的环境varable中,我不知道fluent-ffmpeg是否需要知道ffmpeg的路径,但是我可以使用下面的代码成功创建缩略图 exec("C:/ffmpeg/bin/ffmpeg -i Video/" + Name + " -ss 00:01:00.00 -r 1 -an -vframes 1 -s 300x200 -f mjpeg Video/" + Name + ".jpg")
请帮帮我!!!
答案 0 :(得分:0)
FFmpeg需要知道视频文件的持续时间,而大多数视频在文件头中有一些文件没有这些信息,主要是原始视频,如原始H.264流。
一个简单的解决方案可能是在拍摄快照之前重新录制视频,FFmpeg 0.5命令可以很简单:
ffmpeg -i input.m4v -acodec copy -vcodec copy output.m4v
此命令告诉FFmpeg读取“input.m4v”文件,使用相同的音频编码器和视频编码器(根本不编码)输出,并将数据输出到文件output.m4v。
FFmpeg会自动添加稍后拍摄快照所需的所有额外元数据/标题信息。
答案 1 :(得分:0)
尝试使用此代码从视频
创建缩略图// You have to Install Below packages First
var ffmpegPath = require('@ffmpeg-installer/ffmpeg').path;
var ffprobePath = require('@ffprobe-installer/ffprobe').path;
var ffmpeg = require('fluent-ffmpeg');
ffmpeg.setFfmpegPath(ffmpegPath);
ffmpeg.setFfprobePath(ffprobePath);
var proc = ffmpeg(sourceFilePath)
.on('filenames', function(filenames) {
console.log('screenshots are ' + filenames.join(', '));
})
.on('end', function() {
console.log('screenshots were saved');
})
.on('error', function(err) {
console.log('an error happened: ' + err.message);
})
// take 1 screenshots at predefined timemarks and size
.takeScreenshots({ count: 1, timemarks: [ '00:00:01.000' ], size: '200x200' }, "Video/");
答案 2 :(得分:0)
我认为问题可能是由.withSize(' ...')方法调用引起的。 医生说:
它与过滤器没有很好的相互作用。特别是,不要使用size()方法来调整缩略图的大小,而是使用size选项。
size()方法是withSize()的别名。
另外 - 但这不是你的问题 - 你不需要同时设置计数和时间标记。医生说:
在指定时间戳或时间戳时忽略count。
然后你可能会解决:
const ffmpeg = require('fluent-ffmpeg');
exports.thumbnail = function(){
const proc = new ffmpeg({ source: 'Video/express2.mp4',nolog: true })
.takeScreenshots({ timemarks: [ '00:00:02.000' ], size: '150x100' }, 'Video/', function(err, filenames) {
console.log(filenames);
console.log('screenshots were saved');
});
}
查看文档: https://github.com/fluent-ffmpeg/node-fluent-ffmpeg#screenshotsoptions-dirname-generate-thumbnails