我想创建一堆由单个图像组成的视频,该图像在整个视频中显示,但每个视频都有不同的音频文件。我可以使用各种工具手动完成,但问题是我有很多音频文件,我无法优化帧速率(稍后会详细介绍),这样做需要很多时间,但 ffmpeg 提供我需要的一切,但问题是我不知道如何批处理所有内容。
基本代码:
ffmpeg -i song-name.mp3 -loop 1 -i cover.jpg -r frame-rate -t song-length -acodec copy output.mp4
我想要实现
的目标:假设我有一个文件夹,其中包含几个音频文件:song-name-1.mp3、song-name-2.mp3、...、song-name-n.mp3 和封面。 .jpg
我需要一个批处理文件,它采用文件夹中每个 mp3 文件的名称(我想是一个 FOR 循环)并使用相同的命令处理它:
ffmpeg -i song-name.mp3 -loop 1 -i cover.jpg -r frame-rate -t song-length -acodec copy output.mp4
因此,每个视频的图像始终相同。歌曲长度可以使用工具mp3info和相应的命令获取:
mp3info.exe -p %S song-name.mp3
由于我在整个视频中只有一个图像,因此最佳帧速率将是视频长度的倒数,即 1/长度(其中长度是我们从 mp3info 获得的以秒为单位的变量)。
所以最终的代码应该是这样的:
ffmpeg -i song-name.mp3 -loop 1 -i cover.jpg -r 1/length -t length -acodec copy song-name.mp4
其中“song-name”是一个变量,它会随着 FOR 循环的每次迭代(即文件夹中的每个音频文件)而变化,而 length 是一个变量,我们可以通过以下命令获得其值:
mp3info.exe -p %S song-name.mp3
我找到了一个 FOR 循环的例子来获取特定文件夹中所有 mp3 的所有文件名,但我不知道如何集成 mp3info。我希望有人可以帮助我,如果可以以任何方式使用的话,我对 C 编程语言有一些了解。