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


8

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

有谁知道如何使用FFMPEG将两者结合在一起?我想在音频持续时间内显示图像。

有任何想法吗?


您在使用哪个
操作系统

Answers:


6

如果您在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)

来自这里的资源


嗨Subanki-感谢您的评论!! 但是我不明白。我需要从音频和图像输出视频文件。这是怎么做到的?
user41559 2010年

@nayrsllew我刚刚发现代码不起作用,对不起..好吧,基本的事情是使用ffmpeg -f image2 -i image%d.jpg video.mpg将其转换为视频,然后加入视频和音频
subanki

更新了我的答案,这很艰难,但是我1个小时的Google搜索发现了它,我很高兴:)
subanki 2010年

答案是正确的,为什么要下投票:(
subanki 2010年

嗨,坎特,您能帮我吗?产生的视频太大。我需要mp3文件大小相同的视频。我的图像文件很小。另外,我需要将此视频上传到YouTube。
Parminder

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

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



5

苏邦基几乎是对的。工作命令行如下:

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 -loop1。请参阅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)。

-vframe可以替换为-t 161(-t持续时间记录或音频/视频的“持续时间”秒转码)

-阿科德

对要创建的文件类型使用正确的音频编解码器。对于.mp4,它应该是AAC格式。编解码器libvo_aacenc是适用于Windows 7系统的正确编码编解码器。

-ab

音频比特率

result.mp4

这是输出文件的名称。它可以是您系统的任何合法文件名。如果您未使用-vcodec指定扩展名,则该扩展名将帮助ffmpeg确定正确的视频编解码器。


1

这个简单的bash / cygwin脚本可以自动将目录中$ AUDIO扩展名的所有文件编码为目录中嵌入了folder.jpg图像的10FPS mp4视频文件,

对youtube上传有用;)

AUDIO=m4a; 
$'\n'; for a in `ls -1 *.$AUDIO `; do ffmpeg -i $a &2> $a.info ; done;
cat '' > do.sh
IFS=$'\n'; 
for a in `ls -1 *.$AUDIO`; do D=`grep Duration $a.info | cut -d',' -f1 | cut -d' ' -f4 | cut -d'.' -f1 | head -n1 `; S=$(( $( echo $D | cut -d':' -f2 ) * 60 + 1 + ` echo $D | cut -d':' -f3  ` )) ; echo ffmpeg -loop_input -vframes $(( $S * 10 )) -i folder.jpg -i \"$a\" -y  -r 10 -b 2500k -ab 384k -vcodec mpeg4 \"$a.mp4\" >> do.sh;  done;
split -l5 do.sh
xa* &

0

下载VirtualDub,然后执行以下操作:

  1. 像打开普通视频文件一样打开图像。

  2. 以秒为单位计算音频的持续时间,并将其舍入到最接近的整秒(例如78.34秒变为79秒)。从现在开始,此值称为x。

  3. 转到“视频>帧频”,选择“更改为帧频(fps)”,然后输入“ 1 / x”作为值。此外,如果要在生成的文件中使用正常的帧速率(如25 fps),请选择“转换为fps”,然后在其中输入所需的帧速率。

  4. 选择“视频>压缩”,然后选择您喜欢的口味。可能是您需要使用调整大小滤镜来调整图像的大小。

  5. 转到“音频>其他文件的音频”,然后在此处选择音频。如果需要,请选择音频的压缩方式。

  6. 保存文件。

资料来源:stephanV


感谢StephanV ..我需要使用FFMpeg,但这是一个很好的建议..谢谢
2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.