2017-06-03 137 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

感謝您的迴應。我已經看過波浪衝浪我將分叉它並建立一個自定義的解決方案。 –