メインコンテンツまでスキップ

字幕言語フィルター

検索時に字幕の言語を指定して検索結果をフィルターできる機能。

背景

現在の仕様では字幕取得時に youtube-transcript-plus のデフォルト言語(動画の主言語)で1言語のみ取得している。Meilisearch のドキュメントには language フィールドが filterable で存在するが、検索UIに言語選択がなく、ユーザーは言語を指定できない。

チャンネルの主言語と異なる言語の字幕で検索したいケースに対応するため、字幕取得時の言語指定と検索時の言語フィルターを実装する。

前提

  • 1動画1言語: 1つの動画に対して取得・インデックスする字幕は1言語のみ(Meilisearchのドキュメント数増加を抑えるため)
  • チャンネル単位の言語: チャンネル登録時にユーザーが選択した言語で字幕を取得する。同一チャンネルでも異なるユーザーが異なる言語で検索する場合は、その言語の字幕が追加取得される(将来検討)

対応言語

UIの対応言語と同じ7言語を選択肢とする。

言語言語コード表示名(日本語UI)
日本語ja日本語
英語en英語
中国語zh中国語
韓国語ko韓国語
スペイン語esスペイン語
フランス語frフランス語
ドイツ語deドイツ語

検索フィルター仕様

フィルター値

説明Meilisearch フィルター
all(デフォルト)全言語を検索対象にするフィルターなし
ja, en, zh, ko, es, fr, de指定言語のみlanguage = '{languageCode}'

URL クエリパラメータ

パラメータ必須デフォルト説明
langNoall字幕言語フィルターlang=ja

デフォルト値(all)の場合は URL から省略可能。

URL 例

# 日本語字幕のみで検索
/search?q=ゲーム実況&channel=UCxxxxx&lang=ja

# 英語字幕のみで検索
/search?q=game&channel=UCxxxxx&lang=en

# 全言語(デフォルト、パラメータ省略可)
/search?q=ゲーム実況&channel=UCxxxxx

UI 仕様

検索フォーム

既存の検索フィルター群に「字幕の言語」フィルターを追加する。

  • ラベル: 「字幕の言語」
  • UIコンポーネント: セレクトボックス(ドロップダウン)
    • すべて(デフォルト)
    • 日本語
    • 英語
    • 中国語
    • 韓国語
    • スペイン語
    • フランス語
    • ドイツ語
  • 各言語の表示名はUIの表示言語に合わせてi18nで翻訳する

字幕取得時の言語指定

現在の動作

youtube-transcript-plusfetchTranscript(videoId) を lang 未指定で呼び出しており、動画のデフォルト言語の字幕が返される。

変更後の動作

fetchTranscript(videoId, { lang }) で言語を明示的に指定して取得する。lang の決定ロジック:

  1. ユーザーが検索フォームで言語を指定している場合 → その言語で取得
  2. 言語未指定の場合 → 動画のデフォルト言語で取得(現在の動作と同じ)

指定言語の字幕が存在しない場合

  • youtube-transcript-plusYoutubeTranscriptNotAvailableLanguageError をスローする
  • その動画の subtitle_statusunavailable に設定する(指定言語の字幕が存在しない)
  • 検索結果からは除外される(subtitle_status = 'completed' のもののみが検索対象)

注意事項

  • 同一チャンネルの字幕を複数言語で取得・インデックスする機能は本スコープ外(将来検討)
  • 現時点ではチャンネルの字幕は1言語のみインデックスされるため、言語フィルターで絞ると、その言語でインデックスされていない動画は検索結果に表示されない