如何使用 ffmpeg 仅为音频的特定部分生成波形图像?

如何使用 ffmpeg 仅为音频的特定部分生成波形图像?

使用 ffmpeg,可以使用以下命令从音频文件生成基于图像的波形表示:

ffmpeg -i input -filter_complex "showwavespic=s=640x120" -frames:v 1 output.png

它产生类似以下内容的输出:

波形图像

https://trac.ffmpeg.org/wiki/Waveform


这将为整个音频文件创建波形图像。我怎样才能使它仅为其特定部分创建波形,而无需先将源文件单独剪辑成一个全新的音频文件?从 50 秒到 60.453 秒。

答案1

我假设您将能够使用波形成像进行搜索……否则您需要先剪切声音片段。

寻求在FFMpeg中:

ffmpeg -ss 00:50:00 -i将从文件的第 50 秒开始

然后我们在-to 60:45.300输入后使用来允许文件播放到这里。

结合输入文件,我们得到:

ffmpeg -ss 00:50:00 -to 00:60:43 -i input -filter_complex "showwavespic=s=640x120" -frames:v 1 output.png

答案2

所选答案在过去可能是正确的,但在我尝试过的版本中它不再正确(ffmpeg 版本 2021-12-09-git-b9f4c1231f-full_build-www.gyan.dev + ffmpeg 版本 2023-04-10-git-b18a9c2971-full_build-www.gyan.dev)。

我假设您将能够使用波形成像进行搜索……否则您需要先剪切声音片段。

但是,所选答案的上述部分是正确的。搜索不适用于 showwavespic。这可能应该作为错误提交给 ffmpeg。

下面的命令确实有效,并且将一个 ffmpeg 命令(一个用于分割)的输出通过管道传输到另一个(一个用于波形创建)。

它假设输入视频带有 aac 音频(否则您将需要更改第一个命令中的 -f 参数)并且设置为覆盖创建的 output.png(如果存在)(第二个命令中的 -y)而不是在这种情况下失败。

ffmpeg -i inputfile.mp4 -ss 1:11 -t 3 -vn -acodec copy -f adts - | ffmpeg -i - -y -filter_complex "compand,showwavespic=s=800x400" output.png

在手册页中可以找到另一个选项https://trac.ffmpeg.org/wiki/Waveform#UsingGnuplot但我还没有开始尝试。

相关内容