У меня странная проблема с преобразованием изображений в видео. Я использую excellent fluent-ffmpeg module для сервера node.js. У меня есть 179 изображений в формате jpg, которые я хочу конвертировать в видео с разрешением 30 кадров в секунду (должно быть около 6 с). Я успешно сделал это с помощью следующей FFmpeg команды:fluent-ffmpeg генерирует некорректную частоту кадров
ffmpeg -r 30 -i frame%03d.jpg -c:v libx264 out.mp4
Это выводит следующее при осмотрена FFmpeg:
ffmpeg -i out.mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'out.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf54.63.104
Duration: 00:00:06.00, start: 0.000000, bitrate: 1631 kb/s
Stream #0:0(und): Video: h264 (High) (avc1/0x31637661), yuvj420p, 640x480 [SAR 1:1 DAR 4:3], 1627 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc
Metadata:
handler_name : VideoHandler
Теперь я пытаюсь сделать то же самое с беглым-FFmpeg:
var proc = new ffmpeg({ source: 'frame%03d.jpg', nolog: true })
.addOptions(['-c:v libx264','-r 30'])
.saveToFile('test.mp4', function(retcode, error){
console.log('file has been converted succesfully');
});
Должно быть точно такое же, не так ли? Но вот что я получаю:
ffmpeg -i test.mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf54.63.104
Duration: 00:00:07.20, start: 0.000000, bitrate: 1556 kb/s
Stream #0:0(und): Video: h264 (High) (avc1/0x31637661), yuvj420p, 640x480 [SAR 1:1 DAR 4:3], 1553 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc
Metadata:
handler_name : VideoHandler
Теперь что самое интересное здесь то, что, хотя и были сделаны из того же набора образов и оба якобы имеют одинаковую частоту кадров, один сделанный с беглой-FFmpeg имеет длительность 7.20s, полная на 1.20 длиннее первой. По сравнению с двумя видео, кажется, что fluent-ffmpeg на самом деле составляет 25 кадров в секунду, хотя он сообщает 30.
Обратите внимание, что я попытался правильно добавить два флага с помощью методов (.withVideoCodec, .withFps
) с тем же результатом, я просто прибегает к добавлению аргументов вручную, пытаясь сделать его точно таким же, как моя первоначальная команда.
Если у кого-то здесь есть опыт работы с этим модулем и/или есть какие-либо предложения, было бы весьма полезно!