加入音频和图像 -> 使用 FFmpeg 输出为视频

use*_*559 9 audio video ffmpeg concatenation

我有 1 个图像 (jpg) 和 1 个音频文件 (MP3),我想将其输出为视频文件(例如 AVI)。

有谁知道如何使用FFMPEG加入两者?我想在音频持续时间内显示图像。

任何人的想法?

sub*_*nki 7

如果您在 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
Run Code Online (Sandbox Code Playgroud)
  • vframes 14490 是应该循环的帧数,以便为整个 audio.mp3 文件提供连续的图像

    例如:8 分 3 秒 ((8m x 60s + 3s) x 30fps = 14490 vf)

资源从这里


evi*_*oup 7

有一种比这里建议的方法简单得多的方法,它不需要计算帧数或输入单个文件的长度(特别适合批处理)。使用最新版本的 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
Run Code Online (Sandbox Code Playgroud)

这对图像/视频使用每秒 2 帧,这应该没问题,但如果需要,您可以将其设置为更标准的 25。


小智 5

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
Run Code Online (Sandbox Code Playgroud)
-y

在没有提示的情况下覆盖输出文件

-循环 1

不推荐使用选项“-loop_input”,使用 -loop 1。请参阅ffmpeg 文档

-一世

输入文件

-r

每秒帧数
也可以表示为:-r 30000/1001 给出 29.97nnn 的 fps

-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 确定正确的视频编解码器。