Javascript 流畅的ffmpeg视频已拉伸图像

Javascript 流畅的ffmpeg视频已拉伸图像,javascript,node.js,npm,ffmpeg,fluent-ffmpeg,Javascript,Node.js,Npm,Ffmpeg,Fluent Ffmpeg,我有一个mp3音频文件和一个jpg图像文件。我想把这两个文件合并成一个新的mp4。我有一个工作流畅的ffmpeg命令,它完全符合我的要求,除了一些在最终输出视频中会拉伸图像的事情。这似乎与我从photoshop导出的jpgs一致 是否有任何方法可以在ffmpeg命令中指定,以保持图像的相同分辨率,而不拉伸图像 我的职能如下: async function debugFunction() { console.log('debugFunction()') //begin settin

我有一个mp3音频文件和一个jpg图像文件。我想把这两个文件合并成一个新的mp4。我有一个工作流畅的ffmpeg命令,它完全符合我的要求,除了一些在最终输出视频中会拉伸图像的事情。这似乎与我从photoshop导出的jpgs一致

是否有任何方法可以在ffmpeg命令中指定,以保持图像的相同分辨率,而不拉伸图像

我的职能如下:

async function debugFunction() {
    console.log('debugFunction()')
    //begin setting up ffmpeg
    const ffmpeg = require('fluent-ffmpeg');
    //Get the paths to the packaged versions of the binaries we want to use
    var ffmpegPath = require('ffmpeg-static-electron').path;
    ffmpegPath = ffmpegPath.replace('app.asar', 'app.asar.unpacked')
    var ffprobePath = require('ffprobe-static-electron').path;
    ffprobePath = ffprobePath.replace('app.asar', 'app.asar.unpacked')
    //tell the ffmpeg package where it can find the needed binaries.
    ffmpeg.setFfmpegPath(ffmpegPath);
    ffmpeg.setFfprobePath(ffprobePath);
    //end setting ffmpeg

    let imgPath = "C:\\Users\\marti\\Documents\\martinradio\\image.jpg";
    let audioPath = "C:\\Users\\marti\\Documents\\martinradio\\audio.mp3";
    let vidPath = "C:\\Users\\marti\\Documents\\martinradio\\video.mp4";

    //create ffmpeg command
    ffmpeg()
    //set rendering options
    .input(imgPath)
    .loop()
    .addInputOption('-framerate 2')
    .input(audioPath)
    .videoCodec('libx264')
    .audioCodec('copy')
    .audioBitrate('320k')
    .videoBitrate('8000k', true)
    .size('1920x1080')
    .outputOptions([
        '-preset medium',
        '-tune stillimage',
        '-crf 18',
        '-pix_fmt yuv420p',
        '-shortest'
    ])
    //set status events
    .on('progress', function (progress) {
        if (progress.percent) {
            console.log(`Rendering: ${progress.percent}% done`)
        }
    })
    .on('codecData', function (data) {
        console.log('codecData=', data);
    })
    .on('end', function () {
        console.log('Video has been converted succesfully');
    })
    .on('error', function (err) {
        console.log('errer rendering video: ' + err.message);
    })
    //run ffmpeg command
    .output(vidPath).run()

}
如果我为其提供音频文件和此图像,则会成功渲染:

但输出视频如下所示:


您可以看到,图像被压扁并像矩形一样展开,而我希望它保持为立方体。

对于599X603的图片,您似乎使用了16:9的比例,例如大小('1920x1080')。您可以更改输出视频的大小,使其与您的实际图像大小相匹配(可以更大或更小,但是),也可以使用16:9,但是。

嗨,Martin,我在fluent ffmpeg的GitHub上阅读了使用说明,有一种方法称为
autopad()
aspect()
。这对你有帮助吗?