2017-06-03 164 views
0

我已经完成了试图用FFMPEG创建波形的研究,并且目前能够创建波形透明的白色PNG。目标是像下面的平滑波那样产生波,并且灰色是透明的。 ffmpeg wavformFFMPEG,如何创建自定义波形

这是我目前的FFMPEG波形发生器和输出。

ffmpeg -i ./_test.mp3 -filter_complex \ 
"[0:a]aformat=channel_layouts=mono,compand=gain=-6, \ 
showwavespic=s=450x46:colors=white,negate[a]; \ 
color=white:450x46[c]; \ 
[c][a]alphamerge" -vframes 1 _test.png 

ffmpeg wavform

+0

看不到参考图像。 – Mulvya

+0

感谢@Mulvya的领导。必须是一个投箱分享问题。你现在应该可以看到图像。 –

+0

我建议你卷起袖子,自己写一些自定义代码......音频只是一条曲线,所以它的出奇惊人的容易产生......这是针对具有可回答解决方案的尖锐问题......您的问题显示底部的实际波形一旦使用Audacity这样的可视化工具展开,最终会出现类似于我们最顶端的图像......没有任何欺骗行为会在其中读取并产生另一个...当您编写我们自己的代码来合成音频时,您会欣赏到这个 –

回答

1

你将不能够做到这一点在FFmpeg的,一个是因为波形不与线条绘制的,而是填充多边形,和两个因为FFmpeg的似乎有处理麻烦毫秒持续音频。

或许,这将有可能这个采用了更先进的数学/绘图像R,倍频或matplotlib,但我首先想到的软件做的是使用三个更小,更专业的命令行实用程序:

  • SoX修剪,重采样和音频文件保存到解析的.dat文件的形式
  • (的grep/sed的清理.dat文件)
  • Gnuplot得出基于该.dat文件的阴谋,并保存为巴纽
  • Imagemagick修改巴纽使绘制的线是透明

在结束我的示例脚本弄成这个样子

# create example file 
sox -n -r 32k -b 16 pnoise.wav synth 10 pinknoise norm -0.1 

# trim/convert 
sox --norm=-1 pnoise.wav test.dat remix 1 trim 5 0.002 rate 200k 

grep -v "^;" test.dat |\ 
    sed -e "s/^[[:space:]]*//" -e "s/[[:space:]]*$//" > test.txt 

# draw plot  
gnuplot 

set term png size 600,200 background "#BBBBBB" 

set output "test.png" 

unset key 
unset border 
unset xtics 
unset ytics 

set margins 0, 0, 0, 0 

set yrange [-1:1] 

plot "test.txt" with lines lt rgb "#FF0000" lw 3 

exit 

# replace red opaque with fully transparent 
mogrify -channel rgba -matte -fill "#FF000000" -opaque "#FF0000" test.png 

enter image description here

+0

感谢您的回应。我已经看过波浪冲浪我将分叉它并建立一个自定义的解决方案。 –