关于 ffmpeg-waveforms-visualization
面向音乐和播客视频素材制作的技能,介绍如何用 FFmpeg 创建音频可视化效果。内容涵盖波形、频谱、频率和立体声相位,可生成静态图像、视频及叠加效果。
主要功能
- 01动态与静态波形
- 02频谱和频率显示
- 03立体声相位与电平可视化
- 04颜色和缩放滤镜选项
- 05音频可视化叠加与组合
适用场景
- 01制作播客缩略图波形图
- 02为音乐视频添加音频响应效果
- 03构建频谱分析器叠加层
- 04查看立体声相位和音频电平
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ josiahsiegel/ claude-plugin-marketplace --skill ffmpeg-waveforms-visualization安装后在 Claude Code 中输入/ffmpeg-waveforms-visualization确认已加载。
详细介绍
关键指南
Windows 文件路径要求
必须:在 Windows 上始终使用反斜杠表示文件路径
在 Windows 上使用 Edit 或 Write 工具时,必须在文件路径中使用反斜杠(\),而不是正斜杠(/)。
文档指南
除非用户明确要求,否则绝不创建新的文档文件。
快速参考
| 可视化效果 | 滤镜 | 输出 | 命令片段 |
|---|---|---|---|
| 动态波形 | showwaves | 视频 | [0:a]showwaves=s=1280x720:mode=line[v] |
| 静态波形 | showwavespic | 图像 | [0:a]showwavespic=s=1280x240:colors=0x00FF00 |
| 频谱 | showspectrum | 视频 | [0:a]showspectrum=s=1280x720:color=fire |
| 频率条 | showfreqs | 视频 | [0:a]showfreqs=s=1280x720:mode=bar |
| 矢量示波器 | avectorscope | 视频 | [0:a]avectorscope=s=512x512:mode=lissajous |
| 配色方案 | 效果 |
|---|---|
rainbow | 全频谱渐变 |
fire | 暖橙色/红色色调 |
cool | 蓝色色调 |
viridis | 科学色图 |
何时使用此技能
用于创建音频可视化效果:
- 音乐视频波形背景
- 播客视频缩略图
- SoundCloud 风格的波形图像
- 频谱分析仪叠加效果
- 音频响应式可视化效果
FFmpeg 波形与音频可视化(2025)
使用 FFmpeg 生成音频波形、频谱分析仪和音频响应式可视化效果的完整指南。
音频可视化滤镜
滤镜概览
| 滤镜 | 输出 | 用途 |
|---|---|---|
| showwaves | 动态波形视频 | 音乐视频、现场演出可视化 |
| showwavespic | 静态波形图像 | 缩略图、播客 |
| showspectrum | 频谱分析仪视频 | 频率分析 |
| showspectrumpic | 静态频谱图像 | 音频指纹识别 |
| showfreqs | 频率条视频 | 均衡器可视化 |
| avectorscope | 立体声相位可视化 | 音频工程 |
| ahistogram | 音频电平直方图 | 响度分析 |
| showcqt | 常 Q 变换 | 音符可视化 |
波形生成(showwaves)
基本动态波形
# Simple waveform video
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showwaves=s=1280x720:mode=line[v]" \
-map "[v]" -map 0:a \
-c:v libx264 -c:a aac \
waveform.mp4
# Waveform from video with audio
ffmpeg -i video.mp4 \
-filter_complex "[0:a]showwaves=s=1920x200:mode=line[wave];[0:v][wave]overlay=0:H-200[v]" \
-map "[v]" -map 0:a \
-c:v libx264 -c:a copy \
video_with_wave.mp4
波形模式
# Line mode (default) - connected lines
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showwaves=s=1280x360:mode=line[v]" \
-map "[v]" waveform_line.mp4
# Point mode - individual points
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showwaves=s=1280x360:mode=point[v]" \
-map "[v]" waveform_point.mp4
# Filled mode - filled area
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showwaves=s=1280x360:mode=p2p[v]" \
-map "[v]" waveform_filled.mp4
# Centered line mode
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showwaves=s=1280x360:mode=cline[v]" \
-map "[v]" waveform_centered.mp4
可用模式
| 模式 | 描述 |
|---|---|
| point | 为每个采样点绘制一个点 |
| line | 在采样点之间绘制连线 |
| p2p | 绘制点到点波形(填充) |
| cline | 居中线条模式 |
彩色波形
# Single color waveform
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showwaves=s=1280x360:mode=cline:colors=0x00FF00[v]" \
-map "[v]" green_wave.mp4
# Multi-channel colors (stereo)
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showwaves=s=1280x360:mode=line:colors=red|blue:split_channels=1[v]" \
-map "[v]" stereo_wave.mp4
# Gradient-style (requires multiple passes)
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showwaves=s=1280x360:mode=cline:colors=0xFF6600[v]" \
-map "[v]" orange_wave.mp4
速率和缩放
# Adjust waveform speed (n = samples per column)
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showwaves=s=1280x360:mode=line:n=2[v]" \
-map "[v]" fast_wave.mp4
# Adjust scale (amplitude)
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showwaves=s=1280x360:mode=line:scale=lin[v]" \
-map "[v]" linear_wave.mp4
# Logarithmic scale (better for quiet audio)
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showwaves=s=1280x360:mode=line:scale=log[v]" \
-map "[v]" log_wave.mp4
# Square root scale
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showwaves=s=1280x360:mode=line:scale=sqrt[v]" \
-map "[v]" sqrt_wave.mp4
# Cube root scale (compressed dynamics)
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showwaves=s=1280x360:mode=line:scale=cbrt[v]" \
-map "[v]" cbrt_wave.mp4
缩放选项
| 缩放 | 描述 | 最适用于 |
|---|---|---|
| lin | 线性振幅 | 一般用途 |
| log | 对数 | 低音量音频、语音 |
| sqrt | 平方根 | 适度压缩 |
| cbrt | 立方根 | 强力压缩 |
静态波形图像(showwavespic)
基本波形图像
# Generate waveform PNG
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showwavespic=s=1280x240:colors=0x00FF00" \
-frames:v 1 \
waveform.png
# High-resolution waveform
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showwavespic=s=3840x480:colors=white" \
-frames:v 1 \
waveform_hires.png
样式化波形图像
# Split stereo channels
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showwavespic=s=1280x480:split_channels=1:colors=0xFF0000|0x0000FF" \
-frames:v 1 \
stereo_waveform.png
# Filled style
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showwavespic=s=1280x240:colors=0x1E90FF:draw=full" \
-frames:v 1 \
filled_waveform.png
# Scale adjustment
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showwavespic=s=1280x240:scale=sqrt:colors=0xFFD700" \
-frames:v 1 \
golden_waveform.png
带背景的波形
# Waveform on colored background
ffmpeg -i audio.mp3 \
-filter_complex "color=c=0x1a1a2e:s=1280x240:d=1[bg];\
[0:a]showwavespic=s=1280x240:colors=0x00FF88[wave];\
[bg][wave]overlay[v]" \
-map "[v]" -frames:v 1 \
waveform_bg.png
# Waveform on gradient background
ffmpeg -f lavfi \
-i "gradients=s=1280x240:c0=0x000033:c1=0x003366:duration=1" \
-i audio.mp3 \
-filter_complex "[1:a]showwavespic=s=1280x240:colors=0x00FFFF[wave];\
[0:v][wave]overlay[v]" \
-map "[v]" -frames:v 1 \
waveform_gradient.png
频谱可视化(showspectrum)
基本频谱分析仪
# Animated spectrum
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showspectrum=s=1280x720:mode=combined:color=rainbow[v]" \
-map "[v]" -map 0:a \
-c:v libx264 -c:a aac \
spectrum.mp4
# Vertical spectrum
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showspectrum=s=720x1280:orientation=vertical:color=fire[v]" \
-map "[v]" -map 0:a \
spectrum_vertical.mp4
频谱模式
# Combined channels
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showspectrum=s=1280x720:mode=combined[v]" \
-map "[v]" spectrum_combined.mp4
# Separate channels
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showspectrum=s=1280x720:mode=separate[v]" \
-map "[v]" spectrum_separate.mp4
配色方案
# Rainbow spectrum
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showspectrum=s=1280x720:color=rainbow[v]" \
-map "[v]" spectrum_rainbow.mp4
# Fire spectrum
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showspectrum=s=1280x720:color=fire[v]" \
-map "[v]" spectrum_fire.mp4
# Cool spectrum
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showspectrum=s=1280x720:color=cool[v]" \
-map "[v]" spectrum_cool.mp4
# Channel-based colors
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showspectrum=s=1280x720:color=channel[v]" \
-map "[v]" spectrum_channel.mp4
可用配色方案
| 颜色 | 描述 |
|---|---|
| channel | 使用声道颜色 |
| rainbow | 彩虹渐变 |
| moreland | 发散色图 |
| nebulae | 太空风格配色 |
| fire | 暖火焰色 |
| fiery | 强烈火焰色 |
| fruit | 水果风格配色 |
| cool | 冷蓝色调 |
| magma | 火山色调 |
| green | 绿色渐变 |
| viridis | 科学色图 |
| plasma | 等离子色图 |
| cividis | 色盲友好配色 |
| terrain | 地形风格配色 |
频谱缩放和窗口
# Logarithmic frequency scale
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showspectrum=s=1280x720:fscale=log:color=fire[v]" \
-map "[v]" spectrum_log.mp4
# Different window functions
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showspectrum=s=1280x720:win_func=blackman:color=rainbow[v]" \
-map "[v]" spectrum_blackman.mp4
# Higher frequency resolution
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showspectrum=s=1280x720:win_size=4096:color=fire[v]" \
-map "[v]" spectrum_hires.mp4
静态频谱图像(showspectrumpic)
# Full audio spectrogram
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showspectrumpic=s=1920x480:color=fire[v]" \
-map "[v]" \
spectrogram.png
# With legend
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showspectrumpic=s=1920x480:color=rainbow:legend=1[v]" \
-map "[v]" \
spectrogram_legend.png
# Logarithmic frequency scale
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showspectrumpic=s=1920x480:fscale=log:color=viridis[v]" \
-map "[v]" \
spectrogram_log.png
频率条(showfreqs)
基本频率显示
# Bar-style equalizer
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showfreqs=s=1280x720:mode=bar:ascale=log:colors=green[v]" \
-map "[v]" -map 0:a \
freqs_bar.mp4
# Line-style frequency display
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showfreqs=s=1280x720:mode=line:colors=cyan[v]" \
-map "[v]" -map 0:a \
freqs_line.mp4
# Dot-style display
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showfreqs=s=1280x720:mode=dot:colors=0xFF00FF[v]" \
-map "[v]" -map 0:a \
freqs_dot.mp4
均衡器风格可视化
# Classic equalizer bars
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showfreqs=s=1280x720:mode=bar:fscale=log:ascale=log:win_size=1024:colors=0x00FF00[v]" \
-map "[v]" -map 0:a \
-c:v libx264 -c:a aac \
equalizer.mp4
常 Q 变换(showcqt)
音符可视化
# Basic CQT visualization
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showcqt=s=1920x1080[v]" \
-map "[v]" -map 0:a \
cqt.mp4
# CQT with axis labels
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showcqt=s=1920x1080:axis=1:text=1:fontfile=/path/to/font.ttf[v]" \
-map "[v]" -map 0:a \
cqt_labeled.mp4
# Custom colors
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showcqt=s=1920x1080:sono_g='st(0, floor(log2(400*meter))); if(gt(ld(0),-2), if(lt(ld(0),0),ld(0)+2, if(lt(ld(0),3),1, 3-ld(0))),0)'[v]" \
-map "[v]" -map 0:a \
cqt_custom.mp4
矢量示波器(avectorscope)
立体声相位可视化
# Basic vectorscope
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]avectorscope=s=512x512:mode=lissajous[v]" \
-map "[v]" -map 0:a \
vectorscope.mp4
# Polar mode
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]avectorscope=s=512x512:mode=polar:zoom=1.5[v]" \
-map "[v]" -map 0:a \
vectorscope_polar.mp4
# With color coding
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]avectorscope=s=512x512:mode=lissajous:draw=line:scale=sqrt[v]" \
-map "[v]" -map 0:a \
vectorscope_color.mp4
音频直方图(ahistogram)
音量分布可视化
# Basic audio histogram
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]ahistogram=s=1280x720:dmode=separate[v]" \
-map "[v]" -map 0:a \
histogram.mp4
# Combined mode
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]ahistogram=s=1280x720:dmode=combined:slide=scroll[v]" \
-map "[v]" -map 0:a \
histogram_combined.mp4
组合可视化
视频上的波形
# Waveform overlay at bottom
ffmpeg -i video.mp4 \
-filter_complex "[0:a]showwaves=s=1920x200:mode=cline:[email protected][wave];\
[0:v][wave]overlay=0:H-200[v]" \
-map "[v]" -map 0:a \
-c:v libx264 -c:a copy \
video_waveform.mp4
# Transparent waveform overlay
ffmpeg -i video.mp4 \
-filter_complex "[0:a]showwaves=s=1920x1080:mode=p2p:[email protected]:scale=sqrt[wave];\
[0:v][wave]blend=all_mode=addition[v]" \
-map "[v]" -map 0:a \
video_wave_blend.mp4
多种可视化
# Waveform + Spectrum side by side
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]asplit=2[a1][a2];\
[a1]showwaves=s=640x360:mode=cline:colors=green[wave];\
[a2]showspectrum=s=640x360:color=fire[spec];\
[wave][spec]hstack[v]" \
-map "[v]" -map 0:a \
combined_vis.mp4
# Full visualization dashboard
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]asplit=4[a1][a2][a3][a4];\
[a1]showwaves=s=640x240:mode=cline:colors=cyan[wave];\
[a2]showspectrum=s=640x240:color=fire:scale=log[spec];\
[a3]showfreqs=s=640x240:mode=bar:colors=lime[freq];\
[a4]avectorscope=s=640x240:mode=lissajous[vec];\
[wave][spec]hstack[top];\
[freq][vec]hstack[bottom];\
[top][bottom]vstack[v]" \
-map "[v]" -map 0:a \
dashboard.mp4
带进度条的可视化
# Waveform with animated progress indicator
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showwavespic=s=1280x200:colors=0x333333[bg];\
[0:a]showwaves=s=1280x200:mode=cline:colors=0x00FF00:n=4[wave];\
[bg][wave]overlay[v];\
color=c=red:s=4x200:d=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 audio.mp3)[bar];\
[v][bar]overlay=x='t/$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 audio.mp3)*W'[out]" \
-map "[out]" -map 0:a \
waveform_progress.mp4
播客/音乐视频模板
SoundCloud 风格波形
# Static waveform for music thumbnail
ffmpeg -i audio.mp3 \
-filter_complex "color=c=0x1a1a2e:s=1200x300:d=1[bg];\
[0:a]showwavespic=s=1200x200:colors=0xFF6B00:scale=sqrt[wave];\
[bg][wave]overlay=0:50[v]" \
-map "[v]" -frames:v 1 \
soundcloud_wave.png
音乐可视化视频
# Full music visualizer
ffmpeg -i audio.mp3 -i album_art.jpg \
-filter_complex "[1:v]scale=1920:1080,boxblur=30[bg];\
[0:a]showwaves=s=1920x300:mode=cline:colors=white:scale=sqrt[wave];\
[1:v]scale=400:400[art];\
[bg][wave]overlay=0:H-350[tmp];\
[tmp][art]overlay=(W-400)/2:(H-400)/2-100[v]" \
-map "[v]" -map 0:a \
-c:v libx264 -preset fast -crf 23 -c:a aac -b:a 192k \
music_video.mp4
播客波形视频
# Podcast with waveform and title
ffmpeg -i podcast.mp3 \
-filter_complex "color=c=0x2d3436:s=1920x1080:d=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 podcast.mp3)[bg];\
[0:a]showwaves=s=1920x400:mode=cline:colors=0x74b9ff:scale=sqrt[wave];\
[bg][wave]overlay=0:(H-400)/2[tmp];\
[tmp]drawtext=text='Episode Title':fontsize=72:fontcolor=white:x=(w-tw)/2:y=100[v]" \
-map "[v]" -map 0:a \
-c:v libx264 -c:a aac \
podcast_video.mp4
性能优化
大型音频文件
# Use threading for faster processing
ffmpeg -i long_audio.mp3 \
-filter_complex "[0:a]showwaves=s=1280x360:mode=line:n=4[v]" \
-threads 0 \
-map "[v]" -map 0:a \
-c:v libx264 -preset fast -c:a aac \
output.mp4
硬件加速
# NVENC encoding for visualization
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showspectrum=s=1920x1080:color=fire[v]" \
-map "[v]" -map 0:a \
-c:v h264_nvenc -preset fast -c:a aac \
spectrum_nvenc.mp4
故障排除
常见问题
“缓冲区太小”错误
# Increase buffer size
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showwaves=s=1280x360:mode=line:n=1[v]" \
-map "[v]" output.mp4
波形看起来静音/平坦
# Adjust scale for quiet audio
ffmpeg -i quiet_audio.mp3 \
-filter_complex "[0:a]volume=10,showwaves=s=1280x360:mode=line:scale=log[v]" \
-map "[v]" output.mp4
音频/视频同步问题
# Force frame rate
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showwaves=s=1280x360:mode=line:rate=30[v]" \
-map "[v]" -map 0:a \
-r 30 \
output.mp4
可视化速度过快/过慢
# Adjust samples per column (n)
# Higher n = faster scrolling
# Lower n = slower scrolling
ffmpeg -i audio.mp3 \
-filter_complex "[0:a]showwaves=s=1280x360:mode=line:n=3[v]" \
-map "[v]" output.mp4
本指南介绍 FFmpeg 音频可视化。有关视频转场和特效,请参阅 transitions-effects 技能。
评论
支持 Markdown