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 つです。

  1. 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 がいちばん大きくなります。
  2. 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 と同じような動画を、音声ファイルからブラウザの中で作れます。

関連記事