🔊

Gemini 1.5 Pro で音声ファイルの文字起こしをしてみた

2024/12/13に公開

はじめに

弊社ではフリーランスエンジニアと企業のマッチングサービスを運営しています。
生成AIを活用し、営業担当とエンジニアのカウンセリングを文字起こし・要約し、カウンセリングの効率化を図りたいというニーズが社内から出てきました。
その検証の第一段階として、Gemini 1.5 Proを活用し音声ファイルを文字起こししてみることにしました。

技術スタック

  • フレームワーク: Express
  • 言語: JavaScript
  • 音声ファイルの文字起こし: Google Gemini 1.5 Pro

ソースコード


const fs = require('fs');
const path = require('path');
const fetch = require('node-fetch');

const main = async () => {
  try {

    const audioFilePath = path.join(__dirname, '/uploads/audio.mp3');

    const audioData = fs.readFileSync(audioFilePath, { encoding: 'base64' });

    // APIリクエストの設定
    const payload = {
      contents: [
        {
          parts: [
            { text: "音声を文字起こししてください。" },
            {
              inlineData: {
                mimeType: 'audio/mpeg',
                data: audioData
              }
            }
          ]
        }
      ]
    };

    const API_KEY = "xxxxxxxxxxxxxxxxxxxxxxx";
    const apiUrl = `https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-pro:generateContent?key=${API_KEY}`;

    // APIリクエストの送信
    const response = await fetch(apiUrl, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(payload)
    });

    const result = await response.json();
    console.log(result); // レスポンス全体を出力

    if (result.candidates && result.candidates[0] && result.candidates[0].content && result.candidates[0].content.parts && result.candidates[0].content.parts[0]) {
      console.log(result.candidates[0].content.parts[0].text);
    } else {
      console.error('Unexpected response structure:', result);
    }

  } catch (error) {
    console.error('Error:', error);
  }
}

main();

検証素材

石破茂さんが自民党新総裁になったことについて解説します
https://www.youtube.com/watch?v=ByiwJ01ObhA&t=43s

検証結果

はい、いいちょう。ええ、今日はですね、ええ、自民党の総裁選が、ええ、行われまして ええ、第1回目の投票、ええ、党員党友票と議員票ということで ええ、見事1位になったのが高市早苗さん、そして2位が、ええ、石破茂さん。残念ながら私が応援してた 小泉進次郎さん、落選しましたが ええ、石破さんVS高市さんということで ええ、決選投票になりました。党員党友票もですね、高市さんがですね、ええ、石破さんを上回ってたということで まあ、議員票よりもですね、高市さんが票を伸ばした、ああ、様子が見て取れました。 まあ、ネット上でかなり人気が、まあ、謎に人気が高かったネトウヨ勢が結構応援してたのかなと思いましたけれども、党員党友票でもですね ええ、何か1人だけ抜け駆けして パンフレットを送ってた問題で結構突っ込まれたりとかしてましたが 割とあれが結構効いたんじゃないかとも言われております。 まあ、そういったこともあったんでしょうが ええ、決選投票でな、まさかのですね、ええ、自民党員 じゃなくてですね、議員には人気がなかった。まあ、過去裏切りをしたりとかですね ええ、まあ、何か仲間が少ないなんていろいろ言われておりましたけれども なんと石破さんがですね、ええ、何回目ですかね ええ、3、4回ぐらい出てんのか、5回ぐらい出てんのかな。まあ、とにかく総裁選やっと当選したということでですね ええ 私ですね、ええ、NewsPicksの番組で2本にわたって 石破茂さんと対談しておりますので、ぜひですね、NewsPicks、まあ、YouTubeでも石破茂さんと僕の対談見れると思いますので、ぜひ見てほしいんですが ええ、やはりですね、法人税を上げるとか金融所得課税を、ええ、強化するなんていう風に、あと解雇規制の緩和にも 慎重な姿勢を示している石破さんなんですが
(以下略)

運用コスト

1回のカウンセリング時間を30分とした場合のコストを計算しました

1. 無料枠について

1日の無料枠

  • トークン数: 最大128,000トークン/日
  • リクエスト数: 最大50リクエスト/日
  • トークン消費: 1ファイルあたり約8,035トークン(30分音声)

変換可能なファイル数

  • トークン数による制限: 128,000トークン ÷ 8,035トークン ≈ 15個
  • リクエスト数による制限: 最大50個
  • 無料枠で変換可能なファイル数: 約15個/日

2. 有料の場合の料金

1ファイルあたりのトークン消費

  • 入力トークン: 約1,000トークン
  • 出力トークン: 約7,035トークン
  • 合計トークン: 約8,035トークン

料金モデル

  • 入力トークン料金: 1.25ドル/100万トークン
  • 出力トークン料金: 5.00ドル/100万トークン

1ファイルあたりのコスト

  • 入力トークン料金: 8,035 × 1.25 ÷ 1,000,000 ≈ 0.01ドル
  • 出力トークン料金: 8,035 × 5.00 ÷ 1,000,000 ≈ 0.04ドル
  • 合計コスト: 約0.05ドル(約7円/30分ファイル)

約7円/30分ファイルと考えると有料の文字起こし系サービスと比較してもやはり自前でやってしまった方が十分に安いと言えます。

所感

冒頭の「ハローYouTube!!」は堀江さんの圧が強すぎて検出できなかったようです(笑)が、Google Gemini 1.5 Pro は音声ファイルの文字起こしにおいても十分に高精度な結果を出しています。
各種オンライン会議サービスとの連携・ファイルのアップロード・ダウンロード・ファイルの変換・出力といった開発コストはかかりますが、この変換コストの差は十分に大きいと言えます。

追記

2024/12/12 に Google Gemini 2.0 の発表がありました。
音声ファイルの文字起こしにおいてもより低コストで高精度な出力を期待できそうです。

Discussion