使用ffmpeg从opus

时间:2015-12-27 20:09:21

标签: ffmpeg

我一直在尝试使用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

生成此图像: enter image description here

接下来,我找到了这个(因为简单而我最喜欢的):

  

ffmpeg -i test.opus -lavfi showwavespic = split_channels = 1:s = 1024x800 test.png

这就是那个样子:

enter image description here

最后,这个来自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;情节'

enter image description here

选项二是我最喜欢的,但我不喜欢波形顶部和底部的边距。

选项三(使用gnuplot)可以根据我们的需要制作出最佳的“形状”图像,因为当图像大小仅为大小时,声音的初始峰值似乎会使其余部分几乎太小而无法使用(线条几乎会消失) 50像素高。

有什么建议可以最好地接近这个吗?我真的很了解我看到的任何选项,当然除了大小。请注意,我有10个成千上万的处理,所以我很自然地想在一开始做出明智的选择。

1 个答案:

答案 0 :(得分:2)

enter image description here enter image description here
原始和操作波形。

您可以使用compand过滤器调整动态范围。然后使用drawbox制作水平线。

ffmpeg -i test.opus -filter_complex \
"compand=gain=-6,showwavespic=s=525x50, \
 drawbox=x=(iw-w)/2:y=(ih-h)/2:w=iw:h=1:color=white" \
-vframes 1 output.png

它不像原始波形那样精确地表示您的音频,但它可能是视觉上的改进;特别是如此广泛。

另见FFmpeg Wiki: Waveform