動画に字幕を入れる:RendiでSRTを焼き付ける実践ガイド

動画に字幕を入れる方法を、Rendiの非同期FFmpeg APIを使った実装例で解説します。SRTの事前確認、字幕スタイルの指定、ジョブ送信と完了確認、出力MP4の品質チェック、料金を左右する容量計算まで、バッチ処理へ進む前に押さえる実務手順と注意点を具体的にわかりやすくまとめました。

Friday, September 11, 2026Omid Saffari
動画に字幕を入れる:RendiでSRTを焼き付ける実践ガイド

承認済みの動画に字幕を入れる方法として、確認済みのSRTから字幕付きMP4を作りながら、自社インフラに動画処理用ワーカーを増やさない構成を解説します。Rendiは通常のFFmpeg字幕フィルターをAPIジョブとして受け付け、コマンドIDを発行し、レンダリング成功後に保存済みの出力を返します。役割の境界は明確です。ここで行うのは、既存の字幕を映像のピクセルへ焼き付けることです。音声の文字起こしや、文言が正しいかどうかの判断は行いません。

動画に字幕を入れるときの結論

プレーヤー側の字幕トラック設定に関係なく、すべての視聴者に同じ字幕を見せる必要があるなら、SRTを映像へ焼き付けます。字幕の表示・非表示を切り替えたい、言語を選びたい、プレーヤーのアクセシビリティ機能を使いたい場合は、SRTを分離したまま配信します。

Rendiで確実に進める手順は次のとおりです。

  1. 最終版の動画とSRTを組み合わせて確認する。
  2. 両ファイルをRendiが取得できるURLに置くか、先にローカルファイルをRendiへアップロードする。
  3. 公式ドキュメントに沿ったFFmpeg字幕コマンドを送信する。
  4. コマンドIDをポーリングするか、Webhookで最終結果を受け取る。
  5. MP4のメタデータを確認し、完成動画を最初から最後まで見てから次のジョブを送る。

この順序は重要です。エンコード自体が成功しても、字幕の表示が早すぎる、名前が間違っている、プラットフォームのインターフェースと文字が重なる、といった問題があれば納品物としては失敗です。

VIDEOとSRTがPOST工程に入り、SUCCESSを経てMP4として出力される構成図
Rendiは確認済みの2つの入力を非同期FFmpegジョブへ変換し、SUCCESS後に完成したMP4を取得可能にします。

Rendiが担う処理

Rendiが担うのは処理基盤であり、編集作業ではありません。ローカルで実行するものと同じFFmpeg命令をHTTP API経由で渡します。リクエストは作業指示書のようなものです。入力エイリアスが素材の場所を示し、FFmpeg文字列が処理内容を指定し、出力エイリアスが完成ファイルの名前になります。

現在のリクエストスキーマでは、ffmpeg_commandoutput_filesが必須です。入力キーはin_、出力キーはout_で始まり、その名前をコマンド内の二重波括弧にも記述します。送信に成功するとcommand_idが返り、以後はこのIDでジョブを追跡します。

最も簡単なのは、動画とSRTを、ファイル名まで含む公開HTTP URLまたは有効期限付き署名URLに置く方法です。手元のPCにあるローカルパスは入力URLとして使えません。Rendiにはローカルファイル向けのマルチパート直接アップロードもあり、最大5 TBのファイルに対応していますが、これは別の準備工程です。

焼き付け字幕と切り替え可能な字幕トラックの違い

焼き付け字幕は、デコードされるすべてのフレームの一部になります。見え方を一定にできる一方、その選択は元に戻せません。スペルを直すだけでも動画の再レンダリングが必要で、視聴者が字幕を非表示にすることもできません。

切り替え可能な字幕トラックは映像から分離されたままです。Rendiの字幕例でも、MP4のソフト字幕にはmov_textを推奨し、ビデオフィルターは使っていません。視聴者が表示を選べるうえ、文字を映像へ焼き込まずに済みます。

映像に埋め込まれた焼き付け字幕と、別トラックで保持される切り替え可能な字幕を比べた構成図
焼き付け字幕は常時表示、別トラックの字幕は切り替え可能です。レンダリング前に配信時の動作を決めます。

