我有 1 幅图像(jpg)和 1 个音频文件(MP3),我想将其输出为视频文件(例如 AVI)。
有人知道如何使用 FFMPEG 将两者连接起来吗?我想在音频持续时间内显示图像。
有人有什么想法吗?
答案1
如果你使用的是 Windows,你也可以在 Windows Movie maker 中执行此操作...如果你需要说明,请发表评论
对于 FFmpeg 使用这个
ffmpeg -loop_input -vframes 14490 -i imagine.jpg -i audio.mp3 -y -r 30
-b 2500k -acodec ac3 -ab 384k -vcodec mpeg4 result.mp4
vframes 14490 是整个 audio.mp3 文件为了获得连续图像应循环的帧数
例如:8 分 3 秒 ((8m x 60s + 3s) x 30fps = 14490 vf)
资源来自这里
答案2
有一种比这里建议的方法更简单的方法,不需要计算帧数或输入单个文件的长度(特别适合批处理)。使用最新版本的 ffmpeg,您可以使用该-shortest
选项,当最短的流结束时停止编码 - 在本例中为 input.mp3(由于图像将永远循环,因此它的长度无限):
ffmpeg -i input.mp3 -f image2 -loop 1 -r 2 -i input.jpg \
-shortest -c:a copy -c:v libx264 -crf 23 -preset veryfast output.mp4
这对图像/视频使用每秒 2 帧,这应该没问题,但如果您愿意,可以将其设置为更标准的 25 帧。
答案3
subanki 几乎做对了。工作命令行如下;
ffmpeg -y -loop 1 -i image.jpg -i audio.mp3 -r 30 -b:v 2500k -vframes 14490 -acodec libvo_aacenc -ab 160k result.mp4
- -y
不经提示覆盖输出文件
- -循环 1
选项 '-loop_input' 已弃用,请使用 -loop 1。请参阅ffmpeg 文档。
- -我
输入文件
- -r
每秒帧数
也可以表示为:-r 30000/1001,得出 fps 为 29.97nnn- -b:v
视频比特率;数字越高,质量越好,文件越大。
- -vframes
如上所述;以秒为单位计算音频文件的总时间(例如 00:02:41(2 分 41 秒)等于 161 秒(2 x 60)+ 41)。然后将总秒数乘以您使用 -r 指定的每秒帧数(例如 161 x 30 = 4830)。
-vframes 可以替换为 -t 161(-t 持续时间记录或转码“持续时间”秒的音频/视频)
- -acodec
使用适合您所创建文件类型的正确音频编解码器。对于 .mp4,它应该是 AAC 格式。编解码器 libvo_aacenc 是我的 Windows 7 系统的正确编码编解码器。
- -ab
音频比特率
- 结果.mp4
这是输出文件的名称。它可以是系统的任何合法文件名。如果您未使用 -vcodec 指定视频编解码器,则扩展名将帮助 ffmpeg 确定正确的视频编解码器。
答案4
下载虚拟配音,然后执行以下操作:
像打开普通视频文件一样打开图像。
计算音频的时长(以秒为单位)并将其四舍五入为最接近的整秒(例如 78.34 秒变为 79 秒)。从现在起,这个值称为 x。
转到“视频 > 帧速率”,选择“更改为帧速率 (fps)”,然后输入“1/x”作为值。此外,如果您希望生成的文件具有正常帧速率(如 25 fps),请选择“转换为 fps”,然后在其中输入所需的帧速率。
选择“视频 > 压缩”,然后选择您喜欢的风格。您可能需要使用调整大小过滤器调整图像的大小。
转到“音频 > 其他文件的音频”,然后在那里选择您的音频。如果需要,请选择音频的压缩。
保存文件。
来源:斯蒂芬V