📓

Google Meets 録画の日本語文字起こし

2025/02/28に公開

概要

Google Meets には録画機能があるものの、日本語の自動文字起こしには対応していません。そのため、日本語の会議録画を効率的にテキスト化する方法を検討しました。本記事では、外部サービスを利用せず、当社が契約するリソースを活用し、社内環境で完結する 形で Google Colab の GPU を使い、ffmpeg で音声を抽出し、OpenAI Whisper による文字起こしを行う手法を紹介します。

録画内容にもよりますが、1時間の打ち合わせを10~15分程度で文字起こしすることが可能で、それなりに実用になる文字起こし結果が得られるようになりました。

社内情報の安全性を確保しつつ、追加の工数を抑えて文字起こしを実現する方法を模索している方の参考になれば幸いです。

1. Google Meets録画の日本語文字起こしの課題

  • Googleの自動文字起こしは多言語対応しているが、日本語には未対応
  • 外部サービスの選択肢とその課題
  • 日本語の精度を確保しつつ、追加の工数をかけずに処理したい

Google Meets には会議の録画機能が備わっており、会議の内容を後から確認できる便利な機能です。さらに、Googleの自動文字起こし機能(字幕)は英語をはじめとする多くの言語に対応しており、リアルタイムで発言内容をテキスト化することができます。しかし、この自動文字起こし機能は現時点では日本語に対応していません。そのため、Google Meets の録画を日本語で文字起こしするには、別途手段を用意する必要があります。

外部サービス利用の課題

日本語の文字起こしを行う外部サービスはいくつか存在しているようですが、以下のような課題があります。

  • セキュリティリスク
    社内会議の録音データには機密情報が含まれることが多く、外部サービスにアップロードすることは情報漏洩のリスクを伴う。特に無料プランやクラウド型サービスの場合、データの取り扱いが不透明なケースもある

  • コスト
    精度の高い文字起こしサービスはサブスクリプション型が多く、長期的な運用を考えるとコストがかさむ

  • カスタマイズ性の制限
    外部サービスはブラックボックス化されていることが多く、社内のニーズに合わせたカスタマイズが難しい

  • そのうち GAFAM のどこかが実装する
    誰もがほしいと思う機能は、そのうち GAFAM が実装して標準機能として組み込まれる

2. GPUを活用した社内向け文字起こし環境の構築

  • Google Colabを利用する理由(簡単なセットアップとGPU活用)
  • ffmpegでMP4から音声を抽出
  • OpenAI Whisperを使用して日本語の文字起こし

日本語の自動文字起こしを社内環境で完結させるために、Google Colab を活用した仕組みを構築しました。本章では、その技術的な構成について説明します。

2.1 Google Colabを利用する理由

Google Colab は、クラウド上で Python 環境を簡単にセットアップできる無料のサービスであり、以下の利点があります。

  • GPUの無償利用
    Google Colab では、一定時間であれば無料で GPU を利用できるため、大規模なデータ処理に適している。
  • インストール不要
    ブラウザ上で動作するため、ローカル環境に複雑な設定を施す必要がない。
  • Google Drive との連携
    録画ファイルの保存や、文字起こし結果の Google ドキュメントへの出力が容易にできる。

これにより、追加のコストをかけずに、高速かつ柔軟な文字起こし環境 を実現できます。

2.2 ffmpeg を使用したMP4からの音声抽出

Google Meets の録画は MP4形式 で保存されますが、文字起こしには音声データのみが必要です。そのため、動画から音声データを抽出するために ffmpeg を使用します。

MP4形式でAACが使用されている場合の注意

MP4 内の音声形式として AAC が使用されている場合、AAC のデコードを処理する機能が製品に組み込まれているとライセンス取得が必要となる事があるようです。もしサービス化を考えることがあるようでしたらご注意ください。

Google Meets 録画ファイルの音声形式

Google Meets の録画ファイルをダウンロードして、音声形式を ffmpeg -i で確認します。

ffmpeg -i の結果

 Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)

AAC が使用されていました。

音声データの処理内容

  1. Google Drive から MP4 ファイルを取得
  2. ffmpeg を用いて MP4 から音声ファイル(MP4 -> MP3 形式)を抽出

2.3 OpenAI Whisper を使用した日本語の文字起こし

音声データをテキストに変換するために、OpenAI Whisper を使用します。

Whisper を選択した理由

  • 高精度な日本語認識
    Whisper は、多言語対応の音声認識モデルであり、日本語の認識精度も高い。
  • オープンソース
    クローズドな外部サービスと異なり、社内環境で自由に運用可能。
  • Colab 上で簡単に実行可能
    事前学習済みのモデルをダウンロードし、すぐに使用できる。

