FFMPEG - 将图像+音频组合成视频,但输出比音频文件长?

FFMPEG - 将图像+音频组合成视频,但输出比音频文件长?

我正在尝试将静态图像和音频组合成视频。我希望视频与音频文件一样长。我正在使用 ffmpeg 并通过 nodejs 执行它:

var args = [
    "-loop",
    "1",
    "-i",
    pathToImage,
    "-i",
    pathToAudio,
    "-c:v",
    "libx264",
    "-tune",
    "stillimage",
    "-b:a",
    "96k",
    "-c:a",
    "aac",
    "-pix_fmt",
    "yuv420p",
    "-f",
    "mp4",
    "-shortest",
    destinationPath,
  ]
  var cmd = "ffmpeg"
  var proc = spawn(cmd, args)

因此执行的 ffmpeg 命令应该是这样的:

-loop 1 -i pathToImage.png -i pathToAudio.mp3 -c:v libx264 -tune stillimage -b:a 96k -c:a aac -pix_fmt yuv420p -f mp4 -shortest destinationPath.mp4

但是,这样创建的视频比我的音频文件长了好几秒,我不明白为什么会这样,也不知道该如何修复?我不得不承认,我并不完全了解所有参数,所以我想知道是否有人可以帮我。

答案1

我自己也不完全理解这个问题(显然是关于缓冲数据),但是Stack Overflow 链接评论中提供了简短的解释。

根据那里提供的答案,我在自己的实验中通过结合示例解决了这个问题Gyan 的回答具有足够高的输入帧率暗示德布伦和布伦答案。根据上面的例子,结果如下:

ffmpeg -y -loop 1 -framerate 10 -i pathToImage.png -i pathToAudio.mp3 -c:v libx264 -tune stillimage -c:a aac -b:a 96k -pix_fmt yuv420p -shortest -fflags +shortest -max_interleave_delta 100M destinationPath.mp4

在这种情况下,任何低于该值的值-framerate 10都会导致文件长度增加 1 到 4 秒。但是,使用给定的设置,结果的.mp4长度恰好是原始音频文件的长度。

不管怎样,提高帧速率(在这种情况下)会使文件大小增加一点,但除此之外似乎对长度没有影响。

相关内容