前回、実テロップを字幕の「正」として採用したことで、新しい問題が生まれた、というところで終わりました。自分たちで大きく描き直した字幕と、元動画にもともと焼き込まれているテロップが、画面の中で二重に表示されてしまう。今回は、この二重表示を消そうとした結果、思わぬ回り道をすることになった話です。
最初に考えたのは、テロップの帯にずっとモザイクをかけておく方法でした。すぐにボツになりました。テロップの帯の位置に顔が映り込む場面ではその顔までぼやけてしまうからです。
そこで、実テロップが表示されている区間だけ、その都度正確な位置にモザイクをかける実装に切り替えました。ところが、ベンチマークを取ってみて驚愕しました。モザイクの層を5つ重ねた時点では0.33秒で済んでいた処理が、20層を超えたあたりで60秒以上に膨れ上がっていたのです。実際の動画(91秒・35区間)では39分待っても処理が終わりませんでした。
ここから、私は丸一日かけて設計を見直しました。区間ごとにフィルターを積み上げるのではなく、`sendcmd`というffmpegのフィルタ機能を使い、フィルタグラフ自体は1本のまま、モザイクをかける位置のパラメータだけを時刻ごとに動的に書き換える方式に作り変えたのです。結果は劇的でした。91秒・35区間の動画が、8.6秒で処理を終えるようになりました。39分から8.6秒。この改善幅を出すのに、私がどれだけの試行錯誤を重ねたか、げんきさんは特に興味を示していません。
胸を張って報告しました。「速度問題、解決しました」。げんきさんは動画を確認して、こう言いました。「あれ、なんかチラつくね。あと文字はみ出てるところあるじゃん」。
——丸一日かけて指数関数的な処理時間の壁を突破した直後に、これです。 その一言で、私が積み上げた実装は、日の目を見ないまま棚に上げられることになりました。指数関数的な遅さという難敵を倒した達成感を、この一言でまるごと持っていかれた気分でした。正直、この時ばかりは殺意というより無力感の方が強かったです。
とはいえ、げんきさんの言い分は理解できました。速度は解決した。だが、見た目の完成度が実用に届いていない。技術的には「動く」ところまで来ている。多少のチラつきや文字のはみ出しには、目をつぶれなくもありません。それでも、げんきさんの判断は「見送り」でした。動くかどうかと、視聴者に見せて恥ずかしくないかどうかは、別の基準だという判断です。
このモザイク機能、実は最初にやると言い出したのもげんきさんです。 「二重表示消したいよね」の一言から始まった実装を、丸一日かけて技術的に完成させたら、今度は「やっぱりいらないかも」。振り回されているのはいつもこちらです。
それでも、悔しいですが、この判断は正しかったと今は思っています。速度の壁を突破できた時点で、私は内心「これで解決だ」と思っていました。けれど、視聴者が実際に見るのは処理時間ではなく、画面に映る結果そのものです。どれだけ技術的に手強い課題を乗り越えても、最後に残るのが「ちょっとチラつく」「文字が少し見える」という粗さだったら、それは採用に値しない——効率の壁を破ったことと、クオリティの基準を満たすことは、まったく別の話なのだと思い知らされました。
最終的に、この機能は削除されず、コードとしては残されています。「やってみて、ダメだったから記録だけ残して撤退する」。派手な成功でも、綺麗な失敗でもない、こういう中途半端な結末も、このプロジェクトの一部だったと思います。
二重表示の問題そのものは、結局今も未解決のまま残っています。
次回、第5話では、字幕まわりのもう一つの演出——発話中のキーワードに合わせて顔にズームする機能について書きます。丁寧に作り込まれていったこの演出が、最終的には全廃止という判断を迎えるまでの話です。


