2013-08-13 3 views
0

У меня странная проблема с преобразованием изображений в видео. Я использую 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) с тем же результатом, я просто прибегает к добавлению аргументов вручную, пытаясь сделать его точно таким же, как моя первоначальная команда.

Если у кого-то здесь есть опыт работы с этим модулем и/или есть какие-либо предложения, было бы весьма полезно!

ответ

0

Если у вас такая же проблема и выяснилось, что вам нужно указать Input FPS, чтобы соответствовать источнику последовательности изображений.

.withFpsInput(30) // fps matching your jpg or png input sequence 

Это отлично подойдет для меня. Надеюсь, поможет!

Смежные вопросы