我正在尝试使用以下代码创建视频:
`$`ffmpeg -loop 1 -r 5 -i video.png -r 5 -i progress.png -filter_complex "overlay=x='if(gte(t,0), -W+(t)*5, NAN)':y=H-h" -i video.mp3 -acodec copy video.mp4
我有以下文件
- video.png
- 这是一个 1280x720 像素的静帧,它只是一个带有 video.mp3 文件波形的背景
- progress.png
- 这只是一个 1280x100 像素的半透明图像,应该模拟动画(从 video.png 文件宽度的 0% 到 100%,以模拟“填满”动画。
我的问题如下:
- 视频与音频不同步。进度条太远了,它没有在歌曲结束时结束,而是一直在继续……
- 还有……它一直在继续!我让它创建了一个 1 小时的视频,并且它从未停止过。
我知道我在过滤器中遗漏了一些东西,但我不知道如何修复它。
有人可以帮我吗?
最佳答案
正如 Pranav 所说,在流的末尾使用 -shortest
来对持续时间问题进行排序。
现在要同步帧的进度,您必须计算出叠加的图片每秒需要移动多少。这很简单:您需要按“视频的宽度/视频的持续时间”移动图片
例如,如果您有 3 分钟的歌曲和 1280 的视频宽度:
- 3 分钟 = 3x60 = 180 秒。
- “视频宽度/视频时长”= 1280/180 = 7.11 像素/秒。
7.11
是用于代替 -W+(t)*5,
中的 5
的值。
我希望这已经足够清楚了。
关于Ffmpeg:将 slider "image"在 "background"上从 0% 移动到 100% 与音频同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21510521/