使用 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但我还没有开始尝试。