DX支援 読了時間: 4分

Macで音声ファイルを自動で文字起こし&要約する方法:WAVからNotebookLM風ワークフローまで

2025年11月1日

Macで音声ファイルを自動で文字起こし&要約する方法:WAVからNotebookLM風ワークフローまで

KUREBA

ボイスレコーダーで録音した会議やインタビューの音声ファイル。Macに接続するたびに手動でファイルを変換し、内容を聴き直して要約を作成するのは手間がかかります。もし、「ボイスレコーダーをMacに接続したら、自動で音声ファイル(WAV)をMP3に変換し、AIが文字起こしと要約まで行ってくれる」そんな夢のようなワークフローが、費用をほとんどかけずに実現できるとしたらどうでしょうか?

この記事では、Macに標準搭載されている「Automator」と、無料で利用できるオープンソースのツール(FFmpeg, OpenAI Whisperなど)を組み合わせることで、その理想的な自動化環境を構築する方法をステップバイステップで詳しく解説します。

自動化ワークフローの全体像

今回構築する自動化ワークフローは、以下の4つの主要なステップで構成されます。これらの処理を連携させることで、ユーザーが介入することなく、音声ファイルから要約テキストまでを生成します。

図1:自動化ワークフローの全体像
  1. ファイル監視とトリガー: Macの「Automator」を使い、指定したフォルダ(例:ボイスレコーダーのファイルがコピーされるフォルダ)を監視します。新しいWAVファイルが追加されると、自動的にワークフローが起動します。
  2. 音声ファイル変換: コマンドラインツール「FFmpeg」を呼び出し、ファイルサイズの大きいWAVファイルを、扱いやすいMP3形式に高品質なまま変換します。
  3. AIによる文字起こし: オープンソースの高性能な音声認識モデル「OpenAI Whisper」を使い、MP3ファイルを高精度にテキスト化します。この処理はすべてMacのローカル環境で完結するため、プライバシーの面でも安心です。
  4. AIによる要約: 文字起こしされたテキストを、Hugging Faceの要約モデルを使って要約します。これにより、長文の議事録から重要なポイントを瞬時に把握できます。

ユーザーの最終的な目標である「NotebookLMへの自動入力」については、2025年11月現在、NotebookLMが公式APIを公開していないため、完全な自動化は困難です。しかし、本記事で紹介する方法で生成された要約テキストを手動でコピー&ペーストするだけで、NotebookLMの強力な機能を活用できます。

ステップ1:音声ファイルの自動変換(WAV → MP3)

自動化の第一歩は、ボイスレコーダーから取り込んだWAVファイルを、より汎用性が高くファイルサイズの小さいMP3形式に変換することです。

なぜ変換が必要か? WAVとMP3の比較

図2:WAVとMP3のファイルサイズ比較(10分間の音声)

WAV(Waveform Audio File Format)は、音声を圧縮せずに記録する「非圧縮」形式です。そのため、音質は非常に高いですが、ファイルサイズが極端に大きくなるという欠点があります。一方、MP3は音響心理学モデルを利用して人間の耳に聞こえにくい部分のデータを削減する「非可逆圧縮」形式です。

MP3に変換する主なメリット:

  • ファイルサイズの削減: WAVファイルに比べて、MP3はファイルサイズを約1/10にまで削減できます。これにより、ストレージ容量を節約し、後の文字起こし処理の速度を向上させることができます。
  • 互換性の向上: MP3は、ほとんどすべてのデバイスやソフトウェアでサポートされている、事実上の標準音声フォーマットです。

例えば、10分間のステレオ音声(44.1kHz, 16bit)を録音した場合、WAV形式では約100MBになりますが、一般的なMP3(128kbps)に変換すると約10MBまで圧縮できます。

Mac標準ツール「Automator」で変換を自動化する

Macには「Automator」という強力な自動化ツールが標準で搭載されており、これを使うことで基本的な変換処理を自動化できます。しかし、標準機能にはいくつかの制限があります。

