我一直在尝试使用ffmpeg从opus文件创建wavefile图像。到目前为止,我已经找到了三种不同的方法,但似乎无法确定哪种方法最好。
最终的结果是希望有一个只有大约的声波。 55px的高度。图像将成为css背景图像的一部分。
改编自Generating a waveform using ffmpeg
:
ffmpeg -i file.opus -filter_complex “showwavespic,colorbalance = BS = 0.5:GM = 0.3:BH = -0.5,drawbox = X =(IW-W)/ 2:Y =(IH-H)/ 2:W = IW:H = 1:颜色= black@0.5" file.png
接下来,我找到了这个(因为简单而我最喜欢的):
ffmpeg -i test.opus -lavfi showwavespic = split_channels = 1:s = 1024x800 test.png
这就是那个样子:
最后,这个来自FFmpeg Wiki: Waveform,但使用第二个实用程序(gnuplot)而不仅仅是ffmpeg似乎效率低下:
ffmpeg -i file.opus -ac 1 -filter:a aresample = 4000 -map 0:a -c:pcm_s16le -f data - | \ gnuplot -e“设置 终端png大小525,050;设置输出 'file.png';取消设置键;取消设置tics;取消设置边框;组 lmargin 0;设置rmargin 0;设置tmargin 0;设置bmargin 0;情节'
选项二是我最喜欢的,但我不喜欢波形顶部和底部的边距。
选项三(使用gnuplot)可以根据我们的需要制作出最佳的“形状”图像,因为当图像大小仅为大小时,声音的初始峰值似乎会使其余部分几乎太小而无法使用(线条几乎会消失) 50像素高。
有什么建议可以最好地接近这个吗?我真的很了解我看到的任何选项,当然除了大小。请注意,我有10个成千上万的处理,所以我很自然地想在一开始做出明智的选择。