当前位置: 首页 > 教程资源 > FFmpeg 教程 > 正文
如何使用 FFmpeg 生成音频波形高级教程

如何使用 FFmpeg 生成音频波形高级教程

作者:大眼仔~旭 日期:2个月前 (07-27) 评论:0 条

摘要:音频波形或音频图是以视频形式显示声音的一种视觉表现形式。在社交媒体上经常可以看到播客视频或播客广告中包含动画波形,使视频更具视觉吸引力,并为静态场景添加动画效果。 在本教程中,您将学习如何使用名为 FFmpeg 的工具创建播客视频中可能出现的波形视频。 关于 FFmpeg FFmpeg 是一款免费的开源命令行工具,用于…

音频波形或音频图是以视频形式显示声音的一种视觉表现形式。在社交媒体上经常可以看到播客视频或播客广告中包含动画波形,使视频更具视觉吸引力,并为静态场景添加动画效果。

在本教程中,您将学习如何使用名为 FFmpeg 的工具创建播客视频中可能出现的波形视频。

关于 FFmpeg

FFmpeg 是一款免费的开源命令行工具,用于处理视频、音频和其他形式的多媒体。你可以用它来完成文件转换、编辑、转码等任务。它的多功能性使其成为开发人员和视听工程师的首选。

FFmpeg 生成音频波形

安装 FFmpeg

要跟上本指南并生成波形,您需要在电脑上安装 FFmpeg。首先,运行以下命令检查是否已安装。

1
ffmpeg --version

如果已安装,您应该能看到版本号和构建信息。

如果没有,请访问 FFmpeg 官方下载页面,选择适合您操作系统的版本,然后按照安装说明进行操作。

通常,这包括下载 FFmpeg 软件包、解压缩其内容,以及将 FFmpeg 可执行文件夹添加到系统的 PATH 中。

FFmpeg 波形命令

在本演示中,我们将使用以下音频,文件名为 input.mp3。

打开终端并导航到音频文件所在的目录,然后运行以下 FFmpeg 命令:

1
ffmpeg -i input.mp3 -r 25 -filter_complex "[0:a]compand,showwaves=size=854x480:colors=white,format=yuv420p[vout]" -map "[vout]" -map 0:a -c:v libx264 -c:a copy output.mp4

当 FFmpeg 处理音频文件并生成名为 output.mp4 的视频文件时,你会看到命令的输出结果。

filter-complex 和 showwaves filter 的工作原理

该命令有几个参数共同作用生成波形。最重要的部分是 -filter_complex 参数和 showwaves=size=854×480:colors=white 值。FFmpeg -filter_complex 参数允许对媒体文件应用多个滤波器。

在本例中,我们使用 showwaves 过滤器生成波形。showwaves 过滤器有多个选项,可让您自定义波形,如大小、颜色和样式。在本例中,我们将尺寸设置为 854×480 像素,颜色设置为白色。

compand 过滤器用于压缩和扩展波形以填充视频帧。format=yuv420p 参数用于将像素格式设置为 yuv420p,与大多数视频播放器兼容。

[0:a] 为输入音频流输入,[vout] 为输出视频流。

其余参数细目

该命令还有几个值得一提的参数:

  • -i input.mp3 告诉 FFmpeg 我们要用来生成波形的音频文件。
  • -r 25 将输出视频的帧频设置为每秒 25 帧(fps)。
  • -map “[vout]” 将输出视频流映射到输出文件。
  • -map 0:a 将输入音频流映射到输出文件。
  • -c:v libx264 指定输出文件要使用的视频编解码器。在本例中,我们使用 H.264 (mp4) 编解码器。
  • -c:a copy 将音频流从输入文件复制到输出文件,无需重新编码。
  • output.mp4 指定输出视频文件的名称。

如何设计波形外观

在前面的示例中,我们生成了一个基本波形。您可以通过更改 showwaves 滤波器的参数来定制波形的外观。以下是一些可以调整的常用参数:

绘制参数

绘制选项可设置为全图或缩放,控制波形中采样的绘制方式。默认值为缩放,可缩放每个绘制样本的像素。全图选项则直接绘制每个样本。使用完全绘制时,波形看起来更醒目,也更容易看清。

