SuggescoMagazine 第 90 号 P.01
Suggesco AI何を読めばいいか、お困りですか?
AIツールSuggesco

AIの文字起こしで字幕を作ると誤変換が残る。台本の文字とWhisperの時刻でSRTを組んだ手順

AIに書き起こさせると、どうしても誤変換が残ります。ただ台本が手元にあるなら、文字は台本から、時…

動画に付けるSRT字幕を、動画の音から作るのをやめました。数字はすべて、2026年8月に仕上げた8分26秒の動画1本と、その次に作った1本の実測です。2本ぶんの記録なので、どんな動画にも当てはまる手順としては書けません。やっていることは単純で、字幕に出す文字は台本からそのまま取り、表示する時刻だけをAIの書き起こしから借ります。ナレーションが台本を読ませたものなら、音を文字に起こし直す工程はもう要りません。工程を1つ抜いた結果、誤変換を直す作業ごと無くなりました。1本ぶん114ブロックを作って、本文は台本と1字も違いませんでした。

目次

SRTファイルの中身は、番号と時刻と本文の3行

SRTは、字幕を文字だけで持っておくための形式です。動画そのものには手を入れず、いつ・何を出すかだけを並べたテキストファイルで、拡張子は .srt。メモ帳のようなものでそのまま開けます。中身は、番号・時刻・本文の3行がひたすら続く形をしています。実物を1つ出します。

1
00:00:00,000 --> 00:00:04,287
一人でやっている仕事を、
まるごとAIに任せてみたことがあります。

1行目が通し番号、2行目が表示する時刻の範囲、3行目から下が画面に出す文章です。1つのまとまりが終わったら空の行を1つ挟んで、次の番号に進みます。時刻は「時:分:秒,ミリ秒」で、秒とミリ秒のあいだがピリオドではなくカンマなのが、手で書くと最初につまずくところでした。本文は1行でも2行でも構いません。上の例は2行に折り返しています。

形式そのものは古くからあるもので、書き方を細かく解説した記事はすでにたくさんあります。以降は、中身をどうやって用意したかの話だけを書きます。

AIに書き起こさせると、なぜ誤変換が残るのか

精度を上げても、誤変換はゼロになりませんでした

字幕を作るとき、よく見かけるやり方は、動画の音をAIに書き起こさせて、返ってきた文章をSRTに流し込む形だと思います。私も最初はそうしていました。

使ったのはWhisperという公開されている書き起こしのモデルで、自分のパソコンの中で動かしています。しかも今回の音は、人がマイクの前で喋ったものではありません。台本を音声合成に読ませて作った、雑音の一切入っていない音です。書き起こす条件としては、かなり良いほうに入ります。

それでも、返ってきた書き起こしを台本と突き合わせたら、違っている箇所が並びました。「容量を超えて」が「量々を超えて」に、「腑に落ちて」が「負に落ちて」に、「抱えすぎると」が「大すぎると」になっています。サイト名のSuggescoは「スゲスコ」と書かれていました。

誤変換とまでは呼べない差も混ざります。台本の「まるごと」が「丸ごと」に、「ぶれる」が「ブレる」に変わっていました。読んで意味は通りますが、字幕に出すなら台本のとおりの文字を出したいところです。

録音の条件を整えれば精度は上がります。無料でできる書き起こしのやり方と、精度を左右する条件は無料のAI文字起こし3つの方法を比較。外に出せない音源はパソコンの中だけで文字にするやり方にまとめました。ただ、上げてもゼロにはなりませんでした。

台本が手元にあるなら、文字を書き起こしから取る理由がない

誤変換が残るなら直せばいい、というのが最初の発想でした。実際、変換の対応表を作って直していた時期があります。ただ、動画1本で114ブロックあります。毎回それを目で追って、台本と見比べて直すことになります。

途中で気づいたのは、直そうとしている正解が、直す前から手元にあることでした。ナレーションは台本を読ませて作っています。字幕に出したい文字列は、書き起こしを走らせる前の時点で確定しています。

SRTの作り方を扱っている記事を上から一通り開いてみると、どれも「動画の音をAIに書き起こさせる」か「手で打つ」かの二択でした。台本が先に手元にある場合を前提にしたものは、私が開いた範囲では見当たりませんでした。書き起こしの精度を上げる方向の工夫は多いのに、書き起こしを使わないという選択肢が抜けています。

文字は台本から、時刻だけをWhisperから取る

やり方を一言でいうと、書き起こしを読むのをやめて、時計としてだけ使います。

Whisperの出力から、秒数だけを受け取る

Whisperは、書き起こした文章をひとまとまりずつ区切って、それぞれに始まりと終わりの秒数を付けて返します。文章は上に書いたとおり誤変換を含みますが、秒数は音の波形から出ているので、言葉の変換とは別の系統の情報です。受け取っているのは、その秒数だけです。文字は1つも使っていません。

台本と書き起こしを1文字ずつ対応づける

秒数は、書き起こし側の文字に紐づいた状態で返ってきます。台本の文字に付け替えるには、どの文字がどの文字にあたるかの対応表が要ります。

