多言語ゲームの字幕実装: 表示時間・行数制限・音声と字幕の組み合わせ
字幕は、翻訳するまでは解決済みの機能に見えます。自分でセリフを書いていたときはちょうどよかった表示時間が急に速すぎるようになり、2行に収まっていた枠が3行目を要求しはじめ、プレイヤーからは「元の音声のまま、自分の言語の字幕で遊びたい」という要望が届きます。
これは描画の問題ではありません。字幕とは、開始時刻・終了時刻・話者・サイズ上限を持ったテキストであり、その4つはいずれも、テキストが自分の書いた言語でなくなった瞬間に振る舞いが変わります。字幕を「音声中に表示される文字列」として扱っていると、そのまま不満として返ってきます。
ここでは、あとから変更するのが高くつく設計判断を扱います。表示時間を何が決めるのか、行の制限をどう置くのか、1つのボイスに字幕が複数必要になったときどうするのか、そして機械的に検証できる形でどう保持するのかです。
表示時間を決めるのは音声の長さではなく読む速度
素直に実装すると、字幕は音声に完全に同期します。クリップの再生開始で表示し、再生終了で消す。開発言語では問題なく読めます。演技の長さに合わせてセリフを書いているからです。ところが翻訳すると、この同じ規則が静かに速読テストへ変わります。同じ意味を担う訳文が、元の言語で話し終わるより読むのに時間がかかることは珍しくなく、しかもプレイヤーには止める手段がありません。
快適さを決めているのは読む速度で、これは言語共通ではありません。字幕制作の実務では、最大の読速と最小の表示時間を基準として持ちます。日本語や中国語のような表記では毎秒の文字数、ラテン文字の言語では毎分の文字数や語数で表すのが一般的です。具体的な数値はスタイルガイド、プラットフォーム、言語ごとに違うので、一度調べて定数として埋め込むものではなく、自分のプロジェクトで決めて実際に見て検証するパラメータだと考えてください。
どの数値を採用しても、次の原則は共通して成り立ちます。
- 字幕は音声の終了後も、次のセリフが表示枠を必要とする直前まで残してよい
- 最短表示時間を設け、短いセリフが一瞬で消えないようにする
- 連続する字幕の間に極端に短い空白を作らない。点滅させるくらいなら橋渡しするか結合する
- 余裕を足しても読速の上限を超えるなら、プレイヤーに速く読ませるのではなく分割か短縮を選ぶ
- 表示時間は現在の言語の実際のテキストから計算する。コードに埋め込んだ1文字あたりの固定値から求めない
行の幅・行数・改行位置と、字幕が複数枚必要になるとき
本当の制約は文字数ではなく描画幅です。日本語の字幕は英語原文より文字数が少なくても、横幅ではより多く占めることがあります。CJKの文字は同じ字送りでラテン文字のおよそ2倍の幅で組まれるためです。文字数で上限を決めると、ある言語では緩すぎ、別の言語では厳しすぎる基準になります。
2行までというのは慣習的な上限で、守る価値があります。3行目に入ると映像を覆いはじめ、携帯機の画面ではプレイエリアをはっきり侵食します。上限は「対応する最小解像度における描画幅 × 行数」で定義し、自分の言語で収まっているから大丈夫と考えず、言語ごとに検証してください。
改行位置は思われている以上に重要です。字幕は走査ではなく一目で読まれるからです。改行は必ず文節の切れ目で行い、語の途中や、名詞とそれに付く助詞の間では絶対に切らないでください。句読点の直後は良い改行位置です。自動折り返しはこうした事情を一切知らないので、翻訳者が明示的な改行記号をテキストに入れられるようにするか、言語ごとに描画結果を確認して読みにくい箇所を直すかのどちらかが必要になります。
プレイヤーが実際に気づく改行の失敗は一つだけです。1行目だけで文として成立してしまい、しかも全体とは違う意味に読める分割です。途中まで読んで理解を修正させられる負荷は、少し不格好なだけの改行よりはるかに大きくなります。
多くの字幕システムは「音声クリップ1つに字幕1件」という前提から始まります。扱いやすく、脚本を書いた言語では成り立ちます。しかし翻訳すると成り立たなくなります。長いセリフの訳文が、そのクリップの再生時間内に2行では収まらないことがあるためです。
データ構造が「1クリップに対する2枚の字幕」を表現できないと、翻訳者に残る選択肢はどれも悪いものになります。意味を削るか、読み切れない文字の塊に詰め込むか、読速の上限を無視するか。どれも後日、翻訳の質の問題に見える形で報告されますが、実際にはデータ設計の問題です。
したがって、1つのボイスラインが言語ごとに1件以上のタイミング付き字幕にひもづけられるようにし、時刻はクリップ開始からの相対値で持ちます。字幕の枚数が言語によって違ってよい、という柔軟性こそが目的です。その帰結として、字幕を音声ファイル名で1対1に対応づけることはできません。安定したボイスラインIDをキーにし、同じIDに対して言語ごとに複数行を持てるようにします。
voice_line_id,lang,card_index,start_ms,end_ms,speaker_id,text vo_ch2_mira_014,ja,1,0,1600,mira,ここへは来るなと vo_ch2_mira_014,ja,2,1600,3200,mira,言ったはずだけど。 vo_ch2_mira_014,en,1,0,2400,mira,I told you not to come here.
話者名・聴覚補助字幕・セリフ以外のテキスト
話者名の表示が効くのは、話し手が画面外にいるとき、複数のキャラクターが短い間隔で話すとき、そしてプレイヤーが音量を絞っているときです。表示するなら、その名前はキーを持つ翻訳対象の文字列であり、字幕本文に直接打ち込むものではありません。何百行の字幕に打ち込まれた名前は、表記がぶれる機会が何百回あるということです。
字幕(subtitles)と聴覚補助字幕(closed captions)は別物として整理しておく価値があります。前者は音は聞こえる前提で言葉だけを補うもの、後者は音が聞こえない人のためのもので、話者の明示、意味のある効果音、音楽や雰囲気の手がかりまで含みます。聴覚補助モードを用意するなら、その追加テキストも翻訳対象であり、セリフ台本だけから見積もると確実に抜け落ちます。
セリフ以外で字幕に隣接するテキストも同様です。ダイアログ枠のない環境ボイス、プレイ中に流れる無線の会話、画面上の文章を読み上げる演出。プレイ中に流れるセリフは、カットシーンのセリフより読む余裕を多めに取る必要があります。プレイヤーの注意が操作と読解に分割されているためです。
音声言語と字幕言語は別々の設定にする
「元の音声のまま、自分の言語の字幕で遊びたい」というプレイヤーは相当な割合を占めます。吹き替えを用意しているゲームで二つの選択肢を連動させてしまうと、その人たちが求めていた組み合わせを消してしまうことになります。二つは独立した設定にし、初回起動時に妥当な組み合わせを既定として与え、同じ場所に並べて組み合わせを発見できるようにします。
ここには見落とされやすい内容面の帰結があります。吹き替え台本と字幕翻訳は同じテキストではありません。吹き替えは口の動きと演技の尺に合わせて書かれ、字幕は速く読めるように書かれます。両方を制作する場合、吹き替え音声を再生しているときの字幕がどちらのテキストを出すのかを明示的に決めてください。同じ言語で、聞こえている言葉と字幕が食い違っている状態は、プレイヤーからの指摘が最も多い不一致です。少なくとも字幕言語と音声言語が一致しているときは、字幕は俳優が言っていることと一致しているべきです。
既定値にも規則が要ります。判定された言語に吹き替えが存在するなら、それを初期の組み合わせとして提示するのは妥当です。ただしその後は明示的な選択が常に優先され、片方を変えたときにもう片方が黙って変わることがあってはいけません。
字幕データの持ち方と、自動化する価値のあるチェック
現実的な保持方法は二つです。通常の文字列テーブルにボイスラインIDをキーとして入れ、時刻を別の列に持つ方法。あるいは言語ごとの専用字幕ファイルを持つ方法。前者は既存のパイプラインの中に収まるため、字幕も他の文字列と同じように集計され、検証され、レビューされます。ファイルとしての整然さより、この利点のほうが大きいことが多いはずです。外部の字幕制作ツールや、字幕形式を前提とした動画パイプラインをすでに持っている場合は後者が向きます。
どちらを選んでも、時刻データはテキストと分けて保持してください。再翻訳のたびにタイミング調整の成果が失われないようにするためです。そしてボイスラインIDは安定させてください。音声・テキスト・蓄積した翻訳資産をつなぐ結合キーになります。
以下のチェックはどれも自動化が容易で、手作業のレビュー負荷を大きく減らします。特に読速のチェックは効果が大きく、主観的な判断を「見るべき字幕の一覧」に変えてくれます。
- すべてのボイスラインに全言語の字幕があり、存在しない音声を参照している字幕行がないこと
- 各字幕・各言語の計算上の読速が、設定した基準の範囲内に収まっていること
- 描画幅 × 行数が、対応する最小解像度で表示枠に収まっていること
- 最短表示時間を下回る字幕がなく、同じセリフの字幕どうしが時間的に重なっていないこと
- プレースホルダーと装飾タグが原文と完全に一致していること
- 話者IDが設定されていて、翻訳済みの名前に解決できること
自動化では代替できない確認
字幕の確認モードを用意してください。選択中の言語で、すべてのボイスラインを字幕付きで順に再生していくデバッグ画面です。言語ごとの通しプレイが視聴作業に変わりますし、分岐や任意コンテンツの奥にあるセリフを確認する現実的な方法はこれしかありません。
結果は、対応する最小の画面で確認し、家庭用機向けのビルドなら部屋の反対側からも確認してください。机の距離のモニターでは完璧に読めていた字幕が、テレビでは読めないことがあります。これは翻訳の質とはまったく関係のない失敗ですが、その言語版についてプレイヤーの記憶に残るのは、たいていこちらのほうです。