Automatorの「ミュージック」アクション内にある「オーディオファイルを読み込む」機能を使えば、指定したフォルダにファイルが追加された際に自動でMP3に変換できます。しかし、この方法ではビットレートが最大でも160kbpsに制限されるなど、品質のカスタマイズ性に乏しいという問題がAppleのコミュニティでも議論されています

Automatorの標準エンコーダーでは、より高いビットレート(例:320kbps)でのMP3変換が直接サポートされていません。音質にこだわる場合や、より柔軟な設定を求める場合には、外部ツールとの連携が必要になります。

より高度な変換:FFmpegの活用

そこで登場するのが、オープンソースのマルチメディアフレームワーク「FFmpeg」です。FFmpegは非常に多くの音声・動画フォーマットに対応しており、ビットレート、サンプルレート、チャンネル設定などを細かく指定して高品質な変換が可能です。

1. FFmpegのインストール
MacでFFmpegを最も簡単にインストールする方法は、パッケージマネージャーの「Homebrew」を利用することです。ターミナルを開き、以下のコマンドを実行します。

# Homebrewがインストールされていない場合は、まずHomebrewをインストール
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# Homebrewを使ってFFmpegをインストール
brew install ffmpeg

2. AutomatorとFFmpegの連携
FFmpegをインストールしたら、Automatorの「シェルスクリプトを実行」アクションと組み合わせることで、高品質な変換を自動化できます。この方法は後のPythonスクリプト内で実装するため、ここではFFmpegの基本的なコマンドを紹介します。

# WAVファイルを320kbpsのMP3に変換するコマンド例
ffmpeg -i input.wav -b:a 320k output.mp3

このコマンドをスクリプトに組み込むことで、Automatorが新しいファイルを検知するたびに、高品質なMP3ファイルが自動的に生成されるようになります。

ステップ2:AIによる文字起こしと要約

MP3ファイルが準備できたら、次はいよいよAIを使ってその内容をテキスト化し、要約する工程です。ここでは、プライバシーを守りつつ無料で利用できる強力なオープンソースツールを活用します。

文字起こしの切り札:OpenAI Whisper

文字起こしには、OpenAIが開発したオープンソースの音声認識モデル「Whisper」を使用します。Whisperは、大規模なデータセットでトレーニングされており、非常に高い精度で音声をテキストに変換できます。特に、専門用語や様々なアクセントに対しても頑健なのが特徴です。

図3:Whisperモデルのサイズと性能・速度の関係(概念図)
出典: OpenAI Whisper GitHubの情報を基に作成

Whisperの最大の利点は、Macのローカル環境で実行できることです。これにより、音声データを外部のサーバーに送信する必要がなく、機密性の高い会議の内容でも安心して処理できます。Whisperには複数のモデルサイズがあり、精度と処理速度のトレードオフで選択できます。一般的な用途であれば、「base」や「small」モデルでも十分な精度が得られます。

WhisperはPythonライブラリとして提供されており、後のステップで作成する自動化スクリプトに簡単に組み込むことができます。インストールはpipコマンド一発で完了します。

pip install -U openai-whisper

Whisperは内部でFFmpegを使用して音声ファイルを読み込むため、FFmpegがサポートする多様なフォーマット(mp3, wav, m4aなど)に標準で対応しています。

要約ツールの選択:NotebookLMの現状と代替案

ユーザーの要望にある「NotebookLM」は、Googleが提供する非常に強力なAIリサーチツールです。複数のドキュメントや音声ファイルをアップロードし、それらの内容についてAIと対話しながら要約や分析ができます。特に、複数の情報源を横断して洞察を得る能力に長けています。

NotebookLMの制約: 非常に便利なツールですが、前述の通り、2025年11月時点で外部アプリケーションから自動でファイルをアップロードするための公式APIが提供されていません。そのため、現段階では「生成されたテキストをクリップボードにコピーし、手動でNotebookLMに貼り付ける」という運用が現実的です。

代替案:Hugging Face Transformersによるローカル要約

完全な自動化を実現するため、ここでは代替案としてオープンソースのライブラリ「Hugging Face Transformers」を利用します。Hugging Faceは、AIモデルのハブとして機能しており、数多くの事前学習済みモデルが公開されています。その中には、テキスト要約に特化したモデルも多数含まれています。