対応づけに使っているのは、Pythonに最初から入っているdifflibという差分の道具です。2つの文章を渡すと、一致している区間をまとめて返してくれます。突き合わせる前に、両方から空白と句読点とカギカッコを落としておきます。表記の揺れや誤変換があっても、文章の大部分は一致するので、一致した位置の時刻をそのまま引き継げます。

一致しなかった文字、たとえば「腑」のように書き起こし側で別の字になっていた箇所には、時刻の持ち主がいません。そこは、すぐ近くにある対応の取れた文字から時刻を借ります。前後にずらしながら探して、見つかったところの秒数を当てます。

ブロックの区切り方は、台本の側で決めます。句点で切って、それでも長すぎる文は読点でもう一段割ります。字幕が文の途中で消えると読みにくいので、切れ目は台本の句読点に合わせるのが自然でした。最後に、隣り合うブロックが重ならないよう開始を0.2秒ずつずらして、1つのブロックが最低0.6秒は画面に残るようにしています。

処理そのものは短いスクリプトにしてあります。私はコードを書けないので、中身はAIに書いてもらいました。動画を作るたびに同じものを回しています。

誤変換が原理的に混入しない、というのはこういうこと

出来上がったSRTの本文は、台本の文字列を切って並べ直したものです。書き起こしの文字は、1つも通っていません。

誤変換を減らしたのではなく、誤変換が入ってくる経路のほうが無い状態です。書き起こしから文字を取るのをやめた時点で、直す作業ごと消えました。変換の対応表も要らなくなりました。

使えるのは、台本が先にある動画に限ります。会議の録音やインタビューのように、話した内容が音にしか残っていないものでは、書き起こすところから始めるしかありません。

折り返しは目で見ない。機械にはじかせる4つの条件

文字と時刻が揃っても、まだ字幕にはなりません。1行に何字入れて、どこで改行するかが残ります。前に作った回では、ここを詰めていなかったせいで、変なところで2段になったり、句点だけが行頭に落ちたりしていました。字幕の改行は、本文の改行より制約が多いところでした。

やってしまったのが、Pythonのtextwrap.wrapで折ることでした。指定した文字数で機械的に折るだけの道具で、英語の文章を想定して作られています。日本語に使うと、上限にぶつかった位置でそのまま切れるので、句点だけが次の行の先頭に落ちます。日本語の字幕にtextwrapは使えません。

読みやすいかどうかを目で確かめるのをやめて、4つの条件に書き換えました。どれも書き出す前に判定できます。

1行が24字を超えていないか

画面からはみ出した字幕は読めません。私の場合は1920pxの幅に載せる前提で、実際に文字を描いて幅を測ったうえで、1行24字を上限に置きました。画面の幅と文字の大きさで変わる数字なので、そのまま持ち出せる値ではありません。自分の条件で1回測る、というところが中身です。

読点か句点の直後で切れているか

2行に分けるとき、切る位置は読点か句点の直後に限っています。日本語は文節の途中で切ると、急に読みにくくなります。候補が複数あるときは、上下2行の長さが近くなるほうを選びます。読点も句点も無い長い文だけ、真ん中あたりで割ります。

行頭に禁則の文字が来ていないか

2行目の先頭に「。、)」』】!?・ー」が来ていないかを見ます。句点だけが次の行にぽつんと落ちる形は、まさにここで止まります。文字数だけを見て折る処理では、この判定が入りません。

2行目が尻切れになっていないか

2行目に1〜2字しか残らない折り返しも読みにくいので、5字未満になる切り方はやめました。5という数字に根拠はなく、実際に画面で見たときの印象で置いています。

もう1つ、折り返した2行をつなぎ直して元の文と一致するかも、あわせて見ています。折る処理で文字が落ちても、目では気づけないからです。条件に外れたブロックは番号と理由が出るので、映像に焼く前に直せます。

【実測】114ブロック・違反0件で、本文が台本と1字も違わなかった

2,631字の台本を通したところ、114ブロックのSRTができました。上の条件に対する違反は0件です。24字を超えた行も、句点が行頭に落ちた行も、2行目が尻切れになった行もありませんでした。

できたSRTから本文だけを全部つなぎ直して、台本と突き合わせました。2,631字で、丸ごと一致しました。画面に出ている文字は、台本の文字そのものです。

数字は、2026年8月に仕上げた8分26秒の動画1本ぶんの実測です。別の回は台本2,849字で118ブロックでした。ブロック数は台本の句読点の打ち方で決まるので、字数が近くても同じにはなりません。2本ぶんの記録なので、どんな台本でもこうなるという話としては書けません。

字幕が「読める」かは、SRTの外側で決まる

SRTが正しくできても、画面で読めるかどうかは別の話です。SRTが持っているのは番号と時刻と文字だけで、書体も太さも色も入っていません。文字の見え方は、字幕を描く側の設定が決めます。

実際、SRTの中身は台本と1字も違わないのに、映像では字幕が潰れて読めなくなったことがあります。原因は、字幕を描くときに渡したフォントのほうにありました。同じ動画で他にも3か所壊れていて、そのときの記録は1枚ずつは合格していたのに、通しで見たら壊れていた。AIに丸投げした動画で見落とした4か所に分けて置いてあります。文字が正しいことと、読めることは、別々に確かめる必要がありました。

