動画を多言語化するとき、「音声を翻訳すれば終わり」と考えがちです。しかし、実際の字幕制作には、音声抽出、文字起こし、発話区間の検出、翻訳、タイムコードの維持、表示確認という複数の工程があります。
訳文が自然でも、字幕が話し終わった後に表示されたり、一度に長い文章が出たりすると視聴しにくくなります。この記事では、AIを使った動画字幕翻訳の仕組みと、公開前に確認したいポイントを整理します。
動画翻訳は5つの処理に分けられる
一般的な処理フローは次のようになります。
- 動画から音声を取り出す
- 音声認識で発話を文字にする
- 発話ごとに開始・終了時刻を付ける
- 文脈と用語を考慮して翻訳する
- SRTやWebVTTなどの字幕ファイルとして書き出す
重要なのは、翻訳と時間軸を別々に扱うことです。タイムコードは音声認識で検出した発話区間から取得し、翻訳時には変更しません。
動画
↓ 音声抽出
音声データ
↓ 音声認識 + 発話区間検出
原文 + タイムコード
↓ 翻訳
訳文 + 元のタイムコード
↓ 書き出し
SRT / WebVTT / ASS
前処理:音声の状態が認識精度を左右する
音声認識モデルが高性能でも、入力に大きな環境音やBGMが含まれていると誤認識は増えます。特に注意したいのは次のような動画です。
- 複数人が同時に話す
- マイクから遠く、声が小さい
- BGMが会話より大きい
- 固有名詞、型番、略語が多い
- 一文が長く、ほとんど間を置かずに話す
自前のパイプラインなら、FFmpegで音声をモノラル・16kHzのWAVに変換してから認識処理へ渡せます。
ffmpeg -i input.mp4 \
-vn \
-ac 1 \
-ar 16000 \
-c:a pcm_s16le \
speech.wav
各オプションの意味は次のとおりです。
| オプション | 内容 |
|---|---|
-vn |
映像を出力しない |
-ac 1 |
音声をモノラルにする |
-ar 16000 |
サンプリング周波数を16kHzにする |
-c:a pcm_s16le |
非圧縮の16bit PCM WAVにする |
ただし、再エンコードだけで雑音が消えるわけではありません。元動画の声が聞き取りにくい場合は、ノイズ除去や音量調整も検討します。
SRTでは「番号・時間・本文」を壊さない
SRTはシンプルなテキスト形式です。
1
00:00:01,200 --> 00:00:04,100
Today, we will explain how the API works.
2
00:00:04,500 --> 00:00:07,800
First, open the project settings.
翻訳するときに変更するのは、基本的に本文だけです。
1
00:00:01,200 --> 00:00:04,100
今日は、このAPIの仕組みを説明します。
2
00:00:04,500 --> 00:00:07,800
まず、プロジェクト設定を開きます。
字幕ブロックの番号、開始時刻、終了時刻を翻訳モデルへ渡して書き換えさせると、フォーマットが崩れる可能性があります。実装時はSRTを構造としてパースし、字幕本文だけを翻訳して元のタイムコードへ戻す方が安全です。
翻訳単位が小さすぎると文脈が失われる
字幕を一行ずつ独立して翻訳すると、次のような問題が起きます。
-
itやthisが何を指すのか判断できない - 同じ専門用語に複数の訳語が使われる
- 話者の口調が途中で変わる
- 文が次の字幕へ続く場合に、不自然な語順になる
一方、動画全体を一度に処理すると、入力サイズが大きくなり、失敗時の再処理もしにくくなります。数十個の字幕ブロックを一つのチャンクとして翻訳し、前後の文脈と用語集を添える方法が扱いやすいです。
技術講座や製品説明では、処理前に用語集を用意しておくと表記揺れを減らせます。
repository -> リポジトリ
deployment -> デプロイ
fine-tuning -> ファインチューニング
原文と訳文を同時に表示する
語学学習や翻訳チェックでは、二カ国語字幕が便利です。単純な形式なら、一つの字幕ブロックへ原文と訳文を続けて記述できます。
1
00:00:01,200 --> 00:00:04,100
Today, we will explain how the API works.
今日は、このAPIの仕組みを説明します。
ただし、二行にすると画面を占有する面積が増えます。スマートフォン向け動画では、文字数、改行位置、字幕を置く高さまで確認する必要があります。装飾や位置を細かく指定する場合は、SRTよりASSの方が向いています。
自前で組まずに字幕まで生成する選択肢
一度だけ処理したい場合や、音声認識・タイムコード・翻訳を個別に実装したくない場合は、専用サービスを利用する方法もあります。
Doc2Langの動画翻訳では、録画済みの動画または音声ファイルをアップロードし、音声認識、タイムコード生成、翻訳をまとめて処理できます。原文SRT、翻訳済みSRTに加え、原文と訳文を結合した二カ国語字幕をSRT、WebVTT、ASSで書き出せます。
サービスの仕様として、最初の60秒は登録不要でプレビューでき、音声・動画ファイルは1ファイル2GBまでです。専門用語を固定するための用語集もアップロードできます。
利用前に知っておきたい制限もあります。
- 1回の処理で指定できる翻訳先は1言語
- YouTube URLの直接入力には非対応
- ライブ動画やリアルタイム翻訳には非対応
- フォント、色、位置などの字幕スタイル設定は含まれない
- 音声認識と翻訳は自動処理なので、公開前の校正が必要
字幕スタイルを調整する場合は、ダウンロード後にAegisubやSubtitle Editなどで編集します。動画や音声をアップロードするときは、自分が利用権を持つファイルだけを使用し、機密映像では利用規約やデータの取り扱いも事前に確認してください。
公開前のチェックリスト
字幕ファイルを取得したら、最低限次の項目を確認します。
- 冒頭と終盤で字幕のタイミングがずれていないか
- 同じ字幕が長時間残っていないか
- 開始時刻が終了時刻より後になっていないか
- 字幕同士が不自然に重なっていないか
- 人名、製品名、技術用語が統一されているか
- 数値、単位、URL、コードが誤変換されていないか
- 一画面の文字数が多すぎないか
- 画面内の重要な情報を字幕が隠していないか
- 原文にない内容が訳文へ追加されていないか
FFmpegが字幕表示に対応した構成であれば、SRTを動画へ重ねてプレビュー用ファイルを作ることもできます。
ffmpeg -i input.mp4 \
-vf "subtitles=translated.srt" \
-c:a copy \
preview.mp4
YouTubeなどへ字幕ファイルを別途アップロードする場合でも、一度ローカルで全編を再生すると、文字だけのレビューでは見つけにくいタイミングの問題を発見できます。
まとめ
AI動画翻訳の品質は、翻訳モデルだけでは決まりません。入力音声の明瞭さ、発話区間の切り方、タイムコードの保持、文脈の渡し方、用語の統一、画面上での読みやすさがすべて関係します。
大量の動画を継続的に処理するなら、自前のパイプラインを作り、用語集と検証処理を組み込む価値があります。少数の動画をすぐ字幕化したいなら、音声認識からSRT出力までをまとめたサービスを使う方が手軽です。どちらの場合も、最後は実際の映像と合わせて人が確認する工程を残しておくのが安全です。