Transformersライブラリの`pipeline`機能を使えば、わずか数行のコードで高度な要約モデルを呼び出すことができます。

from transformers import pipeline

# 要約パイプラインをロード
summarizer = pipeline("summarization", model="sshleifer/distilbart-cnn-12-6")

# 文字起こしされたテキスト
article = """(ここにWhisperで生成された長いテキストが入る)"""

# 要約を実行
summary = summarizer(article, max_length=150, min_length=30, do_sample=False)
print(summary)

この方法のメリットは、Whisperと同様にすべての処理がローカルで完結することです。これにより、インターネット接続がない環境でも動作し、プライバシーも完全に保護されます。また、様々な言語やタスクに特化したモデルを選択できるため、用途に応じたカスタマイズが可能です。

ステップ3:すべてを繋ぐ自動化スクリプトの作成

これまでの要素(FFmpeg, Whisper, Hugging Face)を一つにまとめ、全体のワークフローを制御するPythonスクリプトを作成します。このスクリプトが自動化の心臓部となります。

Pythonスクリプトの全体構成

スクリプトは以下の処理を順番に実行します。

  1. 引数の受け取り: Automatorから渡されたWAVファイルのパスを受け取ります。
  2. 一時MP3ファイルへの変換: `subprocess`モジュールを使ってFFmpegを呼び出し、WAVファイルを一時的なMP3ファイルに変換します。
  3. 文字起こし: `whisper`ライブラリを使い、MP3ファイルからテキストを生成します。
  4. 要約: `transformers`ライブラリを使い、生成されたテキストを要約します。
  5. 結果の保存: 文字起こし全文と要約テキストを、元の音声ファイルと同じ場所に`.txt`ファイルとして保存します。
  6. 後処理: 一時的に作成したMP3ファイルを削除し、クリーンな状態を保ちます。

この一連の流れをエラーハンドリング(`try…except`)で囲むことで、途中で問題が発生してもスクリプトが異常終了しないようにします。

実践的なPythonコード例

以下に、上記ロジックを実装したPythonスクリプトの例を示します。このスクリプトを`auto_summarize.py`などの名前で保存してください。

注意: このスクリプトを実行する前に、必要なライブラリをインストールしておく必要があります。
pip install -U openai-whisper torch transformers tensorflow


import os
import sys
import subprocess
import tempfile
import whisper
from transformers import pipeline

def process_audio_file(input_wav_path):
    """
    WAVファイルをMP3に変換し、文字起こしと要約を行うメイン関数
    """
    base_name = os.path.splitext(os.path.basename(input_wav_path))[0]
    output_dir = os.path.dirname(input_wav_path)
    
    transcript_path = os.path.join(output_dir, f"{base_name}_transcript.txt")
    summary_path = os.path.join(output_dir, f"{base_name}_summary.txt")

    try:
        # 1. WAVを一時的なMP3ファイルに変換
        print(f"Converting {input_wav_path} to MP3...")
        with tempfile.NamedTemporaryFile(suffix=".mp3", delete=False) as tmp_mp3:
            temp_mp3_path = tmp_mp3.name
        
        ffmpeg_command = [
            "ffmpeg",
            "-i", input_wav_path,
            "-b:a", "192k",  # ビットレートを指定
            temp_mp3_path,
            "-y" # 既存ファイルを上書き
        ]
        subprocess.run(ffmpeg_command, check=True, capture_output=True, text=True)

        # 2. Whisperで文字起こし
        print("Transcribing with Whisper...")
        model = whisper.load_model("base") # モデルサイズを選択 (tiny, base, small, medium, large)
        result = model.transcribe(temp_mp3_path)
        transcript_text = result["text"]

        with open(transcript_path, "w", encoding="utf-8") as f:
            f.write(transcript_text)
        print(f"Transcript saved to {transcript_path}")

        # 3. Hugging Faceで要約
        print("Summarizing text...")
        summarizer = pipeline("summarization", model="sshleifer/distilbart-cnn-12-6")
        summary_result = summarizer(transcript_text, max_length=200, min_length=50, do_sample=False)
        summary_text = summary_result[0]['summary_text']

        with open(summary_path, "w", encoding="utf-8") as f:
            f.write("--- Summary ---\n\n")
            f.write(summary_text)
        print(f"Summary saved to {summary_path}")

    except FileNotFoundError:
        print(f"Error: Input file not found at {input_wav_path}")
    except subprocess.CalledProcessError as e:
        print(f"FFmpeg Error: {e.stderr}")
    except Exception as e:
        print(f"An unexpected error occurred: {e}")
    finally:
        # 4. 一時ファイルを削除
        if 'temp_mp3_path' in locals() and os.path.exists(temp_mp3_path):
            os.remove(temp_mp3_path)
            print(f"Temporary file {temp_mp3_path} deleted.")

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Usage: python auto_summarize.py ")
        sys.exit(1)
    
    input_file = sys.argv[1]
    process_audio_file(input_file)