判断基準は明快です。見え方の統一が必要なレビュー用マスターやSNS配信用ファイルには焼き付け字幕を使います。同時に元のSRTを保管し、アクセシビリティ、検索、翻訳、視聴者による選択が重要な場面では、切り替え可能なトラックまたはサイドカーファイルも提供します。

レンダリング前にSRTを確認する

最も安く済むレンダリングは、やり直さずに済むレンダリングです。古い書き出しではなく、正確な最終カットにSRTを合わせて確認します。キューの順序、開始・終了時刻、人名や数値の表記、意図した改行、アクセント記号付き文字や非ラテン文字の代表例を点検してください。字幕がローワーサードと重なっていないか、画面下端に近すぎないかも確認します。

この工程にAI文字起こしまで含まれると考えてはいけません。音声認識で上流のSRT案を作ることはできますが、文言とタイミングを人または信頼できるレビュー工程が承認してから、このワークフローへ渡す必要があります。ここでのRendiの役割はレンダリングです。

スタイルを指定してRendiジョブを送信する

次のNode.js例では、Rendiが公開しているサンプル動画とサンプルSRTを使うため、実行に必要なのはRENDI_API_KEYだけです。ペイロードはRendiの現行OpenAPIにあるフィールド名とエイリアス規則に準拠しています。force_styleでは、白い文字、黒い縁取り、下部の余白を指定しています。libx264とAACを使い、Rendiの字幕レシピどおりのMP4を生成します。

JavaScript
const headers = {
  "X-API-KEY": process.env.RENDI_API_KEY,
  "Content-Type": "application/json",
};

const submit = await fetch("https://api.rendi.dev/v1/run-ffmpeg-command", {
  method: "POST",
  headers,
  body: JSON.stringify({
    input_files: {
      in_video: "https://storage.rendi.dev/sample/big_buck_bunny_720p_16sec.mp4",
      in_srt: "https://storage.rendi.dev/sample/subtitles.srt",
    },
    output_files: { out_1: "subtitled.mp4" },
    ffmpeg_command:
      "-i {{in_video}} -vf \"subtitles={{in_srt}}:force_style='FontSize=22,PrimaryColour=&H00FFFFFF,OutlineColour=&H00000000,BorderStyle=1,Outline=2,Shadow=0,MarginV=36'\" -c:v libx264 -crf 20 -c:a aac -b:a 192k {{out_1}}",
  }),
});

if (!submit.ok) throw new Error(await submit.text());
const { command_id } = await submit.json();

for (;;) {
  const poll = await fetch(
    `https://api.rendi.dev/v1/commands/${command_id}`,
    { headers: { "X-API-KEY": process.env.RENDI_API_KEY } },
  );
  const job = await poll.json();
  if (job.status === "SUCCESS") {
    console.log(job.output_files.out_1);
    break;
  }
  if (job.status === "FAILED") throw new Error(job.error_message);
  await new Promise((resolve) => setTimeout(resolve, 2000));
}

字幕フィルターはフレームを書き換えるため、動画の再エンコードが必要です。スタイル、コーデック、品質は調整できますが、変更するたびに新しい出力としてレビューしてください。Rendi公式のFFmpegチートシートでは、fontsdirFontNameによるカスタムフォントも説明されています。ライブラリ全体へ適用する前に、実際に使うフォントとグリフ一式をテストします。

実際に検証した範囲

2026年9月11日時点で、上記のエンドポイント、リクエストフィールド、エイリアス規則、ステータス値、レスポンスフィールドをRendiの現行OpenAPIファイルと照合しました。また、同じ字幕フィルターをFFmpeg 8.0.1で、Rendiの公開サンプル動画とSRTに対してローカル実行しています。結果は16秒、1280×720、H.264映像とAAC音声のMP4となり、5秒時点のフレームには想定どおり字幕が表示されました。

この環境にはRendiのAPIキーがなかったため、Rendiクラウドのジョブは送信していません。コードはスキーマとの整合性を確認済みで、FFmpeg処理もローカル検証済みですが、クラウドでの実行を検証済みとは主張しません。

短いジョブはポーリング、長いジョブはWebhook