3. 実装方法と手順

手っ取り早く結果だけみたい人は、GitHubのリポジトリを参照してください。
https://github.com/WangTKurata/convert-and-transcribe-mp4

Google Colab 上で ffmpeg を使用した音声抽出、OpenAI Whisper による文字起こし、Google ドキュメントへの保存 の具体的な実装手順を説明します。
提供するスクリプトを Google Colab 上で実行することで、日本語および英語の会議録画を効率的に文字起こしし、Google ドキュメントに自動保存できます。

  • Colab環境の準備
  • ffmpegを使った音声抽出
  • Whisperを利用した文字起こし処理
  • 文字起こし結果をGoogleドキュメントに保存する方法
  • 文字起こし結果の整理と活用方法

3.1 Google Colab 環境の準備

Google Colab を使用することで、ローカル環境を構築することなく、クラウド上で GPU を活用できます。
Colab のインスタンスとして GPU インスタンスを選びます。CPU のままでも処理可能ですが、文字起こしが遅くなります。

Check GPU Instance


3.2 ffmpeg を使った音声抽出

Google Meets の録画は MP4形式 で保存されますが、文字起こしには音声データのみが必要です。そのため、動画から音声データを抽出するために ffmpeg を使用します。

1. 音声抽出関数 extract_audio

以下の extract_audio 関数を用いて、MP4 から MP3 に変換します。

import subprocess

def extract_audio(mp4_path, mp3_path):
    """
    Extracts audio from an MP4 file and saves it as an MP3 file using ffmpeg.
    """
    print(f"MP3抽出: {mp4_path} to {mp3_path}")
    command = [
        "ffmpeg", "-vn", "-i", mp4_path,
        "-acodec", "libmp3lame", "-b:a", "128k", "-ac", "1",
        mp3_path, "-y"
    ]
    subprocess.run(command)
    print(f"MP3抽出完了: {mp3_path}")

2. 実行

Google Drive に保存された録画ファイルのパスを指定し、MP3 に変換します。

mp4_path = "/content/drive/MyDrive/Meet Recordings/meeting.mp4"
mp3_path = f"{mp4_path}.mp3"
extract_audio(mp4_path, mp3_path)

3.3 Whisper を利用した文字起こし

MP3 に変換した音声ファイルを、OpenAI Whisper を用いて文字起こしします。

1. Whisper のセットアップ

import whisper

model = whisper.load_model("medium")  # 日本語・英語対応モデルをロード

2. 文字起こし関数 transcribe_audio

以下の関数で、音声をテキストに変換し、ファイルに保存します。
日本語の音声を書き起こす場合、言語を指定して会議で使用されやすい口調を初期のプロンプトとして与えることで書き起こし精度の向上を狙います。

import os

def transcribe_audio(mp3_path, txt_path, mtg_language):
    """
    Transcribes audio from the given MP3 file using the Whisper model and writes the transcript to a text file.
    """
    model = whisper.load_model("medium")
    language_code = "en"
    initial_prompt = ""

    if mtg_language == "Japanese":
        language_code = "ja"
        initial_prompt = "です。ます。でした。"

    print(f"文字起こし開始: {mp3_path} to {txt_path} by {language_code}")
    result = model.transcribe(
        mp3_path,
        language=language_code,
        verbose=True,
        initial_prompt=initial_prompt
    )

    with open(txt_path, "w", encoding="utf-8") as f:
        f.write(result["text"])

    os.remove(mp3_path)  # 一時ファイルを削除
    print(f"文字起こし完了!結果を {txt_path} に保存しました。")

3. 実行

言語(Japanese または English)を選択し、文字起こしを実行します。

txt_path = f"{mp4_path}.txt"
transcribe_audio(mp3_path, txt_path, mtg_language)

3.4 文字起こし結果を Google ドキュメントに保存

文字起こし結果を Google ドキュメントに自動保存 することで、検索や共有が容易になります。

1. Google Docs API のセットアップ

Google Docs API を使用するため、以下の認証手順を実行します。

from googleapiclient.discovery import build

service = build("docs", "v1")

2. Google ドキュメント作成関数 create_google_doc

以下の関数を実行すると、Google ドキュメントが作成され、文字起こし結果が挿入されます。

def create_google_doc(title, txt_path):
    """
    Creates a Google Document with the provided title and inserts the text from the transcript file.
    """
    # 新しい Google ドキュメントを作成
    doc = service.documents().create(body={"title": title}).execute()
    doc_id = doc["documentId"]

    # 文字起こし結果を読み込む
    with open(txt_path, "r", encoding="utf-8") as f:
        transcript_text = f.read()

    # Google ドキュメントに文字起こし結果を挿入
    requests = [{"insertText": {"location": {"index": 1}, "text": transcript_text}}]
    service.documents().batchUpdate(documentId=doc_id, body={"requests": requests}).execute()

    os.remove(txt_path)  # 一時ファイルを削除
    print(f"✅ Google Docs 作成完了: https://docs.google.com/document/d/{doc_id}")

