Как проверить наличие поврежденного видео в webm, используя node.js и fluent-ffmpeg?

Я хотел бы проверить, есть ли в закодированном видео webm ошибки. До сих пор мне удалось поймать ошибку, используя что-то вроде этого:

ffmpeg -v error -i ../broken.webm -f null - 

какие выводы:

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

Я хотел бы добиться того же результата, используя node.js и fluent-ffmpeg, но я не мог понять, чтобы передать -v error а также -f null - используя синтаксис js-оболочки.

Моя наивная попытка выглядит так:

// 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 exited with code 1: Unrecognized option '-f null -'.

Любые идеи о том, как я мог бы позвонить ffmpeg -v error -i ../broken.webm -f null - из node.js, используя fluent-ffmpeg?

1 ответ

Решение

Вы движетесь в правильном направлении, но есть пара других записей, которые нужно добавить в вашу строку 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, я думаю, вы должны указать выходной файл. Если вам это не нужно, создайте временный файл, а затем удалите его по завершении или, возможно, выведите на нулевое устройство. Взгляните на страницу readme для fluent-ffmpeg по адресу https://github.com/fluent-ffmpeg/node-fluent-ffmpeg. Он подробно описывает эти и другие варианты.

Хотя могут быть более эффективные способы проверки ваших файлов, надеюсь, это поможет вам с fluent-ffmpeg.

Другие вопросы по тегам