fluent-ffmpeg 获取编解码器数据而不指定输出
fluent-ffmpeg get codec data without specifying output
我正在使用 fluent-ffmpeg 节点模块从文件中获取编解码器数据。
如果我提供输出,它会起作用,但我想知道 运行 fluent-ffmpeg 是否有任何选项而不给它输出。
这就是我正在做的事情:
readStream.end(new Buffer(file.buffer));
var process = new ffmpeg(readStream);
process.on('start', function() {
console.log('Spawned ffmpeg');
}).on('codecData', function(data) {
//get recording duration
const duration = data.duration;
console.log(duration)
}).save('temp.flac');
如您所见,我正在将文件保存到 temp.flac
,这样我就可以获得该文件的秒数持续时间。
如果您不想将 ffmpeg 处理结果保存到文件,想到的一件事是将命令输出重定向到 /dev/null
。
事实上,正如 fluent-ffmpeg 存储库的所有者在一个 comment 中所说,当使用 null
格式。
所以,例如,类似的东西会起作用:
let process = new ffmpeg(readStream);
process
.addOption('-f', 'null') // set format to null
.on('start', function() {
console.log('Spawned ffmpeg');
})
.on('codecData', function(data) {
//get recording duration
let duration = data.duration;
console.log(duration)
})
.output('nowhere') // or '/dev/null' or something else
.run()
它仍然有点老套,但我们必须设置一个输出以避免 "No output specified" 错误。
当不存在流参数时,pipe() 方法 returns 一个 PassThrough 流,您可以将其通过管道传输到其他地方(或者只是监听事件)。
var command = ffmpeg('/path/to/file.avi')
.videoCodec('libx264')
.audioCodec('libmp3lame')
.size('320x240')
.on('error', function(err) {
console.log('An error occurred: ' + err.message);
})
.on('end', function() {
console.log('Processing finished !');
});
var ffstream = command.pipe();
ffstream.on('data', function(chunk) {
console.log('ffmpeg just wrote ' + chunk.length + ' bytes');
});
我正在使用 fluent-ffmpeg 节点模块从文件中获取编解码器数据。 如果我提供输出,它会起作用,但我想知道 运行 fluent-ffmpeg 是否有任何选项而不给它输出。 这就是我正在做的事情:
readStream.end(new Buffer(file.buffer));
var process = new ffmpeg(readStream);
process.on('start', function() {
console.log('Spawned ffmpeg');
}).on('codecData', function(data) {
//get recording duration
const duration = data.duration;
console.log(duration)
}).save('temp.flac');
如您所见,我正在将文件保存到 temp.flac
,这样我就可以获得该文件的秒数持续时间。
如果您不想将 ffmpeg 处理结果保存到文件,想到的一件事是将命令输出重定向到 /dev/null
。
事实上,正如 fluent-ffmpeg 存储库的所有者在一个 comment 中所说,当使用 null
格式。
所以,例如,类似的东西会起作用:
let process = new ffmpeg(readStream);
process
.addOption('-f', 'null') // set format to null
.on('start', function() {
console.log('Spawned ffmpeg');
})
.on('codecData', function(data) {
//get recording duration
let duration = data.duration;
console.log(duration)
})
.output('nowhere') // or '/dev/null' or something else
.run()
它仍然有点老套,但我们必须设置一个输出以避免 "No output specified" 错误。
当不存在流参数时,pipe() 方法 returns 一个 PassThrough 流,您可以将其通过管道传输到其他地方(或者只是监听事件)。
var command = ffmpeg('/path/to/file.avi')
.videoCodec('libx264')
.audioCodec('libmp3lame')
.size('320x240')
.on('error', function(err) {
console.log('An error occurred: ' + err.message);
})
.on('end', function() {
console.log('Processing finished !');
});
var ffstream = command.pipe();
ffstream.on('data', function(chunk) {
console.log('ffmpeg just wrote ' + chunk.length + ' bytes');
});