3. 実行

Google ドキュメントに保存します。

file_name = "文字起こし_" + os.path.splitext(os.path.basename(txt_path))[0]
create_google_doc(file_name, txt_path)

4. 今後の展望と課題

本記事では、Google Colab を活用して Google Meets の録画から日本語・英語の文字起こしを行い、Google ドキュメントに自動保存する仕組み を構築しました。本章では、この仕組みのさらなる改善点や今後の展望について考察します。
Google Meets が日本語による文字起こしをサポートするまでのつなぎとしては、十分ではないでしょうか?


4.1 さらなる精度向上の可能性

Whisper は高精度な音声認識モデルですが、より正確な文字起こしを実現するために、いくつかの改善策が考えられます。

1. モデルサイズの変更

Whisper には tiny, base, small, medium, large のモデルサイズがあります。本記事では 「medium」 を使用しましたが、より高精度な認識を求める場合は「large」モデルを利用するのが有効 です。
ただし、モデルサイズが大きくなるほど 処理時間と GPU メモリの消費量が増加 するため、用途に応じたバランスが必要です。

2. カスタム辞書の活用

Whisper は事前学習済みのモデルを使用するため、特定の 社内用語や略語 に弱い傾向があります。
initial_prompt パラメータを活用し、会議でよく使われる 社内用語・技術用語を事前に学習させることで、精度を向上させることが可能 です。

initial_prompt = "この会議では、AI、機械学習、NLP、ニューラルネットワークなどの技術用語が頻繁に使用されます。"
result = model.transcribe(mp3_path, language="ja", initial_prompt=initial_prompt)

4.2 処理速度の改善

現在の仕組みでは、Google Colab 上で Whisper を利用して音声を解析していますが、以下の方法で 処理時間を短縮 できる可能性があります。

1. GPU リソースの活用

Google Colab では無料プランでも GPU を利用できますが、より高速な処理を求める場合は Google Colab Pro や、クラウドの GPU インスタンス(GCP, AWS, Azure など)を活用するのも選択肢 です。

2. 並列処理の導入

音声ファイルを 複数のチャンク(例:5分ごと)に分割し、並列処理することで、処理時間を短縮 できます。
現在のスクリプトは 全体を一括で処理 しているため、大規模な会議録画には適用が難しいですが、音声の分割&並列処理を導入することで、より大規模な録音データにも対応可能 になります。
ただ、発言の区切りでファイルを分割しないと文字起こし結果に影響を与えるかもしれません。

4.3 文字起こし結果の処理

文字起こし結果の処理として、ChatGPT などの AI を活用し、固有名詞の修正や言い回しの統一を自動化することも考えられます。また、文脈から発言者を想定して会話内容を人間がわかりやすいように書き直させることも面白そうです。

しかし、AI による処理を行う際には、内容の改変や省略が発生しないよう慎重に設計することが重要 です。特に会議の記録では、発言の正確性が求められるため、修正処理による意味の変化を最小限に抑える事 が求められます。

特に最近の ChatGPT は、大きなファイルを与えると内容を端折ったり、途中で処理するのを放棄したり、勝手に要約を追加したりするので、期待する結果を得るためには工夫が必要と考えます。

NotebookLM を活用した社内での安全なデータ処理

Google の NotebookLM は、文書の要約や分析を支援する AI ツールであり、指定したデータソースに基づいて回答を生成できる のが特徴です。
そのため、文字起こしデータを NotebookLM に取り込み、外部の情報を使用せずに社内で閉じた環境で加工・分析 することが可能になります。(Google との契約内容にもよりますが)

NotebookLM を活用するメリット

データの安全性を確保: 社内の文字起こしデータのみを利用し、外部の AI サービスに送信せずに処理できる
会議の要点整理: NotebookLM を使って自動的に要約し、議事録の作成を効率化
検索性の向上: 特定の発言や議題を NotebookLM に質問することで、手作業で探すことなく瞬時に情報を取得

💡 活用例: NotebookLM で会議の要点を抽出

Q: 今回の会議で決定した主要なアクションアイテムをリストアップして議事録にまとめてください  

このように、文字起こしデータを活用して効率的に会議内容を整理できます。


4.4 まとめ

本記事で構築した Google Colab + Whisper による文字起こし環境 (GitHub Repo.) は、Google Meets の日本語対応が不十分な現状において、手軽に導入できる解決策となります。

Axelspace

Discussion