Rendiのステータスエンドポイントが返す状態は、QUEUEDPROCESSINGPREPARED_FFMPEG_COMMANDFAILEDSUCCESSです。POSTが受理されても、完成動画ができたとは限りません。最終状態まで待ち、失敗時はerror_messageを通知し、成功後に限って出力を読み取ります。

Rendiは、完了まで約30秒以下と見込まれるジョブにはポーリング、それより長い処理にはWebhookを推奨しています。Webhookでも、ポーリングと同じ完了済みコマンドデータを受け取れます。本番環境では完了ハンドラーを冪等にし、素早く応答させ、Webhook配信が最終的に失敗した場合の復旧手段としてポーリングも残します。

機密性の高い出力には、有料プランでis_private: trueを設定し、ポーリング時に署名付きURLをリクエストします。初期設定は公開ストレージです。非公開ファイルには恒久的な公開URLがなく、取得するダウンロードリンクの有効期間は最長7日です。

バッチ処理の前に出力を検査する

SUCCESSが証明するのは、FFmpegの処理が完了したことだけです。字幕の品質までは保証しません。機械可読なレスポンスと実際の映像を両方確認します。

まずoutput_files.out_1が存在し、そのstorage_urlを開けることを確かめます。返された再生時間、寸法、コーデック、ファイル形式を、予定している納品仕様と比較します。続いて動画を最初から最後まで視聴し、最初のキュー、最後のキュー、最も速い会話、改行、人名、数値、カットやグラフィックオーバーレイ付近の字幕を重点的に確認してください。

同じスタイルプリセットをキューへ投入するのは、このレビューを終えてからです。ソース動画のリビジョン、SRTのリビジョン、FFmpegコマンド、RendiのコマンドID、出力ファイルID、レビュー担当者の判断をひとまとめに保存します。この記録があれば、レンダリングの寄せ集めを運用可能な制作システムへ変えられます。

料金を決めるのは動画の長さではなくバイト数

Rendiは、入力メディアと出力メディアの合計サイズを計測します。料金例では、1 GBの入力と0.5 GBの出力を合わせて、処理量を1.5 GBとしています。この例と同じ条件なら、Freeプランの50 GB枠では完全なジョブを33件処理して0.5 GBが残り、エントリーProプランの250 GBでは166件処理して1 GBが残ります。

1 GBの入力と0.5 GBの出力で使用量が1.5 GBになる計算式と、Freeの50 GB枠、Proの250 GB枠を示した構成図
Rendiが計測するのは読み書きするバイト数です。動画の長さだけでは費用を判断できません。

このジョブ件数はRendiの例を使った算術結果であり、字幕処理のベンチマークではありません。実際の焼き付け済みMP4は、ソース、コーデック設定、出力によって大きくも小さくもなります。処理量を予測する前に、自分の入力と出力を合計して測ってください。

Freeは月額$0で、50 GBの処理枠があり、1コマンドの実行時間は1分までです。エントリーProは月額$25、処理枠250 GBで、1コマンドの上限は10分に延びます。CPUを増やす構成や実行時間無制限の構成については、Rendiの料金詳細で扱っているため、ここでは同じ一覧を繰り返しません。

重要なのは運用面での比較です。Kapwing Proは、年払いの場合はメンバー1人あたり月額$16、月払いなら$24と記載されています。たまに単発で処理するなら、ビジュアルエディターのほうが簡単です。承認済み素材を起点に、字幕の仕上げを追跡可能な反復工程として動かし、担当者が毎回エディターを開かない運用にはRendiが向いています。

特に効果が高い7つのワークフロー

字幕を付ける人すべてに最適というわけではありません。すでに承認済みのSRTがあり、最終レンダリングを繰り返しているチームほど大きな効果を得られます。

