我正在尝试将静态图像和音频组合成视频。我希望视频与音频文件一样长。我正在使用 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
长度恰好是原始音频文件的长度。
不管怎样,提高帧速率(在这种情况下)会使文件大小增加一点,但除此之外似乎对长度没有影响。