FFmpeg だけで、音声ファイルから波形やスペクトログラム(周波数ごとの音の強さを色で表した図)の画像や動画を作れます。ポッドキャストの 1 話を YouTube に上げるときや、波形のサムネイル画像がほしいときに使えます。使うフィルタは、目的に合わせて 3 系統あります。
| 欲しいもの | フィルタ | 出力 |
|---|---|---|
| 波形の静止画(全体像) | showwavespic |
PNG 1 枚 |
| 再生に合わせて動く波形 | showwaves |
動画 |
| 周波数の静止画 / 動画 | showspectrumpic / showspectrum |
PNG / 動画 |
| 周波数バー(イコライザー風) | showfreqs |
動画 |
波形の静止画(showwavespic)
ffmpeg -i input.mp3 -filter_complex "showwavespic=s=1920x480" -frames:v 1 waveform.png
音声全体の波形を 1 枚の画像に描きます。-frames:v 1 は「1 フレームだけ出力する」という指定です。showwavespic はもともと 1 枚しか出力しないので、付けなくても同じ画像ができます。背景は透明です(透明度の情報を持つ RGBA 形式)。
色とサイズ
ffmpeg -i input.mp3 -filter_complex "showwavespic=s=1920x480:colors=#00d4aa" -frames:v 1 waveform.png
colors には、16 進の色コードか色の名前(white、red など)を書きます。ステレオ音源で左右のチャンネルを上下に分けて別の色にするには、split_channels=1 を付けて、色を | で区切って並べます。
ffmpeg -i input.mp3 -filter_complex "showwavespic=s=1920x480:split_channels=1:colors=#00d4aa|#ff6b6b" -frames:v 1 waveform.png
背景色を付ける
SNS の投稿画像など、背景が透明だと困るときは、color(単色の映像を作るソース)で背景を作り、overlay で波形を重ねます。
ffmpeg -i input.mp3 -filter_complex "color=c=#0f1117:s=1920x480[bg];[0:a]showwavespic=s=1920x480:colors=#00d4aa[fg];[bg][fg]overlay=format=auto" -frames:v 1 waveform.png
見た目のオプション
| オプション | 値 | 効果 |
|---|---|---|
scale |
lin(既定)/ log / sqrt / cbrt |
振幅の縮尺。話し声のような小さい音は sqrt や log にすると見えやすい |
draw |
scale(既定)/ full |
色の付け方。scale はチャンネルが重なる部分ほど濃く塗り、full はどこも指定した色で塗る。波形の形は変わらない |
filter |
average(既定)/ peak |
1 ピクセルに複数サンプルが入るときに平均をとるかピークをとるか |
ffmpeg -i input.mp3 -filter_complex "showwavespic=s=1920x480:draw=full" -frames:v 1 waveform.png
動く波形の動画(showwaves)
ffmpeg -i input.mp3 -filter_complex "[0:a]showwaves=s=1280x720:mode=cline:rate=30:colors=#00d4aa,format=yuv420p[v]" -map "[v]" -map 0:a -c:v libx264 -c:a aac -shortest output.mp4
s=1280x720— 出力の解像度mode=cline— 中央の線から上下対称に塗ります。ほかにpoint(点)、line(線)、p2p(点を線で結ぶ)がありますrate=30— 映像のフレームレート(既定は 25)format=yuv420p— showwaves の出力は RGBA なので、H.264 で多くの環境が再生できる yuv420p に変換します-shortest— 音声が終わったところで動画も終わらせます
-vf ではなく -filter_complex を使うのは、音声を入力にして映像を出力する、種類をまたぐフィルタだからです。
背景色付き
showwaves も背景が透明なので、静止画と同じ方法で背景を敷きます。背景の color にも r=30 を付けて、フレームレートをそろえてください。
ffmpeg -i input.mp3 -filter_complex "color=c=#0f1117:s=1280x720:r=30[bg];[0:a]showwaves=s=1280x720:mode=cline:rate=30:colors=#00d4aa[w];[bg][w]overlay=format=auto[v]" -map "[v]" -map 0:a -c:v libx264 -pix_fmt yuv420p -c:a aac -shortest output.mp4
ジャケット画像の上に波形を置く(ポッドキャスト用)
静止画を -loop 1 で繰り返して動画にし、その下の部分に細長い波形を重ねます。ポッドキャストや楽曲の公開によく使われる形です。
ffmpeg -loop 1 -i cover.png -i input.mp3 -filter_complex "[0:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2[bg];[1:a]showwaves=s=1280x200:mode=cline:rate=30:colors=#00d4aa[w];[bg][w]overlay=0:520:format=auto[v]" -map "[v]" -map 1:a -c:v libx264 -pix_fmt yuv420p -c:a aac -shortest output.mp4
scale=...:force_original_aspect_ratio=decrease,pad=... は、画像を縦横比を保ったまま 1280×720 に収め、余白を黒で埋める決まった書き方です。overlay=0:520 で、高さ 200 の波形を画面の下(y=520〜720)に置いています。
スペクトログラム(showspectrumpic / showspectrum)
スペクトログラムは、横軸が時間、縦軸が周波数で、色が音の強さを表します。ノイズの帯や、高い音が残っているかどうか(MP3 の 16 kHz カットなど)がひと目で分かるので、音質のチェックにも使えます。
ffmpeg -i input.mp3 -filter_complex "showspectrumpic=s=1920x480" -frames:v 1 spectrum.png
既定では、軸と目盛りが描かれます。見た目のために消したいときは legend=0 にします。色の付け方は color で変えられます(showspectrumpic の既定は intensity。ほかに rainbow など)。
ffmpeg -i input.mp3 -filter_complex "showspectrumpic=s=1920x480:legend=0:color=intensity" -frames:v 1 spectrum.png
動画にするには showspectrum を使います。slide=scroll にすると、右から左へ流れる表示になります。
ffmpeg -i input.mp3 -filter_complex "[0:a]showspectrum=s=1280x720:mode=combined:color=intensity:slide=scroll[v]" -map "[v]" -map 0:a -c:v libx264 -pix_fmt yuv420p -c:a aac -shortest output.mp4
周波数バー(showfreqs)
周波数の帯ごとにバーが上下する、イコライザーのような表示です。
ffmpeg -i input.mp3 -filter_complex "[0:a]showfreqs=s=1280x720:mode=bar:colors=#00d4aa[v]" -map "[v]" -map 0:a -c:v libx264 -pix_fmt yuv420p -c:a aac -shortest output.mp4
showfreqs にも rate オプションがあり、既定は 25fps です。30fps にしたいときは rate=30 を足してください。
実測: 描画時間とファイルサイズ
3 分(180 秒)のステレオ MP3 で、フィルタごとの処理時間と出力サイズを測りました。素材は anoisesrc=color=pink:d=180:r=44100 で作ったピンクノイズ(雑音の一種)を -ac 2 でステレオにして、192 kb/s の MP3 にしたもので、波形の情報量がいちばん多い、最悪のケースです(実際の音楽や会話では、これより小さくなります)。コマンドは本文のものに -preset veryfast を足したものです(-crf 23 は既定値)。i9-14900KF、FFmpeg 8.1 で、2026-09-24 に計測しました。
| 出力 | 処理時間 | サイズ |
|---|---|---|
showwavespic 1920×480 PNG |
0.25 s | 11 KB |
showspectrumpic 1920×480 PNG |
0.40 s | 1.4 MB |
showwaves cline 1280×720 / 30fps / 3 分 |
18.4 s | 148.4 MB |
showwaves cline 1920×1080 / 30fps / 3 分 |
21.3 s | 161.0 MB |
showspectrum 1280×720 / 3 分 |
5.7 s | 13.4 MB |
showfreqs bar 1280×720 / 3 分 |
17.6 s | 35.8 MB |
分かることは 2 つです。
showwavesの動画は H.264 で圧縮しにくい。 細い線が毎フレーム画面全体で激しく動くので、動き予測(前のフレームとの違いだけを記録して容量を減らす仕組み)がほとんど効きません。3 分で 148.4 MB(約 6.6 Mbps)になりました。同じ音源のスペクトログラム動画は 13.4 MB です。同じ 1280×720 の条件で比べると、mode=pointで 71.2 MB、高さ 200px の帯だけの動画で 80.7 MB、-crf 28で 95.8 MB まで下がりました(mode=lineは 92.0 MB)。塗りつぶすclineがいちばん大きくなります。- 720p と 1080p で、サイズはあまり変わりません(148.4 MB と 161.0 MB)。画素数が 2.25 倍になっても、サイズの増え方は 1 割以内でした。
よくある質問
出力が真っ黒 / 波形が見えない
showwaves と showwavespic の出力は、背景が透明(RGBA)です。透明を表示できないプレイヤーや画像ビューアでは、背景が黒く見えます。上の「背景色を付ける」と同じように、color と overlay で背景を敷いてください。声の小さい録音は、scale=sqrt か scale=log にすると波形が見えやすくなります。
ステレオを 1 本の波形にしたい
showwavespic は既定で、チャンネルを重ねて描きます(split_channels=0)。完全に 1 本にしたいときは、前に aformat=channel_layouts=mono を入れて、先にモノラルにしてください。
波形だけの動画に音が入っていない
-map 0:a を忘れると、映像だけの動画になります。-map を 1 つでも書くと、FFmpeg はストリームを自動では選ばなくなります。-map "[v]" で映像を指定したら、音声も -map 0:a で指定してください。
関連ツール
波形動画作成ツールを使うと、上の showwaves と同じような動画を、音声ファイルからブラウザの中で作れます。
関連記事
- 音声を抽出する — 動画から音声だけを取り出す
- 音量の測定(volumedetect) — 波形の前にレベルを確認する
- ラウドネス正規化 — 配信前の音量揃え
- GIF 作成 — 短い波形をアニメ GIF にする場合