順位効果を得られるチーム具体的なワークフロー費用対効果が生まれる理由
1定期的に短尺動画を公開するSNSコンテンツチーム文字起こしを承認し、保存済みの字幕スタイルを適用し、最終カットごとにMP4をレンダリングしてレビューへ回すアップロード、スタイル指定、書き出し、ダウンロードの反復作業をなくし、各プラットフォーム版の見え方を統一できる
2レビュー用マスターを納品するローカライズ会社各言語の承認済みSRTを同じソースと組み合わせ、言語別のレビュー用MP4へ焼き付け、元の字幕ファイルも保管するクライアントは視聴者と同じタイミングと配置を確認でき、制作側は編集可能な言語アセットを維持できる
3増え続ける講座ライブラリを運営するチーム講座マスターとSRTの承認後に字幕付き派生版を生成し、返された再生時間と寸法を比較する講座ごとに編集担当者が手作業するのではなく、字幕の仕上げを管理された公開工程にできる
4動画クリップを制作するポッドキャストスタジオ再利用キューにある承認済みクリップと修正済みSRTを、1つの字幕プリセットへ渡す編集者が字幕の最終書き出しを反復せず、フックとカットへ集中できる
5製品デモを管理するサポートチーム承認済みスクリプトまたはインターフェース録画が変わるたびに、字幕付きデモを再レンダリングするソース、字幕リビジョン、コマンドID、レビュー済み出力を使って改訂履歴を追跡できる
6n8n、Make、Zapierで構築する自動化支援会社ワークフローからRendiジョブを送信し、ポーリングまたはWebhookで待機して、保存済みURLを次の承認済み工程へ渡す制約のある自動化ランタイム内でFFmpegを動かさずにメディア処理を追加できる
7過去の映像を探して再利用するメディアチーム適切なソースクリップを見つけ、承認済みSRTを付け、固定字幕のレビュー版またはSNS版を作る検索とレンダリングを混同せず、素材の発見から納品までを接続できる。検索についてはReelbackレビューで解説している

構築する価値がある3つのプロダクト

1. ブランド基準を守る字幕バッチ仕上げツール

最も有望な機会です。コンテンツチームや制作会社向けに、用途を絞ったポータルを作ります。受け付ける動画URL、承認済みSRT、名前付きスタイルプリセット、レビューページ、ダウンロード可能なMP4を揃えます。売るのは多機能エディターではなく、再現性と承認プロセスです。

米国ではadd subtitles to a videoが月間約1,900回検索され、Kapwing Proは年払いでメンバー1人あたり月額$16からです。ユーザーを獲得できるだけの幅広い需要があり、チームで繰り返す用途は、特化型プロダクトとして成立するほど明確です。

販売可能な最小構成に必要なのは、署名付きURL入力、SRT検証、少数の固定ブランドプリセット、Rendiへの送信、Webhook処理、出力メタデータ、人による承認または却下です。課題は模倣されにくさです。FFmpeg呼び出しを1つのフォームで包むだけなら、簡単にコピーされます。持続的な価値は、承認履歴、再利用可能なブランドルール、リビジョンの対応付け、確実な障害復旧から生み出す必要があります。

2. 自動化を前提にした字幕レンダリングAPI

クライアントへFFmpegの構文を見せたくない制作会社に、安定したエンドポイントを提供します。顧客が動画URL、SRT URL、プリセット名、コールバックURLを送り、サービス側でプリセットをレビュー済みコマンドへ変換し、正規化したジョブ結果を返す仕組みです。

Burn subtitles into videoの米国での検索数は月間40回、CPCは$8.16です。検索数は少ないものの、意図は非常に明確です。PAAにある「SRT字幕を動画へ恒久的に焼き付けるには?」という質問は、ほぼそのままプロダクトへの要望になっています。

MVPには、認証、リクエスト検証、Rendiジョブとの対応付け、冪等性キー、Webhook検証、再試行に耐える状態管理、利用記録が必要です。課題は顧客獲得経路です。検索流入だけでは事業を支えられず、Rendi自身が基盤となるAPIをすでに公開しています。このラッパーは、制作会社向け連携、プリセット、可観測性、サポートで選ばれる必要があります。

3. 字幕の事前検査と2種類の出力をまとめる引き渡しツール

1つのSRTと1つの最終動画を照合するレビューゲートを作り、承認した組み合わせから、焼き付け字幕のレビュー用MP4と、切り替え可能な字幕トラック付きの納品用MP4を生成します。どの字幕リビジョンがどのカットに対応するのか分からなくなる問題を繰り返す、ローカライズ、研修、メディア運用の各チームが購入者です。