下面是相同的命令,但绘制参数设置为全图:

1
ffmpeg -i input.mp3 -r 25 -filter_complex "[0:a]compand,showwaves=size=854x480:colors=white:draw=full,format=yuv420p[vout]" -map "[vout]" -map 0:a -c:v libx264 -c:a copy output.mp4

模式参数

模式参数控制波形的样式。默认值为点(point),即绘制单个采样点而不用线条连接。其他可用模式包括线、cline 和 p2p。

以前面的命令为例,下面是一个使用线模式的示例:

1
ffmpeg -i input.mp3 -r 25 -filter_complex "[0:a]compand,showwaves=size=854x480:colors=white:draw=full:mode=line,format=yuv420p[vout]" -map "[vout]" -map 0:a -c:v libx264 -c:a copy output.mp4

使用 cline 模式:

1
ffmpeg -i input.mp3 -r 25 -filter_complex "[0:a]compand,showwaves=size=854x480:colors=white:draw=full:mode=cline,format=yuv420p[vout]" -map "[vout]" -map 0:a -c:v libx264 -c:a copy output.mp4

最后,使用 p2p 模式:

1
ffmpeg -i input.mp3 -r 25 -filter_complex "[0:a]compand,showwaves=size=854x480:colors=white:draw=full:mode=p2p,format=yuv420p[vout]" -map "[vout]" -map 0:a -c:v libx264 -c:a copy output.mp4

刻度参数

缩放参数用于调整波形振幅,影响波形的波峰和波谷。默认值为 lin(线性)。其他可用值包括 log(对数)、sqrt(平方根)和 cbrt(立方根)。

接上一条命令,下面是一个使用对数标度的示例:

1
ffmpeg -i input.mp3 -r 25 -filter_complex "[0:a]compand,showwaves=size=854x480:colors=white:draw=full:mode=p2p:scale=log,format=yuv420p[vout]" -map "[vout]" -map 0:a -c:v libx264 -c:a copy output.mp4

使用 sqrt 缩放:

1
ffmpeg -i input.mp3 -r 25 -filter_complex "[0:a]compand,showwaves=size=854x480:colors=white:draw=full:mode=p2p:scale=sqrt,format=yuv420p[vout]" -map "[vout]" -map 0:a -c:v libx264 -c:a copy output.mp4

并使用 cbrt 缩放:

1
ffmpeg -i input.mp3 -r 25 -filter_complex "[0:a]compand,showwaves=size=854x480:colors=white:draw=full:mode=p2p:scale=cbrt,format=yuv420p[vout]" -map "[vout]" -map 0:a -c:v libx264 -c:a copy output.mp4

颜色参数

到目前为止,我们所有的波形都是白色的。您可以将波形颜色设置为任何您喜欢的颜色。您可以使用内置的 FFmpeg 颜色名称,如白色、红色或蓝色。可用的颜色名称列在 FFmpeg 颜色指南中。

您也可以使用 HTML 风格的十六进制颜色,如 0x25d3d0 或 #25d3d0。根据您的 FFmpeg 版本,您还可以使用 @ 后跟一个介于 0 和 1 之间的值为颜色添加透明度。例如,0x25d3d0@0.3 将颜色设置为 30% 不透明度。或者在十六进制代码的末尾添加阿尔法设置,如 0x25d3d0CC。

下面是一个使用 Shotstack 重点色 #25d3d0 的示例:

1
ffmpeg -i input.mp3 -r 25 -filter_complex "[0:a]compand,showwaves=size=854x480:colors=#25d3d0:draw=full:mode=line,format=yuv420p[vout]" -map "[vout]" -map 0:a -c:v libx264 -c:a copy output.mp4

多种颜色

您也可以使用多种颜色,方法是用管道 | 符号分隔它们。例如,colors=blue|yellow 将创建一个包含蓝色和黄色的波形。

对于不同类型的音频,例如音乐文件,使用多种波形颜色效果更好。下面是一个使用重点色、辅助紫色 #7925d3 和音乐文件的示例:

1
ffmpeg -i input.mp3 -r 25 -filter_complex "[0:a]compand,showwaves=size=854x480:colors=#25d3d0|#7925d3:draw=full:mode=line,format=yuv420p[vout]" -map "[vout]" -map 0:a -c:v libx264 -c:a copy output.mp4

