Как проверить наличие поврежденного видео в 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.