実際のPAAにある「SRT字幕を動画に追加するには?」という質問は、現在の検索結果で繰り返されている、恒久字幕と切り替え可能な字幕の混同と隣り合っています。このプロダクトなら、担当者だけでコンテナの仕組みを判断させることなく、両方の用途へ対応できます。

MVPには、キュー解析、再生時間の比較、セーフエリアのプレビュー、リビジョンID、管理された2つのFFmpegレシピ、承認記録が必要です。課題は、基本的なSRT検証だけでは1機能にすぎず、単独の事業にはならないことです。レビュー履歴と引き渡し管理に、チームが公開工程で使い続けるだけの価値を持たせなければなりません。

制約と率直な評価

Rendiは、このワークフローからFFmpegインフラの運用を取り除きますが、編集上の責任まではなくしません。文字起こしの修正、ずれたタイミングの調整、読みやすい改行の選択、アクセシビリティ形式として焼き付け字幕が適切かどうかの判断は行いません。

また、字幕の焼き付けをロスレスにすることはできません。字幕フィルターが動画フレームを書き換えるため、動画は再エンコードされます。品質、実行時間、出力サイズは、コマンドとソース次第です。APIの既定の安全上限は300秒で、実際に指定できる最大値はプランで決まります。長時間または高負荷のジョブには、実際のエンコード時間に見合うコマンド実行上限を持つプランが必要です。

無料のブラウザツールで解決できるカジュアルな単発クリップに、この方法を使う必要はありません。視聴者が字幕を切り替える必要がある場合は焼き付けず、未レビューのスタイルを一括処理してはいけません。同じ承認済みの仕上げルールを多数の素材へ確実に適用するとき、Rendiの強みが生きます。

月曜日にまず試すこと

短い承認済み動画と最終版のSRTを1組用意します。両方を取得可能なURLに置き、選んだスタイルでサンプルペイロードを実行し、返されたメタデータを確認して、対応対象の中で最小の画面でMP4を最初から最後まで視聴します。そのレビューを通過してから、受け入れたコマンドをプリセットとして保存してください。続いて、ワークフロー上ですでに動画と字幕を承認している地点に、そのプリセットを接続します。

SRT字幕を動画へ恒久的に焼き付けるには?

FFmpegのsubtitlesビデオフィルターを使い、すべてのフレームへ文字を描画してから、新しい動画としてエンコードします。Rendiでは、ソース動画とSRTをin_エイリアスへ割り当て、MP4名をout_エイリアスへ割り当ててコマンドを送信します。ダウンロードして確認する前に、SUCCESSになるまで待ってください。

字幕を動画へ焼き付けるには?

最終版の動画と承認済み字幕ファイルを用意します。文字を常に表示する必要があるなら焼き付けコマンドを選び、視聴者が操作できるようにするなら切り替え可能な字幕トラックを選びます。Rendiの公式手順では、-vf subtitles={{in_srt}}で焼き付け、動画を再エンコードします。

SRT字幕を動画に追加するには?

SRTを映像のピクセルへ焼き付ける方法と、独立した字幕トラックとして追加する方法があります。焼き付ければどこでも表示を統一できますが、非表示にはできません。ソフト字幕は編集と切り替えが可能です。Rendiでは、焼き付け用のsubtitlesフィルターと、選択可能なMP4トラック用のmov_textを説明しています。

HandBrakeで字幕を動画へ焼き付けるには?

HandBrakeのデスクトップ画面では、外部SRTを追加し、焼き付けとして指定できます。たまに手作業する用途には合理的な選択です。Rendiが担うのは別の用途で、レンダリングを自動化システムへ組み込む際に、同等のFFmpeg処理をAPI経由で送信できます。

レビュー済みのメディア制作パイプラインを事業へ組み込みたい場合は、AI制作システムをご覧ください。

最終更新
2026年9月11日
カテゴリー
Build

Googleでこのサイトを優先する

omidsaffari.comをGoogle検索の優先ソースに追加

omidsaffari.comを優先ソースに設定すると、GoogleがTop Stories・AI Overviews・AI Modeであなたのために優先表示します。

Claude Code プラグインのeval入門:効果を差分で検証する