尺寸参数

您可以使用尺寸参数调整波形的大小。这也将决定视频的输出大小,除非您使用其他 FFmpeg 参数来裁剪和调整视频大小。

我们的原始视频为 854×480 像素。下面是一个创建 400px x 400px 小正方形视频的示例:

1
ffmpeg -i input.mp3 -r 25 -filter_complex "[0:a]compand,showwaves=size=400x400:colors=#25d3d0:draw=full:mode=line,format=yuv420p[vout]" -map "[vout]" -map 0:a -c:v libx264 -c:a copy output.mp4

背景颜色

到目前为止,所有波形视频的背景都是黑色的。使用以下命令可以更改背景颜色:

1
ffmpeg -i input.mp3 -f lavfi -i color=c=#7925d3:s=854x480 -r 25 -filter_complex "[0:a]compand,showwaves=size=854x480:colors=#25d3d0:draw=full:mode=line[vout];[1:v][vout]overlay=format=auto:shortest=1,format=yuv420p[v]" -map "[v]" -map 0:a -c:v libx264 -c:a copy output.mp4

在本例中,我们添加了以下内容:

-f lavfi -i color=c=#7925d3:s=854×480 使用单一滤镜并创建纯色背景。c 参数是十六进制格式的颜色,s 参数是视频的大小。纯色的大小应与波形视频的大小相匹配。

[1:v][vout]overlay=format=auto:shortest=1,format=yuv420p[v]使用叠加滤波器将波形输出叠加到背景颜色上。1:v][vout]和[v]符号控制滤波器的连锁方式。

shortest=1 参数可确保输出视频与最短输入流(即波形视频)的长度相同(如果不设置为最短输入流,背景色将永久播放)。

透明背景

在现实场景中,通常需要将波形叠加到图像或其他视频之上。为此,您需要创建一个透明背景的视频。我们一直使用的 H.264 编解码器无法做到这一点。

相反,您需要使用 QuickTime 动画编解码器 -c:v qtrle, argb 像素格式,并将视频保存为 .mov 文件。QuickTime 动画编解码器支持 alpha 透明背景。

下面是一个创建透明背景波形视频的命令示例:

1
ffmpeg -i input.mp3 -r 25 -filter_complex "[0:a]compand,showwaves=size=854x480:colors=#25d3d0:draw=full:mode=line,format=argb[vout]" -map "[vout]" -map 0:a -c:v qtrle -c:a copy output.mov

输出视频将是一个透明背景的 .mov 文件。您可以在视频编辑软件中将此视频叠加到其他视频或图像之上。

删除音频

也有可能您想将音频分离出来,不将其与波形视频包含在一起。为此,您只需删除命令中的 -map 0:a -c:a copy 参数即可。下面是一个例子:

1
ffmpeg -i input.mp3 -r 25 -filter_complex "[0:a]compand,showwaves=size=854x480:colors=#25d3d0:draw=full:mode=line,format=argb[vout]" -map "[vout]" -map 0:a -c:v qtrle output.mov

总结

本指南介绍了 FFmpeg showwaves 过滤器的主要功能,以及如何从音频文件创建波形视频。您将学习如何通过调整绘制、模式、比例、颜色、大小和背景等参数来定制波形外观。您还学会了如何创建透明背景的波形视频,以及如何从输出视频中移除音频。

您还可以探索 FFmpeg showwaves 过滤器的其他一些选项,包括 n 和 split_channels。您可以通过数百种不同的方法来组合所有这些设置,以创建各种波形模式,让您的视频栩栩如生。

声明:大眼仔旭 | 本文采用署名-非商业性使用-相同方式共享 4.0 国际许可协议[CC BY-NC-SA]进行授权
文章名称:《如何使用 FFmpeg 生成音频波形高级教程
文章固定链接:http://www.dayanzai.me/ffmpeg-create-waveform.html
本站资源仅供个人学习交流,请于下载后 24 小时内删除,不允许用于商业用途,否则法律问题自行承担。
转载声明
全部评论: (0条)
^_^ 暂无评论!

发表评论

返回顶部