動画に字幕を焼き込む方法(どこにもアップロードせずに)
動画に字幕を焼き込む方法を解説。アップロードせずに自分のパソコンだけで使える4つの手法を比較し、実際に動作するFFmpegコマンドの具体例と、再エンコードによって生じる画質劣化を避けるための実践的なコツを詳しく紹介します。
動画に字幕を焼き込むとは、テキストを映像そのものに描き込んで再エンコードすることで、キャプションはファイルの中をピクセルとして移動するようになります。字幕ファイルを一切受け付けないTikTok、Reels、Shortsではこれが必須ですし、キャプションがアクセシビリティのための選択肢ではなくデザインの一部である場合にも必要です。作業のためにどこかへアップロードする必要はありません — FFmpeg、HandBrake、デスクトップ向けの字幕アプリは、いずれもブラウザツールにあるようなファイルサイズの上限なしに、すべてローカルで処理できます。
この記事では、その4つの方法と、実際に動くコマンド、そして本当に画質を損なう2つの原因について解説します。
焼き込みが正しい選択になるとき
| 焼き込み(ハードサブ) | 字幕ファイルまたはトラック(ソフトサブ) | |
|---|---|---|
| 視聴者がオフにできるか | できない | できる |
| TikTok、Reels、Shortsで使えるか | 使える | 使えない、対応していない |
| YouTube、Vimeoで使えるか | 使える | 使える、しかも検索可能 |
| アクセシビリティ対応として認められるか | 通常は認められない | 認められる |
| 検索エンジンにインデックスされるか | されない | される |
| 後から誤字を直せるか | 動画を再レンダリングする必要がある | テキストファイルを編集するだけ |
| 1つのファイルに複数言語を収められるか | 収められない、言語ごとに1本のレンダリングが必要 | 収められる、言語ごとに1トラック |
| スタイルがそのまま保たれるか | 保たれる | ASSトラックの場合のみ保たれる |
多くの人にとって、実用的な答えは「両方」です: 他の方法が通用しない縦型のソーシャルプラットフォーム向けには焼き込みを使い、字幕ファイルを読み込むあらゆる場所にはファイルを用意する — ファイルなら検索でき、切り替えられ、後から修正できるからです。1つの作業から両方を得たい場合は、複数言語での配信で、同じタイムラインから2種類の出力を作る方法を解説しています。
字幕を焼き込む4つの方法
| FFmpeg | HandBrake | ブラウザツール | デスクトップ向け字幕アプリ | |
|---|---|---|---|---|
| 価格 | 無料 | 無料 | 無料プランあり、その後はサブスクリプション | 買い切りまたはサブスクリプション |
| 動画をアップロードするか | しない | しない | する、ファイル全体を | しない |
| ファイルサイズ・長さの上限 | ない | ない | ある、たいてい厳しい | ない |
| 字幕そのものを作れるか | 作れない | 作れない | 作れる | 作れる |
| スタイルの制御 | ASSまたはforce_style経由 | 限定的 | テンプレートのみ | 完全に制御可能、リアルタイムプレビュー付き |
| 学習コスト | コマンドラインの知識が必要 | 中程度 | ほぼない | 低い |
正直な補足を2つ。FFmpegとHandBrakeは無料でありながら、この作業には十分すぎる性能を持っています。すでに完成した字幕ファイルがあるなら、FFmpegはコマンド1つで済み、何かを買う理由はありません。どちらも行わないのが、字幕そのものを作ることです — あくまで、別の場所でタイミングと修正が済んだファイルを焼き込むだけです。ブラウザツールは字幕を作ることもできますが、アップロードは避けられないため、機密性のある素材や、上限を超える長さの素材には使えません。
FFmpegで焼き込む
プレーンなSRTの場合:
ffmpeg -i input.mp4 -vf "subtitles=subs.srt" -c:a copy output.mp4
スタイル付きのASSファイルの場合は、スタイルが失われず反映されるよう、assフィルターを使います:
ffmpeg -i input.mp4 -vf "ass=subs.ass" -c:a copy output.mp4
既定の設定に任せず、品質を明示的に指定する場合:
ffmpeg -i input.mp4 -vf "subtitles=subs.srt" \
-c:v libx264 -crf 18 -preset slow -c:a copy output.mp4
SRTを事前に変換せず、スタイルだけを変更する場合:
ffmpeg -i input.mp4 \
-vf "subtitles=subs.srt:force_style='FontName=Arial,FontSize=24,Outline=2'" \
-c:a copy output.mp4
Windowsの落とし穴。 フィルター内のパスは、シェルではなくフィルター自身がパースします。そのため、ドライブ文字の後のコロンとバックスラッシュはエスケープしなければなりません。ファイルが確かに存在するのに、コマンドがファイル未検出エラーで失敗する最も多い原因はこれです:
ffmpeg -i input.mp4 -vf "subtitles='C\:/Videos/subs.srt'" -c:a copy output.mp4
できる限り、字幕ファイルは作業ディレクトリに置き、ファイル名だけを指定してください — そうすればこの問題自体が起こりません。
実際に画質を損なうもの
画質を損なう原因は2つあり、いずれも焼き込み自体ではありません。
すでに圧縮済みのファイルを再エンコードすること。 焼き込みには再エンコードが必要で、これは非可逆な処理です。マスターファイルに対して行うなら、目に見える劣化はほとんどありません。しかし、プラットフォームがすでに圧縮したファイルに対して行うと、圧縮アーティファクトをさらに圧縮することになり、そこでブロックノイズや輪郭のにじみが発生します。常に持っている中で最も高品質なバージョンから始め、すでに一度焼き込んだファイルに、キャプションを重ねて焼き込むことは絶対に避けてください。
エンコーダーの既定設定のまま使うこと。 x264での-crf 18は、ほとんどのコンテンツで目にはほぼ劣化が分からないレベルです。既定値の23は、精細な映像では明らかに甘くなります。-preset slowは、時間と引き換えに同じ品質でファイルを小さくします。そして-c:a copyは音声ストリームをそのまま保持します — 映像だけを変更しているのに、音声まで再エンコードする理由はありません。
レンダリング結果がプレビューと一致しない理由
原因は2つあり、いずれもエンコードにかける前に直せます。
フォント。 レンダラーは、見つけられるフォントで描画します。選んだフォントがインストールされていない、あるいはその文字体系を描画できない場合 — 表示用のキャプション向けフォントの大半は、ラテン文字、キリル文字、ギリシャ文字しかカバーしていません — 代わりのフォントが使われ、アラビア語、タイ語、ハングル、CJKのテキストは空の四角として表示されることがあります。12言語をレンダリングした後ではなく、前にフォントを確認してください。
キャンバスサイズ。 ASSの位置指定とフォントサイズは、動画のピクセル寸法ではなく、ファイル内で宣言された仮想キャンバスに対する相対値です。キャンバスが固定されていない限り、同じフォントサイズでも1080pの映像と4Kの映像では画面上の表示サイズが変わります。Sablateはキャプション用のキャンバスを高さ1080の仮想フレームに固定し、回転情報を含む元映像の実際のアスペクト比から幅を導き出します。そのため、フォントサイズはどの解像度で撮影しても同じ意味を持ち、エディタのプレビューもレンダラーが使うものとまったく同じキャンバスに合わせて拡大縮小されます。
これは、ツールによって焼き込みの品質がこれほど違う理由でもあります。多くのオンラインエディタは、キャプションを単なる平坦なテキストオーバーレイとして合成しています。一方、Sablateの焼き込みはlibassによってレンダリングされます — これはメディアプレイヤーがASS字幕の表示に使っているのと同じエンジンです。そのため、輪郭線、影、単語単位のカラオケタイミング、文字体系に合ったフォントは、近似的なグラフィックではなく、本物の字幕タイポグラフィとして仕上がります。
縦型・正方形での出力
動画をReels、Shorts、TikTokに配信する場合は、後からクロップするのではなく、レンダリング中にアスペクト比を変換してください。焼き込みが済んだ16:9の動画を9:16にクロップすると、映像と一緒にキャプションの両端も切り取られてしまいます。
Sablateは16:9(1920×1080)、9:16(1080×1920)、1:1(1080×1080)のいずれかでレンダリングし、対象のフレームにクロップするか、元映像をぼかしたコピーでパディングして、キャプションを最終的なフレームに合わせて配置します。縦型フレームでは、画面下から5分の1の範囲にテキストを置かないでください — ほとんどのスマートフォンでは、その部分がプラットフォーム自身のインターフェースに覆われます。
コマンドラインを使わずに行う
修正済みの字幕ファイルをまだ持っていない場合、焼き込みは文字起こし・修正・スタイル設定・レンダリングという、より長い作業の最後の一歩にすぎません。Sablateはこの一連の作業を、すべて自分のパソコン上だけで完結させます — Whisperによるローカルでの文字起こし、タイムライン上での再タイミングと読み上げ速度の警告付きエディタ、13種類のキャプションプリセット、そしてプレビューと一致する焼き込みです。
焼き込みは無料プランでも、小さなコーナーマーク付きで使えます。Proはそのマークを外し、.ass、複数トラックの.mkv、バッチ書き出しを$29の一度きりの支払いで追加します。詳しい違いはダウンロードページ、または料金ページをご覧ください。
まとめ
プラットフォームが字幕ファイルを読み込まない場合、またはキャプションが見た目そのものの一部である場合は焼き込んでください。それ以外の場所には字幕ファイルを用意してください — 編集できるテキストは、編集できないピクセルに勝ります。アップロード用のコピーではなく、マスターからレンダリングしてください。CRF 18を使い、音声はコピーしてください。そしてエンコードにかける前に、フォントとキャンバスを確認してください — 完璧なはずの字幕ファイルが誤って表示されてしまう原因は、この2つだからです。