• #audio
  • #wav
  • #opus
  • #ffmpeg
  • #github-actions
  • #cloudflare
未分類

音声ファイル変換パイプライン

概要

このプロジェクトではWAVファイルをGitHubにプッシュし、ビルド時に自動でOpusに変換してCloudflareにデプロイする。

[開発PC]          [GitHub Actions]           [Cloudflare]
   │                    │                        │
   │  .wav をpush       │                        │
   ├──────────────────►│                        │
   │                    │  FFmpegで変換          │
   │                    │  .wav → .opus          │
   │                    │                        │
   │                    │  .opus をデプロイ       │
   │                    ├───────────────────────►│
   │                    │                        │

あなたがやること

1. WAVファイルを保存

WAVファイルを以下のディレクトリに保存する。

apps/web/public/audio/
└── boki3/
    └── chapter4_0/
        ├── boki3_ch4_0_00.wav  ← ここにWAVを置く
        ├── boki3_ch4_0_01.wav
        └── ...

2. Vueコンポーネントでは .webm を指定

重要: コード内では .webm 拡張子を使う(変換後のファイル名)

// animation-demo-2.vue
audioUrl: '/audio/boki3/chapter4_0/boki3_ch4_0_00.webm'  // ← .webm

なぜ.opusではなく.webm.opusファイル(生のOpusストリーム)はdurationメタデータが欠けやすく、ブラウザで再生時間が取得できない問題があります。.webmコンテナ(Opus音声入り)なら正しくdurationが保持されます。

3. GitHubにプッシュ

git add .
git commit -m "Add audio files"
git push origin master

これだけでOK。あとは自動で処理される。

自動で起こること(GitHub Actions)

  1. FFmpegをインストール(Ubuntu環境)
  2. Nuxtビルド実行pnpm build
  3. ビルドフック.wav.webm(Opus音声)に変換
  4. 元のWAVを削除(デプロイサイズ削減)
  5. Cloudflareにデプロイ.webmファイルのみ)

なぜWAVをGitHubにプッシュするのか?

方法メリットデメリット
WAVをpush(採用)編集しやすい、履歴管理できるリポジトリサイズが大きくなる
Opusに変換してからpushリポジトリが軽い毎回手動変換が必要
外部ストレージ(S3等)リポジトリが軽い設定が複雑、コスト発生

結論: 音声ファイルが少量ならWAVをpushするのがシンプルで管理しやすい。

ファイルサイズ削減効果

形式1分あたり品質
WAV~10MB完全(非圧縮)
Opus 96kbps~0.7MB高品質(音声に最適)

約90%のサイズ削減になる。

関連ファイル

変換処理(nuxt.config.ts)

// apps/web/nuxt.config.ts の hooks セクション
'nitro:build:public-assets': async (nitro) => {
  // ... WAV→Opus変換処理
}

GitHub Actions(deploy.yml)

# .github/workflows/deploy.yml
- name: Install FFmpeg
  run: sudo apt-get update && sudo apt-get install -y ffmpeg

トラブルシューティング

音声が再生されない

  1. コードで .webm を指定しているか確認
  2. ビルドログで変換成功を確認
  3. ブラウザの開発者ツールでネットワークエラーを確認

ローカル開発時

ローカルでは .wav ファイルがそのまま public/ にあるため、開発サーバー(pnpm dev)では .wav が配信される。

フォールバック機能により、コードで.webmを指定していても、自動的に.wavにフォールバックするので、開発時もそのまま動作する。

ビルド後のプレビュー(本番と同じ.webmで確認したい場合):

# PowerShellの場合(セミコロンで区切る)
pnpm build; npx wrangler pages dev dist

# または別々に実行
pnpm build
npx wrangler pages dev dist

&& はPowerShellでは使えません

まとめ

  1. WAVファイルpublic/audio/ に保存
  2. コードでは .webm を指定
  3. git push するだけ
  4. 自動で変換&デプロイされる