如何使用node.js和fluent-ffmpeg检查损坏的webm视频?

3
我希望您能够检查编码的WebM视频是否存在错误。 到目前为止,我已经使用类似于以下内容的方式捕获了一个错误:
ffmpeg -v error -i ../broken.webm -f null - 

输出为:

[matroska,webm @ 0x7fba5400a200] Read error at pos. 110050 (0x1ade2)

我希望使用node.js和fluent-ffmpeg实现相同的输出,但我无法弄清如何使用js包装器语法传递-v error-f null -
我的尝试看起来很幼稚:
// ffmpeg -v error -i ../broken.webm -f null - 
ffmpeg("../broken.webm")
.on('error', function(err) {
    console.error('An error occurred: ',err.message)
})
.save('-f null -')
.on('end', function() {
    console.log('done !')
})

但是我立即遇到了一个错误: ffmpeg退出,代码为1:未识别的选项'-f null -'。

有什么想法可以使用fluent-ffmpeg从node.js调用ffmpeg -v error -i ../broken.webm -f null -

1个回答

4

你的方向是正确的,但是还需要添加一些其他条目到你的ffmpeg命令行中以处理你想要的选项。以下类似的内容应该能够满足你的需求:

var ffmpeg = require('fluent-ffmpeg');
var ff = new ffmpeg();

ff.on('start', function(commandLine) {
  // on start, you can verify the command line to be used
  console.log('The ffmpeg command line is: ' + commandLine);
})
.on('progress', function(data) {
  // do something with progress data if you like
})
.on('end', function() {
  // do something when complete
})
.on('error', function(err) {
  // handle error conditions
  if (err) {
    console.log('Error transcoding file');
  }
})
.addInput('../broken.webm')
.addInputOption('-v error')
.output('outfile')
.outputOptions('-f null -')
.run();

Fluent-ffmpeg将命令行选项分为addInputOption和outputOptions。如果您有多个输出选项,则可以将它们作为设置数组传递给outputOptions。

请注意,要使用outputOptions,我认为您需要指定一个输出文件。如果您不需要它,请将其设置为临时文件,然后在完成后删除或者输出到空设备。请参阅https://github.com/fluent-ffmpeg/node-fluent-ffmpeg的fluent-ffmpeg自述页面。它详细说明了这些和其他选项。

虽然可能有更好的方法来验证您的文件,但希望这可以让您开始使用fluent-ffmpeg。


非常感谢您的详细解释!讲得非常清楚易懂(点赞)。 如果您有其他更好的验证文件的方法,我将非常乐意尝试。 - George Profenza
1
我没有更好的推荐方式,这可能是一种简单直接的方法来完成你所需的任务。我曾想过可能有通用或编解码器特定的验证工具可用,但我的快速搜索没有找到任何东西。 - Rayzzor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接