如何使用FFmpeg从音频文件创建视频

4
我大约有8000个音频文件(总共约6 GB),主要是以m4amp3格式存储的。是否有一种方法将这些音频文件转换为带有静态海报图像的视频,并且视频显示的名称与音频文件相同。

我在ffmpeg中找到了drawtext filter,可能会有所帮助。但我不知道如何通过一个命令来写出它,这样我只需要传入音频文件的名称(mp3/m4a),然后输出一个包含音频文件名称作为显示的视频(分辨率为256x144像素)。

到目前为止,我已经能够使用ImageMagick convert命令完成所有操作,首先创建静态图像,然后再使用ffmpeg合并。

由于有很多文件,我希望使用ffmpeg/python/javascript自动化完成此操作。我想这样做是为了将我的音频录音存档在Google照片中。 Google照片可以接受高质量视频的无限存储。

请参考重复链接中的带音频的字幕过滤示例 - llogan
2个回答

4

尝试像下面的代码一样做:

ffmpeg -i 1.mp3 -i cover.jpg -f mp4 out.mp4

我想通过编程创建cover.jpg,该cover.jpg应该按照您上面提到的方式使用音频文件名(1.mp3)。 - Prateek Singla

2
您可以使用ImageMagick创建标签图像,然后将其导入ffmpeg并在读取音频文件之前组装输出来获得该结果。我已经编写了一个Windows语法的命令...
set FNAME="My Audio.mp3"

convert -pointsize 24 label:%FNAME% -gravity center -extent 720x480 png:- ^
   | ffmpeg -y -f image2pipe -i - -i %FNAME% ^
      -filter_complex "loop=-1:1:0" -shortest out_%FNAME%.mp4

把它翻译成*nix语法应该很简单,只需将续行符“^”更改为反斜杠“\”,并更改设置和读取变量的方式。
该命令首先使用您的音频文件的名称设置变量。然后,它运行ImageMagick“convert”命令,在720x480画布上创建一个带有居中文件名的标签。输出被强制转换为PNG格式,并作为视频输入传送到ffmpeg中。
在读入音频文件后,ffmpeg使用“filter_complex”将视频图像作为无限循环运行,并使用“-shortest”将其限制为音频长度。
结果是一个MP4视频,其中包含您的输入作为音频,并且文件名以黑色显示在白色背景上,居中于视频帧中。使用其他ImageMagick和/或ffmpeg选项来满足自己的需求。
要在充满图像的目录上运行该命令,请将命令放在“for”循环内,以便它遍历所有图像并将变量更改为目录中每个下一个文件名。
如果您正在使用ImageMagick v7,请改用“magick”而不是“convert”。

这很有效,但我有大量的文件,使用ImageMagick创建文件非常慢。FFmpeg似乎更快。是否有任何方式可以仅使用ffmpeg完成这两项工作? - Prateek Singla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接