node-fluent-ffmpeg неправильно изменяет размер видео при заданном размере - PullRequest
0 голосов
/ 15 апреля 2019

Информация о версии

  • версия fluent-ffmpeg: 2.1.2
  • версия ffmpeg: версия ffmpeg 4.1.3
  • ОС: mac os x mojave 10.14.3

Код для воспроизведения

Сначала отрежьте видео, используя эту команду:

const cutVideo = async (currentWord) => {
    return new Promise((resolve, reject) => {
        console.log('cutting video', currentWord.file)
        ffmpeg(currentWord.file)
            .videoCodec('libx264')
            // .addOptions('-vf "setdar=ratio=16/9:max=1000"')
            .on('start', command => console.log('command', command))
            .on('error', reject)
            .on('end', resolve)
            .withSize('640x360')
            .withAspect('16:9')
            .applyAutopadding(true, 'black')
            .saveToFile(currentWord.file.replace('-unfinished', ''), './')
    })
}

Позже объедините их вместе, используя команду .mergeToFile():

const mergeFilesAsync = async function(files, folder, filename)
{
    return new Promise((resolve, reject) => {
        console.log('merging files', files)
        var cmd = ffmpeg({ logger: console })
            .videoCodec('libx264')
            .on('start', command => console.log('command', command))
            .on('error', reject)
            .on('end', resolve)

        for (var i = 0; i < files.length; i++)
        {
            const currentWord = files[i]
            cmd.input(currentWord.file.replace('-unfinished', ''))
        }

        cmd.mergeToFile(folder + "/" + filename, folder);
    });
}

Ожидаемые результаты

Размер видео в функции cutVideo должен иметь размер 640x360 с соотношением сторон 16: 9.

Полученные результаты

Первое обработанное видео имелоразмерность: 850 × 480, выход после обработки: 642 × 360 (должно быть 640x360)

Второе обработанное видео имело размерность: 1152 × 480, выход после обработки: 638× 360

Третье обработанное видео имело размерность 853 × 480, выходное значение после обработки: 642 × 360

Команда FFmpeg, созданная fluent-ffmpeg:

ffmpeg -i /Users/yagiz/Desktop/video-creator/what's-unfinished.mp4 -y -vcodec libx264 -filter:v scale=w='if(gt(a,1.7777777777777777),640,trunc(360*a/2)*2)':h='if(lt(a,1.7777777777777777),360,trunc(640/a/2)*2)',pad=w=640:h=360:x='if(gt(a,1.7777777777777777),0,(640-iw)/2)':y='if(lt(a,1.7777777777777777),0,(360-ih)/2)':color=black /Users/yagiz/Desktop/video-creator/what's.mp4
cutting video /Users/yagiz/Desktop/video-creator/up?-unfinished.mp4

и

ffmpeg -i /Users/yagiz/Desktop/video-creator/up?-unfinished.mp4 -y -vcodec libx264 -filter:v scale=w='if(gt(a,1.7777777777777777),640,trunc(360*a/2)*2)':h='if(lt(a,1.7777777777777777),360,trunc(640/a/2)*2)',pad=w=640:h=360:x='if(gt(a,1.7777777777777777),0,(640-iw)/2)':y='if(lt(a,1.7777777777777777),0,(360-ih)/2)':color=black /Users/yagiz/Desktop/video-creator/up?.mp4

Я думаю, что значение 1.77777 в этой команде провыводит нижнюю границу или верхнюю границу фактического элемента.

Есть идеи, в чем проблема?

Спасибо!

...