音を文字にするところは任せたまま、読みやすさだけ4つの条件に書き直した

音を文字にするところは、AIに任せたままです。私は手を入れていません。同じ台本から声のほうを作る工程も任せていて、その実測は自分の声を音声クローンにしてAIナレーションを作ったら、残った仕事は「原稿を何字書くか」だったで扱いました。あちらは音を作る側、いま書いているのが文字を並べる側の話です。

文字を字幕にする工程は、少し様子が違いました。どこで切れば読みやすいかという判断は自分の中にあるのに、そのままの形では機械に伝えられません。24字、読点と句点、行頭の禁則、5字。私がやったのは、読みやすさを4つの言葉に置き換えることでした。言葉にしてしまえば、あとは毎回そのとおりに判定されます。

置き換える前は、書き出した映像を再生して目で探していました。疲れると見落とすうえに、見落としたこと自体に気づけません。AIには無理な仕事だと思っていたのですが、条件の形に書き直せた時点で、無理ではなくなりました。できるかどうかを決めていたのは相手の性能ではなく、こちらが条件を書けるかどうかでした。

よくある質問

Q. 動画に字幕を追加する方法は?
A. 大きく3つあります。1つ目は、編集アプリや字幕の自動生成サイトに動画をアップロードして、音から字幕を作らせる方法です。無料で使えるものも多く、手を動かす量が少なくて済みます。2つ目は、SRTファイルを別に用意して、編集ソフトや動画サイトに読み込ませる方法。私が取っているのは、この形です。3つ目は、編集ソフトの上で1つずつ手で打つ方法です。台本があるなら2つ目が速く、無いなら1つ目から入るのが現実的だと思います。

Q. SRT字幕のタイミングがずれたときは、どう調整しますか?
A. ずれ方で分けています。最初から最後まで同じだけずれているなら、全ブロックの時刻に同じ秒数を足し引きすれば揃います。テキストファイルなので、まとめて置き換えるだけです。困るのは、後ろにいくほどずれが広がる場合で、足し引きでは合いません。私は書き起こしから時刻を取り直しています。音そのものから出た秒数なので、映像の尺と食い違いません。手で打った時刻を後から合わせにいくより、時刻の出どころを音に戻すほうが早いと感じています。

Q. YouTubeの自動字幕をそのまま使えばよいのでは?
A. 台本が無い動画なら、十分な選択肢だと思います。ただ、自動字幕は音から文字を起こしているので、上に書いた誤変換がそのまま画面に出ます。私の場合はサイト名が別の言葉になっていたので、そのまま出すわけにはいきませんでした。折り返しの位置も自分では決められません。台本がある動画なら、SRTを用意して読み込ませるほうが確実です。

Q. 台本が無い動画では、どうしていますか?
A. 音を書き起こすところから始めるしかありません。書き起こしの手順と、無料でどこまでできるかは無料のAI文字起こしを3つ比較した記事に置いてあります。書き起こしたテキストを一度自分の言葉に直してから、この記事に書いた流れに乗せる、という順番になります。手間は増えますが、折り返しの条件だけは同じように使えます。

まとめ

台本が先にある動画なら、字幕の文字を書き起こしから取る必要がありません。文字は台本から取り、Whisperからは秒数だけを借りて、difflibで1文字ずつ対応づけます。やっているのはそれだけですが、誤変換が入ってくる経路そのものが無くなります。

折り返しは、1行24字・読点か句点の直後で切る・行頭の禁則・2行目5字以上の4つに書き換えて、書き出す前に判定させています。2026年8月に作った動画1本、2,631字の台本を通して114ブロック、違反0件、本文は台本と2,631字で一致しました。別の回は2,849字で118ブロックだったので、数字そのものは台本ごとに動きます。

字幕が画面で読めるかどうかは、SRTの外側にあるフォントや色で決まります。台本と1字も違わないSRTを持ったまま、映像では字幕が潰れていた回が実際にありました。中身が合っていることと、読めることは、別々に検査しています。

更新履歴

2026年9月:初版を公開しました。本文の数値は、2026年8月に仕上げた8分26秒の動画1本ぶんの実測です(台本2,631字・114ブロック・機械チェックの違反0件・SRT本文と台本が2,631字で一致)。118ブロック・2,849字は別の回の記録で、2本ぶんの観測にあたります。1行24字という上限は、私が使っている1920px幅・文字サイズでの実測値なので、条件が変われば変わります。誤変換の例は、同じ動画のナレーション音声を書き起こしたときに実際に出たものです。

Ryuichi
Writer / 運営者 Ryuichi

金沢を拠点に、AI活用とこれからの暮らし方を実際に試して記録しています。

関連する記事

More →
Membership

オープンな場では、
言えないことも。

AI活用と仕組み化、これからの働き方・暮らし方。無料の記事では結論を、購読者向けにはそこへ至るまでの実際を、月に1本お届けします。

月額 1,320円 / 年額 13,200円 / いつでも解約できます