Claude Code プラグインのeval入門:効果を差分で検証する

Claude Code 2.1.269で追加されたネイティブplugin evalを使い、プラグインあり・なしの実行を比較する方法を解説します。ケースとgraderの設計、WITH・W/OUT・Δの読み方、意図的な回帰テスト、コスト管理、CIゲートへの組み込みまで、再現可能なリリース判定を具体例とともに整理します。2026年9月12日Build
音声AIエージェントの遅延原因をCloudflareで切り分ける

音声AIエージェントの遅延原因をCloudflareで切り分ける

Cloudflareのturnmetricsを使い、音声AIエージェントの遅延や無音応答をステージ別に切り分ける方法を解説します。7つのoutcome、各タイミングの読み方、3つの制御テストを押さえれば、モデルやTTSを推測で変更する前に、文字起こし・モデル・音声生成・ブラウザ再生のどこを調べるべきか判断できます。2026年9月12日Build
OpenAI Agents SDKかAgents APIか:開発体制で決める選び方

OpenAI Agents SDKかAgents APIか:開発体制で決める選び方

OpenAI Agents SDKとAgents APIのどちらを選ぶべきか。セッション管理、実行環境、データ保持、料金、移行コストを比較し、小規模チームから規制業界まで、開発体制に合う判断基準を具体例と試算で整理します。長時間タスク、ZDR、セルフホスト、運用負荷の違いも分かります。2026年9月11日Build
FFmpeg APIで見るRendi料金:動画時間より処理バイト数で選ぶ

FFmpeg APIで見るRendi料金:動画時間より処理バイト数で選ぶ

RendiのFFmpeg API料金を、入出力の処理量、ストレージ、コマンド実行時間、vCPUの4条件で比較。Freeから月額$25のPro、実行時間無制限プランまで、動画処理パイプラインに必要な最小構成の選び方、隠れコスト、Very Good FFmpeg・RenderIOとの違いを具体例で解説します。2026年9月11日Build
Codex CLI 0.154.0のworktree実践術:隔離から統合まで

Codex CLI 0.154.0のworktree実践術:隔離から統合まで

Codex CLI 0.154.0のworktree機能を実践的に解説します。隔離セッションの起動、作業場所と差分の確認、テスト、コミットの取り込み、後片付けまでを順に整理。依存関係、ポート、データベース、キャッシュ、秘密情報を別途管理する際の注意点や、並列開発で役立つ用途もわかります。2026年9月10日Build
Claude Code 使い方ガイド:maxEffortLevelで推論レベルを制御

Claude Code 使い方ガイド:maxEffortLevelで推論レベルを制御

Claude Code 2.1.267で追加されたmaxEffortLevelの使い方を解説します。ユーザー、プロジェクト、マネージド設定で推論負荷に上限を設け、どの値が優先されるかを検証。条件をそろえた日常タスクで品質とトークン支出を別々に測り、導入すべき上限を判断する方法が分かります。2026年9月10日Build
ブラウザ自動化の録画FPSはどう選ぶ?agent-browser v0.37.0実践ガイド

ブラウザ自動化の録画FPSはどう選ぶ?agent-browser v0.37.0実践ガイド

ブラウザ自動化の実行結果を、チームがレビューしやすい動画証跡として残す方法を解説します。agent-browser v0.37.0の新しい30 fps既定値、1〜60 fpsの使い分け、ffmpegの確認、MP4/WebM保存、CIで失敗原因を追える証拠を残す実践手順まで具体的に整理しました。2026年9月8日Build
VPS 料金で見るUltaHostの更新コスト:契約期間・追加費用を徹底比較

VPS 料金で見るUltaHostの更新コスト:契約期間・追加費用を徹底比較

UltaHostのVPS 料金と更新費用を契約期間別に検証。Basicは月額$6.89からですが、長期契約は返金対象外となる場合があります。Plesk・cPanelの追加料金、2026年8月の値上げ、旧SKU、Hostinger・DigitalOceanとの比較まで、更新前に必要な判断材料を整理します。2026年9月7日Build
ニュースレター

毎週日曜、一通の手紙。動くシステムの話。感想戦ではなく。

週刊。スパムなし。いつでも解除できます。