最終的な自動化:AutomatorとPythonスクリプトの連携

最後に、このPythonスクリプトをAutomatorに組み込み、完全な自動化を実現します。

  1. Automatorを起動: アプリケーションフォルダから「Automator」を起動します。
  2. 新規書類を作成: 「ファイル」→「新規」と進み、「フォルダアクション」を選択します。
  3. 監視フォルダを選択: 右上の「”フォルダアクション”は、次の場所に追加されたファイルやフォルダを受け取ります」のドロップダウンメニューから、ボイスレコーダーの音声ファイルを保存するフォルダを選択します。
  4. シェルスクリプトアクションを追加: 左側のアクションライブラリから「シェルスクリプトを実行」を探し、右側のワークフローエリアにドラッグ&ドロップします。
  5. スクリプトを記述: 「シェルスクリプトを実行」アクションのテキストボックスに、以下のスクリプトを入力します。
    • シェルの種類: `/bin/zsh` を選択
    • 入力の引き渡し方法: 「引数として」を選択
# Pythonのパスは環境によって異なる場合があります。
# ターミナルで `which python3` を実行して確認してください。
PYTHON_PATH="/usr/local/bin/python3" 
SCRIPT_PATH="/path/to/your/auto_summarize.py" # 先ほど作成したPythonスクリプトの絶対パス

for f in "$@"
do
    # .wavファイルのみを対象とする
    if [[ "$f" == *.wav || "$f" == *.WAV ]]; then
        "$PYTHON_PATH" "$SCRIPT_PATH" "$f" >> "/Users/your_username/Desktop/automation_log.txt" 2>&1
    fi
done

注意: `SCRIPT_PATH`とログファイルのパス(`”/Users/your_username/Desktop/automation_log.txt”`)は、ご自身の環境に合わせて必ず変更してください。

6. 保存: 「ファイル」→「保存」を選び、フォルダアクションに分かりやすい名前(例:「音声自動要約」)を付けて保存します。これで設定は完了です。指定したフォルダに新しいWAVファイルが追加されると、自動的に変換、文字起こし、要約が行われ、結果がテキストファイルとして保存されます。

まとめ:無料で実現するインテリジェントな音声処理

本記事では、Macに標準搭載されているAutomatorと、FFmpeg、OpenAI Whisper、Hugging Face Transformersといった強力なオープンソースツールを組み合わせることで、ボイスレコーダーの音声ファイルを全自動で文字起こし・要約するワークフローを構築する方法を解説しました。

このワークフローの最大の特長は、ほぼすべての処理がローカル環境で完結し、費用が一切かからない点です。プライバシーを保護しながら、これまで手作業で行っていた面倒なタスクを自動化し、生産性を劇的に向上させることができます。

NotebookLMのAPIが将来的に公開されれば、生成されたテキストを直接NotebookLMに送信し、さらに高度な分析を行うことも可能になるでしょう。しかし、現時点でもこのローカル完結型の自動化システムは、日々の情報処理を強力にサポートしてくれるはずです。ぜひ、ご自身の環境でこの未来的なワークフローを試してみてください。

この記事をシェア

ITのご相談はKUREBAへ

ITのご相談は何でもお申し付けください。 無料相談から始めませんか?