使用ffmpeg生成波形

时间:2015-08-27 16:24:39

标签: php ffmpeg

我正在尝试使用ffmpeg生成波形图像。

我已经成功制作了波形图像,但它看起来不太好......

我一直在寻找尝试设计图像以使其看起来更漂亮,但是我无法找到有关此内容或任何教程的任何信息。

我正在使用PHP和shell_exec来创建波形。

我知道有一些php库可以做到这一点但由于文件格式这是一个漫长的过程。

我使用的代码如下:

$command = 'convertvid\bin\ffmpeg -i Temp\\'.$file.' -y -lavfi showwavespic=split_channels=0:s='.$width.'x50 Temp\\'.$PNGFileName;
shell_exec($command);

基本上我想在中间添加一条线,因为此刻有空白点,并且希望能够设置背景和波浪颜色。

1 个答案:

答案 0 :(得分:22)

默认波形

enter image description here

ffmpeg -i stereo_input.foo -filter_complex showwavespic -frames:v 1 output.png

注释

  • 请注意中间的无声音频段。

  • 立体声输入的默认颜色为红色(左声道)和绿色(右声道)。

  • 颜色在通道重叠的地方混合。

  • 背景是透明的。

  • 您可以使用colors选项更改频道颜色,例如"showwavespic=colors=blue|yellow"。请参阅list of valid color names或使用十六进制表示法,例如#ffcc99

  • 如果黑色背景上的默认颜色为白色和灰色,那么ffmpeg太旧了。有关最新ffmpeg二进制文件的链接,请参阅FFmpeg Download页面。

  • 如果您获得Option 'colors' not found,那么您的ffmpeg太旧了。有关最新ffmpeg二进制文件的链接,请参阅FFmpeg Download页面。

  • 有关其他选项,请参阅showwavespic filter documentation

  • 如果您想要视频而不是图片,请使用showwaves filter

花式波形

enter image description here

ffmpeg -i input -filter_complex \
"[0:a]aformat=channel_layouts=mono, \
 compand=gain=-6, \
 showwavespic=s=600x120:colors=#9cf42f[fg]; \
 color=s=600x120:color=#44582c, \
 drawgrid=width=iw/10:height=ih/5:color=#9cf42f@0.1[bg]; \
 [bg][fg]overlay=format=rgb,drawbox=x=(iw-w)/2:y=(ih-h)/2:w=iw:h=1:color=#9cf42f" \
-vframes 1 output.png

选项说明

  1. aformat将音频下采样到单声道。否则,默认情况下,立体声输入会导致每个通道的波形颜色不同(请参阅上面的默认波形示例)。

  2. compand修改音频的动态范围,使波形看起来不那么平坦。它使实际音频的表示不太准确,但在视觉上更具吸引力。

  3. showwavespic生成实际波形。

  4. color源过滤器用于制作与波形大小相同的彩色背景。

  5. drawgrid在后台添加网格。网格不代表任何东西,但仅用于外观。网格颜色与可见波形颜色(#9cf42f)相同,但不透明度设置为10%(@0.1)。

  6. overlay会在[bg](波形)后面放置[fg](我将其命名为背景的滤镜图)。

  7. 最后,drawbox会生成水平线,因此任何无声区域都不会那么难看。

  8. 图像背景

    当然,您可以使用图片或视频代替背景:

    enter image description here

    ffmpeg -i audio -i image -filter_complex \
    "[1:v]scale=600:-1,crop=iw:120[bg]; \
     [0:a]showwavespic=s=600x120:colors=cyan|aqua[fg]; \
     [bg][fg]overlay" \
    -q:v 3 showwavespic_bg.jpg