首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FFMPEG,如何创建自定义波形

FFMPEG,如何创建自定义波形
EN

Stack Overflow用户
提问于 2017-06-03 03:17:49
回答 1查看 2K关注 0票数 1

我已经做了研究,试图创建一个波形与FFMPEG和目前能够创建一个白色png与波是透明的。目标是像下面的平滑波一样产生波浪,并使灰色变得透明。

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

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-09 12:14:03

您将无法在FFmpeg中做到这一点,一个是因为波形不是用一条线绘制的,而是填充了多边形,另一个是因为FFmpeg在处理毫秒持续时间音频时似乎有问题。

使用更高级的数学/绘图软件(如R、Octave或matplotlib )很可能做到这一点,但我的第一个想法是使用三个更小、更专业的命令行实用程序:

  • SoX用于修剪、重采样音频文件并将其保存为可解析的.dat格式
  • (grep/sed用于清理.dat文件)
  • 格努图绘制基于该.dat文件的绘图并将其保存为.png
  • 意象机修改.png,使所绘制的线透明。

最后,我的示例脚本就这样结束了

代码语言:javascript
复制
# 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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44339887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档