文字化けの正体は「文字コードの食い違い」
SRTファイルは、中身がただのテキストです。番号、表示時間、字幕の文が並んでいるだけで、ファイルの中に「この文字コードで書かれています」という情報は基本的に含まれていません。そのため、読み込む側のソフトが文字コードを推測し、その推測が外れると文字化けが起きます。
日本語の字幕で関わってくる文字コードは、主に次のとおりです。
- Shift_JIS(CP932)
- 日本語版Windowsで長く標準的に使われてきた文字コード。古いソフトや一部のプレイヤーはこれを前提にしていることがある
- UTF-8
- 現在のWebやスマートフォン、多くのソフトで標準的な文字コード。世界中の文字を一つの方式で扱える
- BOM付きUTF-8
- UTF-8のファイルの先頭に「これはUTF-8です」という目印(BOM)を付けたもの
- UTF-16
- 一部のソフトが書き出す形式。字幕ファイルではあまり見かけない
UTF-8で書かれた字幕をShift_JISだと思い込んで読むと、あるいはその逆をすると、意味の通らない文字の列が表示されます。字幕そのものが壊れているわけではなく、「読み方を間違えている」状態だと考えると分かりやすいでしょう。
症状から原因を見分ける
文字化けの見た目には、原因ごとにある程度のパターンがあります。どれに近いかを確認すると、直し方の見当がつきます。
- 「縺」「繧」「譁」などの見慣れない漢字が並ぶ:UTF-8のファイルが、Shift_JISとして読まれている可能性が高い
- 「�」や「?」が大量に表示される:Shift_JISのファイルが、UTF-8として読まれている可能性が高い
- 最初の字幕の先頭にだけ「」のような記号が付く、または1枚目の字幕だけ表示されない:BOMに対応していないソフトで、BOM付きUTF-8を開いている可能性がある
- 日本語は正しいが、字幕がまったく表示されない:文字コードではなく、形式や拡張子の問題を疑う
本来の字幕:「本日はお集まりいただきありがとうございます」 → UTF-8をShift_JISとして読んだ場合:「譛ャ譌・縺ッ縺企寔縺セ繧翫…」のような文字列になります(表示はソフトによって多少異なります)。
英語圏での同様のトラブルについては字幕に変な文字が表示されるときの対処 (英語)でも解説しています。
BOMの有無が問題になるケース
BOMは、UTF-8のファイルの先頭に置かれる数バイトの目印です。BOMがあると、多くのソフトは「このファイルはUTF-8だ」と確実に判断できます。特にWindowsの環境では、BOMのないUTF-8のファイルをShift_JISと誤認するソフトがあり、BOM付きにすることで文字化けが解消することがあります。
一方で、BOMを想定していない古いツールや一部のスクリプトでは、BOMそのものを文字として扱ってしまい、1枚目の字幕の番号が認識されなかったり、先頭に記号が表示されたりします。つまり、BOMは「付けたほうが必ず良い」ものではなく、使う環境に合わせて選ぶものです。
- BOM付きにしたほうがよい場面:Windowsの動画プレイヤーや表計算ソフトなどで開く場合
- BOMなしにしたほうがよい場面:BOMを扱えない古い変換ツールや、自作のスクリプトで処理する場合
- 迷ったら:まずはそのままのファイルで試し、問題が出たら切り替える
直し方:正しい文字コードで開き直して保存する
文字化けを直すときに最も大切なのは、「化けた状態のまま上書き保存しない」ことです。間違った文字コードで開いたまま保存すると、元の文字が失われ、二度と戻せなくなることがあります。作業の前に、必ず元のファイルのコピーを取っておきましょう。
Windowsのメモ帳を使う場合の流れは次のとおりです。
- 元のSRTファイルをコピーして、バックアップを作る
- メモ帳でファイルを開き、日本語が正しく表示されるかを確認する
- 「名前を付けて保存」を選び、文字コード(エンコード)の欄で、使いたい形式(UTF-8、BOM付きUTF-8、ANSIなど)を選ぶ
- 拡張子が「.srt」のままになっていることを確認して保存する
VS Codeを使う場合は、画面右下に表示されている文字コード(「UTF-8」など)をクリックし、まず「エンコード付きで再度開く」で日本語が正しく読める文字コードを探します。正しく表示されたら、もう一度クリックして「エンコード付きで保存」から保存したい文字コードを選びます。Macのテキストエディットでも、標準テキストとして保存する際に文字コードを選べます。
SRTの中身を編集する際の注意点はSRTファイルの編集方法 (英語)でも紹介しています。
プレイヤー側の設定で解決する方法
ファイルを変換しなくても、プレイヤー側で文字コードを指定すれば正しく表示できる場合があります。VLCなどの多くのプレイヤーには、字幕の既定の文字コードを指定する設定項目があります。自分のプレイヤーの設定画面で「字幕」に関する項目を探し、日本語のファイルが化ける場合は、UTF-8か日本語(Shift_JIS)に切り替えて試してみてください。
ただし、プレイヤーの設定で直すのは、自分のPCで見るときだけの対処です。字幕ファイルを他の人に渡したり、動画編集ソフトや配信サイトに読み込んだりする場合は、ファイル自体をUTF-8に統一しておくほうが、相手の環境で文字化けするリスクを減らせます。
文字化け以外で字幕が表示されないときのチェック
日本語は正しく表示できているのに字幕が出ない場合は、文字コード以外の原因を疑います。
- 拡張子が「.srt.txt」になっている:保存時にテキストファイルとして扱われ、拡張子が二重になっていることがある
- 時刻の書式が崩れている:SRTでは「00:01:02,500」のようにミリ秒の前がカンマになる
- 番号や空行が抜けている:字幕と字幕の間には空行が必要
- 動画ファイルと名前が一致していない:同じフォルダで同じファイル名にすると自動で読み込むプレイヤーが多い
詳しいチェック方法はSRTファイルが動かないときの対処 (英語)にまとめています。SRTの基本的な書き方を確認したい場合はSRTファイルの作り方も参考になります。
mydublyで作るSRTファイルの文字コード
mydublyは、動画や音声から字幕ファイルを作れるブラウザ上のツールです。「Download subtitles」で保存できるSRTファイル(subtitles.srt)は、BOM付きのUTF-8で書き出されます。そのため、Windowsのプレイヤーを含め、多くの環境で日本語がそのまま読める形になっています。字幕は、発話の区切りごとに1行ずつの形式です。
1 / 00:00:01,200 --> 00:00:03,800 / 本日はお集まりいただきありがとうございます。(実際のファイルでは番号・時刻・字幕の文がそれぞれ別の行に書かれます)
作り方は、「Drop a video here」に動画をドロップし、「Full translation output」をオフにしたまま「Select language」で話されている言語(日本語の動画なら Japanese)を選び、「Transcribe video」を押すだけです。字幕は翻訳されずにそのままの言語で作られます。英語の動画に日本語の字幕を付けたい場合は、「Select language」で「Japanese」を選ぶと、翻訳された字幕が作られます。料金は1分1クレジット(1ファイル最低5クレジット)で、20分の動画なら20クレジット($0.02)です。
一方で、mydublyは既存のSRTファイルを読み込んで文字コードを変換したり、翻訳したりする機能を持っていません。すでに文字化けしているファイルを直すには、上で紹介したテキストエディタでの方法を使ってください。元の動画が手元にあれば、字幕を作り直すこともできます。また、字幕は「Download subtitles」でSRT、「Download VTT」でVTTとしてダウンロードできます。BOMを扱えない環境で使う場合は、テキストエディタでBOMなしのUTF-8として保存し直してください。字幕作成機能の詳細は字幕作成ページ (英語)、1行の文字数の目安は字幕の文字数ルールで紹介しています。
よくある質問
SRTファイルはShift_JISとUTF-8のどちらで保存すべきですか?
現在はUTF-8で保存するのが無難です。多くの動画編集ソフトや配信サイト、スマートフォンのプレイヤーはUTF-8を前提にしています。古いWindows向けのソフトで化ける場合に限って、Shift_JISやBOM付きUTF-8を試すとよいでしょう。
文字化けしたまま保存してしまったファイルは元に戻せますか?
化けた文字が「?」などに置き換わって保存された場合、元の文字の情報が失われているため、復元は難しいことが多いです。別の文字として保存されただけなら、文字コードを変えて開き直すと戻ることもあります。いずれにしても、作業前にバックアップを取っておくことが最善の予防策です。
スマートフォンで字幕が文字化けするのはなぜですか?
スマートフォンのプレイヤーアプリの多くはUTF-8を前提にしているため、Shift_JISで保存された字幕ファイルは化けやすくなります。PCでファイルをUTF-8に変換してから転送し直すと解決することが多いです。アプリによっては設定で文字コードを指定できる場合もあります。
BOMがあるかどうかはどうやって確認できますか?
VS Codeでは、画面右下の文字コードの表示が「UTF-8 with BOM」のようになっていればBOM付きです。Windowsのメモ帳でも、画面下部の表示や保存時の選択肢で確認できます。バイナリエディタでファイルの先頭を見ると、BOMがあれば特定の3バイトが並んでいます。
mydublyで作ったSRTが文字化けすることはありますか?
mydublyのSRTはBOM付きUTF-8なので、多くの環境では日本語がそのまま表示されます。ただし、BOMやUTF-8に対応していない古いソフトで開くと、表示が崩れる可能性はあります。その場合は、テキストエディタでそのソフトが想定する文字コードに保存し直してください。
VTT形式の字幕でも同じように文字化けしますか?
VTTもテキスト形式なので、文字コードの食い違いがあれば同じように化けます。ただしVTTはUTF-8で書くことが前提の形式なので、UTF-8で保存しておけば問題は起きにくくなります。VTTが必要な場合は、mydublyの「Download VTT」ボタンからSRTと同じ内容の字幕を直接ダウンロードできます。
