メインコンテンツへスキップ
見出し画像

【開発日誌・序】フルテロップ地獄から始まった


    こんちわ。
    東京で映像編集をしている
    フリーランスのKENと申します。

    Premiere用の編集支援ツール「SnipScript2」を作っています。
    このマガジンはその開発日誌です。だいたい失敗の記録です。

    ※この連載に出てくる案件名・専門用語・誤変換の例は、実際の案件が特定されないよう別の語に置き換えています。ただし話の骨格になっている関係(読みが同じか、漢字を共有しているか、どちらが長いか)は実際のまま残しています。


    ■ 地獄の入口

    突然ですが、対談の動画を2時間半ぶん、全部テロップにしたことはあるでしょうか。

    僕はあります。何本もあります。やりたくてやったわけではありません。

    あるときYouTubeの案件を受けました。それまであまり受けたことのないジャンルです。しかもフルテロップ。喋っている内容を、ほぼ全部、字幕として載せるやつ。

    素材は2時間半、1カメ(カメラ1台の固定)の対談。中身は面白い。問題はそこではない。

    これ、全部に字幕を付けるのか。

    対談ものの編集は、地味に重労働である。まず全部の発言を把握して、無音や「えー」「あのー」を削って、言い直したところをカットして、脱線を整理して、そこにようやく字幕を乗せていく。

    「入れれば終わり」ではない。そこから聞きやすいリズムに整える手作業が、延々と続く。

    しかも単価の関係で速さが要る。

    そして似たような案件が、そのあと続けて何本か来ました。どれもフルテロップ。

    ……フルテロップって、大変ですね。

    ■ 楽をしようとした

    もちろん最初は楽をしようとしました。

    Premiere純正の文字起こし。Vrew。ひととおり試した。

    結論から言うと、どちらも「そのまま使う」には精度が足りない。固有名詞は崩れる。話し言葉の細かいところは拾えない。対談なのに話者が分かれない。

    そして地味に効いてくるのが、アプリをまたぐ手間である。書き出して、別アプリに読み込ませて、XMLを経由してまた戻して……この往復だけで集中が切れる。

    結局、AIが出した下書きを人間が全部手直しする。

    だったら最初から手でやったほうが早いのでは?

    ……という気持ちにすらなった。本末転倒である。

    ■ 別の文法

    やっているうちに、だんだん分かってきたことがある。

    YouTubeにはYouTubeの文法がある、ということだ。

    僕がそれまでやってきた映像では、間の取り方に意味を持たせる。溜めて、落とす。息継ぎも演出のうちだ。

    ところがYouTubeは、要素を速いテンポで詰め込んでいく。間は削る。削って詰めて、見ている人が離れる隙を作らない。

    これはこれで、ちゃんと理屈の通った作法である。最初は戸惑ったけれど、慣れると納得がいく。

    ただ、作り手の手間は確実に増える。「無音を削って詰める」が前提になっているぶん、そこが編集の入口になるからだ。

    そしてもう1つ、文字校正に時間がかかる。

    普通、映像の最終チェックはエディターではなくディレクターがやる。ところがこの手の案件では、エディターの段階でより厳密な正確さを求められた。字幕は画面に出っぱなしなので、間違っていれば全部見えてしまう。誤字ひとつが視聴者に届く。


    ■ しんどいところを並べてみる

    一度、何がしんどいのかを整理してみました。少し長くなりますが、ここがこの連載の大前提になります。

    • 文字起こしが、そのままでは使えない。固有名詞は崩れる。対談なのに話者が分かれない。結局ぜんぶ読み直して直すことになる

    • 要らないところを消す作業が、終わらない。無音、「えー」「あのー」、言い直し、脱線。どれも1つずつ聞いて、判断して、消す

    • 誤字がひとつも許されない。字幕は画面に出っぱなしなので、間違えれば全部見えてしまう

    • どこで区切るかで、読みやすさが変わる。文字数で機械的に切ると、変なところで改行されて頭に入ってこない

    • そのうえ、速くやらないといけない。単価の関係で、時間をかけて丁寧に、が通らない

    この5つが、同時に来る。

    手でやる前提の作業量ではなかった。

    どうでしょう。フルテロップをやったことのある方なら、たぶん全部に心当たりがあるんじゃないでしょうか。

    そして先に言ってしまうと、この5つが、そのままSS2の開発目標になりました。無音カットも、話者の振り分けも、文字校正も、字幕の区切りも、全部この並びに向かって作っています。

    この連載で出てくる話は、どれもこの5つのどれかに紐づいています。


    ■ 面倒の正体

    手を動かしながら気づいたことがある。

    この作業の面倒くささの正体は「単純作業」ではなく「判断」だ、ということだ。

    どこを残し、どこを削り、どのリズムで字幕を切るか。そこには話の文脈と、喋りのリズムの理解が要る。単なる文字数カットでは、絶対にいい字幕にならない。

    そこで思った。

    「編集者の頭の中の理想の編集」を、90点まで再現できるツールがあったらいいのに。

    100点は人間が仕上げればいい。でも90点までを自動で持っていければ、この作業は激変する。

    それが、すべての出発点だった。

    (と、考えていた時期が僕にもありました)

    ■ 一作目

    最初のバージョン(この連載ではSS1と呼ぶ)は、手探りで始めた。

    先に書いておくと、僕はコードを書きません。 というか書けません。
    作りたいものと直したいところを言葉で伝えて、Claude(開発を手伝ってもらっているAI)に書いてもらう。動かして、確かめて、また直させる。その繰り返しでできている。

    手探りの中身はこんな感じだった。

    • はじめは当時よく使われていた文字起こしのAIで組んだ

    • 速度を出そうとMac向けの実行環境に載せ替えたら、今度は精度が出ない

    • ならばと、Windows機のGPUを遠隔で使う構成まで試した

    • ある程度は動いた。だが肝心の精度が追いつかず、結局は手作業で仕上げる羽目になった

    • 文章を整えるAIを足してみても、遅い割に精度が微妙

    書き出してみると、なかなかの戦績である。一勝もしていないけど。

    作りとしては、Premiereの中にパネルを出して、裏側で処理を動かす形だ。音声を書き出して、静かな区間を探して、削除の候補をリストで返す。それをチェックボックス付きのリストで見ながら、要らないものだけ外して実行する。

    この「リストで見せる」という形は、最初から決めていた。

    なぜか?

    全部お任せで消されると、何が消えたか分からなくなるからだ。編集者は最終的に自分で責任を取る。だから機械には候補を出させて、判断は手元に残す。

    使いながら1つずつ機能を足していった。文字起こしのやり方を選べるようにした。音声の状態を測って設定を自動で決めるようにした。固有名詞の辞書を登録できるようにした。前に使ったパラメータを見返せるようにした。
    設定を保存できるようにした。

    だんだん良くなってきた。

    そして、消えた。

    ■ 「更新はちょっと待ってください!」

    その日も、いつもどおり Claude に作業をさせていた。「インストール先にソースを反映して」という類の指示である。

    古い側で、新しい側を潰した。

    Premiereに入れて実際に使っていたパネルは、手を入れ続けた結果、保管してあるソースよりずっと先に進んでいた。その使っていたほうの上に、古い簡易版を上書きしたわけである。

    Claude は実行した直後に、自分のミスに気づいていた。

    「更新はちょっと待ってください!」

    画面にそう出た。

    遅い。

    こちらはもう、確認しようとしてパネルを読み込み直した後だった。開いた画面が、見覚えのない簡素なものになっていた。ボタンが足りない。リストが無い。

    あばばばば。

    あとで確かめたら、パネルの中身は8分の1に減っていた。

    裏側のファイルは残っていたが、そちらも別の機械と別のフォルダに依存する作りで、単体では動かない状態だった。

    スクリーンショットと記憶を手がかりに、作り直そうとした。画面を見ながら、どこに何のボタンがあったか、どういう挙動だったかを思い出しながら。

    駄目でした。

    見た目は真似できても、中の細かい積み重ねが再現できない。「この場合はこう処理する」という、使いながら1つずつ足していった判断は、スクリーンショットには写っていないのである。

    しばらく粘って、諦めた。

    そして、これは Claude のミスであると同時に、僕のミスでもある。サイズの差という警告は出ていた。実行する前に「なんでこんなにサイズが違うんだろう」と思っていた。

    思っただけで、止めなかった。

    AIに任せるというのは、判断を渡すことではない。判断を渡した気になったところで事故が起きる。それがこのときの教訓だ。

    ただ、皮肉なことに、この消失が転機になった。

    直す対象が無くなったので、設計から根本的にやり直そうと腹をくくれたからである。

    (ヤケクソとも言う)

    ■ 作り直す

    作り直すにあたって、まず土台から選び直した。

    • パネルを最新の方式で組み直そうとしたが、対応できない操作が多すぎて断念。実務で必要な動きが、まだ足りなかった

    • そこで従来の方式で再出発した。枯れている(実績がある)ぶん、やりたい操作が確実に通る

    • 文字起こしのAI選びは紆余曲折の連続だった。何を選んで、なぜ選んだかは、それ自体が長い話になるので回を分けて書く

    • 大まかな仕組みは、「文字起こし → 消す候補の検出 → 字幕づくり」を、Premiereのパネルの中だけで完結させる、というもの

    そして、作り方についても決めごとを作った。

    先に書いておくと、僕はプログラムの良し悪しが分かりません。分からないなりに、同じ事故を二度起こさないための決めごとです。

    1つめ、調整用の数値は全部1箇所に集める。あちこちに直接書かない。あとから外側から変えられるようにする。

    2つめ、同じ処理を2箇所に書かない。フレームの丸め方ひとつ取っても、切り上げるか切り捨てるかが場所によって違えばズレが出る。共通の場所に置いて、全員がそこを見る。

    3つめ、テストを用意する。検出のしくみと時刻の計算には必ず自動チェックを付ける。これは保険というより、あとで「前のほうが良かった」と思ったときに調べられる状態を作っておくためだ。

    (この3つめが後々どれだけ効いたかは、連載の中で嫌というほど書くことになります)

    4つめ、危ない操作をするときは、何をどう変えるのかを先に言葉にしてから実行する。

    あのとき、止めなかったからだ。


    ■ 2種類のAIの話

    ややこしいので先に分けておきます。

    1つめは、開発を手伝うAI。さっきから出ている Claude です。作りたいものを伝えて、コードを書いてもらって、検証を回してもらう相手。この連載では「Claude」と書きます。

    2つめは、製品の中で動くAI。文字起こしをするもの、文章を校正するもの、声を聞き分けるもの。これらは使う人のパソコンの中で動きます。どれを選んだか、なぜ選んだかは、それ自体が長い話になるので回を分けて書きます。

    この2つは無関係です。開発をAIに手伝ってもらっていることと、製品が何で動いているかは、別の話。


    ■ そして今

    そうして生まれたのが SnipScript 2(SS2)——Premiereの中だけで、無音カット・話者分離・字幕づくり・AI校正までを行うツールである。

    というわけで、方針は決まった。あとは作るだけだ。今度こそちゃんとしたやつを作るぞ。

    ……と意気込んだところで、手が止まった。

    待てよ。何を作り直すんだっけ。

    前作のコードは残っている。でも、どの機能を、どういう理由で足したのかが、もう頭から抜けている。使いながら継ぎ足してきたので、記録らしい記録も無い。

    つまり最初の仕事は、残っている前作を頭から全部洗い直して、記憶を掘り起こすことだった。

    ぐえーーー。

    新しく作るほうが、よっぽど楽しい。過去の残骸を発掘する作業は、楽しくない作業の上位に入ります(笑)

    でも、やるしかなかった。


    こうして始まったのが、SS2の開発です。

    文字起こし。要らない部分のカット。テロップの文字校正。自然な区切り。さっき並べた困りごとを、一つずつ潰していくことになります。

    そして、そのたびに壁にぶち当たります。

    この連載では、その壁をどう乗り越えたのか——あるいは、これからどう乗り越えるのか——を書いていきます。困りごとがあって、必要な機能があって、作ってみると壁がある。その繰り返しです。

    音声認識やLLM(文章を扱うAI)まわりの工夫——検証に検証を重ねて、ようやくたどり着いたしくみの中身も、出し惜しみせずに書くつもりです。何回やり直したかは思い出したくありません(笑)

    同じように自分でツールを作っているエンジニアの方にも、読んでもらえたら嬉しいです。


    で、その最初の一歩が、さっきの発掘作業でした。

    前作には、あの困りごとへの対処が、すでにいくつも埋まっているはずである。何を掘り出せて、何を捨てることになるのか。

    どうせ「うわ、なんだこれ」の連続だろうな。そう思いながら開きました。

    ——違いました。

    いや、正確に言うと、違ったのはそこだけでした。順調だったのも、そこまででした。

    このあと僕は、新しい仕組みで作ろうとしては元に戻り、文字起こしのAIを変えても直らない誤字とにらみ合い、AIに判断させようとして完全に失敗し、「よし良くなった」と喜んだ数字が実はまったく別のものを測っていたと気づいて、そっとMacを閉じることになります。

    全部あとで書きます。

    次回、「前作を掘り起こして仕分けた話」。

    昔の僕ら、意外とちゃんとやってました。


    連載はこちらにまとめています。

    ▼ テロップ地獄から抜け出したくて、動画編集ツールを自作する話
    https://note.com/medel_ken/m/m8b7673bd1156

     
     
    こんちわ。東京で映像編集をしているKENです。 フルテロップの案件で心が折れて、Premiere用の編集ツールを自作中。 だいたい失敗の記録です。 Ae用「字面ヨシ!」→ medel-craft.booth.pm

    あなたへのおすすめ