解決する課題
地域の記者や住民は、ゾーニングの変更、予算項目、学校の方針について職員が何を言ったのかを知りたいと考えています。それを見つけるには、多数の会議の何時間もの動画を早送りする必要があります。議題や議事録が議論の全容を記録していることはまれで、多くの地方の報道機関には、すべての会議に記者を派遣する余裕がもうありません。
最初のバージョンに含めるべき機能
- 機関のチャンネルからすべての会議を自動で取り込み
- 職員ごとに検索できる話者ラベル
- 何年分もの会議を横断する議題・キーワード検索
- 特定の議題や住所が議論されたときのアラート
- 録画内の正確な場面への共有可能なリンク
開発手順(ステップごとに解説)
- 01
会議動画を収集する
議会のチャンネルや会議の再生リストを解決し、新しいアップロードを継続的に確認します。
- 02
話者付きで文字起こしする
speakerLabelsを有効にし、既知の名前を指定したspeakerIdとともにASRを使って、各発言を話者に紐づけます。会議は長いため、見積もりエンドポイントで事前に費用を確認します。
- 03
会議と話者でインデックス化する
段落を会議日、話者、タイムスタンプとともに保存し、全文検索とセマンティック検索を追加します。
- 04
アラートを追加する
通り名や政策テーマなどの検索条件を保存できるようにし、新しい会議でそれが取り上げられたらメールで通知します。
サンプルコード
このアイデアは「レシピ3:再生リストをナレッジベースに一括登録」パターンをベースにしています。チャンネル、プロンプト、保存先はご自身のものに置き換えてください。
import requests
API = "https://www.youtubetranscript.dev/api/v2"
HEADERS = {"Authorization": "Bearer yt_sk_live_YOUR_KEY"}
playlist = requests.post(f"{API}/playlists/resolve", headers=HEADERS,
json={"playlist_url": "https://www.youtube.com/playlist?list=PLAYLIST_ID",
"limit": 100}).json()
ids = [v["video_id"] for v in playlist["items"]]
batch = requests.post(f"{API}/batch", headers=HEADERS, json={
"video_ids": ids,
"format": {"timestamp": True, "paragraphs": True},
}).json()
# Large batches run async: poll GET /batch/{batch_id} until status is "completed"
for r in batch.get("results", []):
if r["status"] == "completed":
for p in r["data"]["transcript"].get("paragraphs") or []:
store(video_id=r["video_id"], start=p["start"], text=p["text"]) # your vector DB作る価値がある理由
地域のニュースメディア、アドボカシー団体、不動産・政策関連企業は、アラートや調査ツールに対価を払います。市民向けプロジェクトは助成金で運営したり、無料の公開アーカイブと有料アラートを組み合わせたりすることがよくあります。
避けるべき失敗
- 多くの発言者がいる長い会議で自動字幕に頼ること:話者ラベルがあるとアーカイブの有用性が大きく高まります。
- 長さを過小評価すること:会議は何時間も続くため、過去分を文字起こしする前にASRクレジットを見積もりましょう。
- 文脈なしで公開すること:読者が自分で聞けるよう、すべての発言を録画にリンクしましょう。
このアイデアに関する質問
YouTubeの市議会の会議を文字起こしできますか?
はい。字幕があればそれを使い、長い会議をより読みやすくするには話者ラベル付きのAI音声認識を使ってください。
誰が話しているかを識別するには?
話者ラベルを有効にして話者を区別し、既知の名前や役職のリストを使った話者識別で発言者を特定します。
3時間の会議の文字起こしにはいくらかかりますか?
AI音声認識は、追加オプションを除いて1時間あたり約40クレジットです。開始前に見積もりエンドポイントで正確な費用を確認できます。