audiowaveform
オーディオファイルから波形ビジュアライゼーションを生成します。波形画像の作成、オーディオプレーヤーのビジュアライゼーション構築、Webプレーヤー向けの波形データ生成、ポッドキャストエピソードのプレビュー作成、オーディオサムネイルの生成、ソーシャルメディア向けの波形PNG出力、JSONフォーマットでのピークデータ抽出、オーディオ処理パイプラインへの波形生成統合など、ユーザーのリクエストに対応します。audiowaveform CLIの使用、JSON/バイナリデータ出力、Webプレーヤー統合に対応しています。
description の原文を見る
Generate waveform visualizations from audio files. Use when a user asks to create waveform images, build audio player visualizations, generate waveform data for web players, create podcast episode previews, build audio thumbnails, render waveform PNGs for social media, extract peak data as JSON, or integrate waveform generation into audio processing pipelines. Covers audiowaveform CLI, JSON/binary data output, and web player integration.
SKILL.md 本文
Audiowaveform
概要
BBCの audiowaveform ツールを使用してオーディオファイルからウェーブフォーム可視化を生成します。PNG/SVG ウェーブフォーム画像をレンダリングし、ピークデータを JSON または バイナリ形式で出力して、Web ベースのオーディオプレイヤー(wavesurfer.js、peaks.js)に対応します。ポッドキャストプレイヤー、音楽プラットフォーム、ソーシャルメディアのオーディオプレビュー、およびオーディオウェーブフォームを表示するあらゆる UI に最適です。
使用方法
ステップ1: インストール
# Ubuntu/Debian
apt install -y audiowaveform
# macOS
brew install audiowaveform
# ソースからのインストール(リポジトリにない場合)
apt install -y cmake g++ libmad0-dev libsndfile1-dev libgd-dev libboost-filesystem-dev libboost-program-options-dev libboost-regex-dev
git clone https://github.com/bbc/audiowaveform.git
cd audiowaveform && mkdir build && cd build
cmake .. && make && make install
# 確認
audiowaveform --version
ステップ2: ウェーブフォーム画像を生成
基本的な PNG ウェーブフォーム:
audiowaveform -i episode.wav -o waveform.png
カスタマイズされたウェーブフォーム:
audiowaveform -i episode.mp3 -o waveform.png \
--width 1800 \
--height 200 \
--colors audacity \
--background-color ffffff \
--waveform-color 3b82f6 \
--axis-label-color 666666 \
--border-color ffffff \
--zoom auto
カラースキーム:
audacity— 古典的な Audacity のルック- カスタム: 16進数で
--waveform-color、--background-colorを使用
ソーシャルメディア用高解像度(1200x630 — OG 画像サイズ):
audiowaveform -i episode.wav -o social-preview.png \
--width 1200 --height 630 \
--background-color 1a1a2e \
--waveform-color 00d4ff \
--no-axis-labels
特定の時間範囲:
audiowaveform -i episode.wav -o clip.png \
--start 60 --end 180 \
--width 800 --height 150
チャネルの分離(ステレオ):
audiowaveform -i stereo.wav -o waveform.png --split-channels
ステップ3: ウェーブフォームデータを生成(JSON)
クライアント側でウェーブフォームをレンダリングする Web プレイヤー向け:
# JSON 出力(ピークスデータ)
audiowaveform -i episode.wav -o peaks.json \
--pixels-per-second 20 \
--bits 8
# バイナリ形式(ファイルサイズが小さい)
audiowaveform -i episode.wav -o peaks.dat \
--pixels-per-second 20 \
--bits 8
JSON 構造:
{
"version": 2,
"channels": 1,
"sample_rate": 44100,
"samples_per_pixel": 2205,
"bits": 8,
"length": 1200,
"data": [0, 45, -3, 67, 12, 89, ...]
}
ピクセル/秒のガイドライン:
20— エピソード全体の概要に最適(ポッドキャスト、1〜2時間)50— 楽曲の詳細表示(3〜5分)100— 非常に詳細、短いクリップ向け200+— ウェーブフォーム編集精度
ステップ4: Web プレイヤー統合
wavesurfer.js を使用:
<div id="waveform"></div>
<button onclick="wavesurfer.playPause()">Play/Pause</button>
<script src="https://unpkg.com/wavesurfer.js@7"></script>
<script>
const wavesurfer = WaveSurfer.create({
container: "#waveform",
waveColor: "#3b82f6",
progressColor: "#1d4ed8",
cursorColor: "#ef4444",
barWidth: 2,
barRadius: 2,
barGap: 1,
height: 80,
responsive: true,
// 事前に生成されたピークスを使用して即座にレンダリング
peaks: null, // JSON から読み込まれます
url: "/audio/episode.mp3",
});
// 事前に生成されたピークスを読み込み(クライアント側のデコーディングをスキップ)
fetch("/waveforms/episode-peaks.json")
.then(r => r.json())
.then(data => {
wavesurfer.load("/audio/episode.mp3", [data.data]);
});
</script>
peaks.js(BBC)を使用:
<div id="zoomview-container"></div>
<div id="overview-container"></div>
<script src="https://unpkg.com/peaks.js"></script>
<script>
const audioElement = document.getElementById("audio");
Peaks.init({
containers: {
zoomview: document.getElementById("zoomview-container"),
overview: document.getElementById("overview-container"),
},
mediaElement: audioElement,
dataUri: {
json: "/waveforms/episode-peaks.json",
},
zoomLevels: [256, 512, 1024, 2048],
overview: {
waveformColor: "#3b82f6",
playedWaveformColor: "#1d4ed8",
},
zoomview: {
waveformColor: "#3b82f6",
playedWaveformColor: "#1d4ed8",
},
}, (err, peaks) => {
if (err) console.error(err);
// ピークスインスタンスの準備完了
});
</script>
ステップ5: バッチ処理とパイプライン
すべてのエピソード向けのウェーブフォームを生成:
#!/bin/bash
# generate-waveforms.sh
AUDIO_DIR="./episodes"
OUT_DIR="./waveforms"
mkdir -p "$OUT_DIR"
for f in "$AUDIO_DIR"/*.{mp3,wav}; do
[ -f "$f" ] || continue
base=$(basename "$f" | sed 's/\.[^.]*$//')
# PNG プレビュー
audiowaveform -i "$f" -o "$OUT_DIR/${base}.png" \
--width 1200 --height 150 \
--background-color ffffff --waveform-color 3b82f6
# Web プレイヤー向け JSON ピークス
audiowaveform -i "$f" -o "$OUT_DIR/${base}.json" \
--pixels-per-second 20 --bits 8
# ソーシャルメディアプレビュー
audiowaveform -i "$f" -o "$OUT_DIR/${base}-social.png" \
--width 1200 --height 630 \
--background-color 0f172a --waveform-color 38bdf8 --no-axis-labels
echo "✅ $base"
done
ステップ6: フォーマット間の変換
# バイナリ → JSON
audiowaveform -i peaks.dat -o peaks.json
# JSON → PNG(事前計算されたデータからレンダリング)
audiowaveform -i peaks.json -o waveform.png \
--width 1200 --height 200 \
--zoom auto
# 生のオーディオ → 複数の出力
audiowaveform -i input.wav -o peaks.dat --bits 8 --pixels-per-second 20
audiowaveform -i peaks.dat -o overview.png --width 2000 --height 100
audiowaveform -i peaks.dat -o detail.png --start 60 --end 120 --width 800 --height 200
例
例1: ポッドキャスト Web サイト向けウェーブフォームプレビューを生成
ユーザープロンプト: 「50個のポッドキャストエピソードが MP3 ファイルで ./episodes/ にあります。PNG ウェーブフォームプレビューと JSON ピークデータを各々生成して、wavesurfer.js で Next.js サイトで使えるようにしてください。」
エージェントは以下を実行します:
- audiowaveform がインストールされているか確認し、必要に応じて
aptまたはbrewでインストールします。 - 出力ディレクトリ
./waveforms/png/と./waveforms/json/を作成します。 ./episodes/内のすべての.mp3ファイルを反復処理し、ブランドカラーを使用した 1200x150 の PNG と各エピソードに対して20ピクセル/秒で 8 ビット深度の JSON ピークスファイルを生成する bash ループを記述します。- バッチスクリプトを実行し、生成されたウェーブフォームの数を報告します。
- クライアント側のオーディオデコーディングなしで事前生成された JSON ピークスを読み込んで、即座のウェーブフォームレンダリングを実現する wavesurfer.js コードスニペットを表示します。
例2: ソーシャルメディアオーディオプレビュー画像を作成
ユーザープロンプト: 「ポッドキャストエピソードを Twitter で共有するための OG 画像サイズのウェーブフォームグラフィックスが必要です。ダークバックグラウンド、シアンウェーブフォーム、軸ラベルなし。エピソード10から15です。」
エージェントは以下を実行します:
- エピソードディレクトリ内のエピソード10〜15のオーディオファイルを識別します。
- 各ファイルに対して audiowaveform を
--width 1200 --height 630(OG 画像寸法)、--background-color 0f172a、--waveform-color 06b6d4、および--no-axis-labelsで実行します。 - 出力ファイルを
episode-10-social.pngからepisode-15-social.pngとして保存します。 - ファイルが生成されたことを確認し、ファイルサイズを記録します。
ガイドライン
- コマンドを実行する前に audiowaveform がインストールされているか必ず確認してください。ほとんどのデフォルトパッケージマネージャーでは利用できないため、古いシステムではソースから構築が必要な場合があります。
- Web プレイヤー向けの JSON ピークスデータには
--pixels-per-second 20を--bits 8と共に使用してください。より高い値は概要ウェーブフォーム向けの不要に大きなファイルを生成します。 - クライアント側でのオーディオデコーディングではなく、サーバー側でウェーブフォーム JSON を事前生成してください。これによりリスナーの Web 上での読み込み時間が数秒になるのを排除します。
- ソーシャルメディア画像の場合、
--no-axis-labelsを使用して、小さなサイズで視覚を乱す時間マーカーなしのクリーナーなグラフィックスを生成してください。 - 大規模なバッチを処理する場合、まずバイナリ
.dat形式を生成し、その後.datファイルから PNG と JSON をレンダリングして、オーディオの複数回の読み込みを避けてください。
ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- TerminalSkills
- ライセンス
- Apache-2.0
- 最終更新
- 2026/5/4
Source: https://github.com/TerminalSkills/skills / ライセンス: Apache-2.0