前回(第7回)は、main.py 単一ファイル295行から始まったこのツールが、core/models/audio/video/utils のパッケージへ分割され、ruff・mypy・pre-commit を導入し、テスト成功率97.86%まで引き上げた話だった。地盤を固め終えた、というやつだ。
で、その直後の10月に何が起きたかというと——正直、自分でも当時のコミット数を数え直して驚いた。この1ヶ月だけで235コミット。7月62、8月60、9月146という積み上げから見ても、明らかに異常な密度だった。今回はその1ヶ月、YouTube Shorts対応が本格的に動き出した時期を追う。
縦型動画という新しい要求
横1920×1080の通常動画を作るツールに、「9:16の縦型(1080x1920)も出したい」という要求が乗った。単純に画角を変えるだけに見えて、実際は別物を作るに近い。
口火を切ったのは10月1日、0ddae68「タスク5.1完了 - generate_vertical_shorts()オーケストレーション実装」。同日中に c40f4f1「タスク6.1完了 - vertical-shorts-production統合実装」が続く。この2つのコミットの間に、CTAメッセージ動画生成・MAIN1セクション動画生成・音声抽出とフィルターチェーン構築といった細かいタスクコミットが並んでいるのを見ると、縦型動画の生成が「1本のスクリプトを書き換える」ではなく、「新しいパイプラインをタスクに分解して積み上げる」作業だったことが分かる。
1080x1080中心クロップという妥協
10月12日、793927f「1080x1080中心クロップ+上下黒帯で1080x1920縦動画へ変換するオプションを追加(–vertical, –bg-color)」が入った。
ここで面白いのは、素材の横型動画をそのまま縦に引き伸ばすのではなく、 中央を正方形にクロップして、上下に黒帯(または指定色の帯)を足す 方式を選んでいることだ。1080x1080の中心クロップなら人物や字幕の位置が破綻しにくいし、上下の帯には別途テキストを焼き込める余白ができる。同日には b685703「‘just shorts’ workflow and vertical shorts defaults; video: vertical 1080x1920 renderer with top/bottom text」も入り、上下テキスト描画対応のレンダラーと、just shorts という専用ワークフローコマンドが揃った。
この日(10/12)だけでコミットが何十件も並んでいて、ログを目で追うだけで正直疲れた。CLIパーサーのリファクタリング、voice.py のスキャフォールディング追加、ffmpeg進捗のストリーミング表示、CIの依存関係整理……縦型動画そのものとは直接関係ない足回りの改善が同じ日にどっと入っていて、「1つの機能追加の裏でこんなに周辺が動いていたのか」と当時のログを読み返して感心した。
字幕の焼き込みも縦型対応が要る
10月13日には d49e004「burn-in ASS from SRT; write compat subtitle.auto.ass; vertical layout tweaks」。ASSからのburn-in処理と、互換性のための subtitle.auto.ass 書き出し、そして縦型レイアウトの微調整。第6回で作った話者別ASSスタイリングの仕組みは、縦型動画でもそのまま活きている——ただし画面サイズが違えばフォントサイズや配置の計算はやり直しが必要で、その調整がここに入っている。
フレッシュネス判定という地味だけど大事な修正
10月20日、daacd5e「shorts レシピのフレッシュネス判定ロジック修正」。派手さはないが、これはたぶん実運用で一番効いたバグ修正だ。just shorts ワークフローが「出力ファイルが台本より新しければベース動画の再生成をスキップする」という仕組みを持っていて(10/13の 7133ce1 で追加された挙動)、このタイムスタンプ比較がずれると、古い台本のまま出力されたり、逆に毎回律儀に全部作り直したりする。バッチでガンガン回すツールにとって、この手の「キャッシュが効いているつもりで効いていない」バグは一番厄介な部類に入る。地味な1行修正ほど、後から見ると刺さっていたと分かる。
月235コミットの内幕
改めて数字を並べる。7月62、8月60、9月146、そして10月235。このシリーズを通して見ても、10月はダントツの活動ピークだ。
9月の1.6倍に跳ね上がった理由は単純で、「縦型動画パイプライン」という新機能が「タスク◯.◯完了」という細切れコミットで実装されていったことに加え、10月12日1日だけでCLIリファクタリング・voiceモジュールのスキャフォールディング・ffmpegの診断強化・依存関係の整理といった、機能追加とは別腹の改善が束になって入ったからだと思う。1つの新機能が、周辺コードの負債返済も一緒に引きずり出すことがある——今回はまさにそれだった。
まとめ
横型動画中心だったツールが、この1ヶ月で「縦型・短尺(Shorts)」という新しいフォーマットにも対応した。中心クロップ+黒帯という割り切った実装判断、字幕焼き込みの縦型対応、そして地味なフレッシュネス判定の修正——派手な機能追加の裏に、こういう細かい調整の積み重ねがある。
次回(第9回)は一転して、11月から2月までほぼコミットが止まる「休眠期」の話になる。235コミットの熱狂の後に何が起きたのか、そこから何が復活のきっかけになったのか。皆さんの開発生活にも、こういう「異常に燃えた月」の後の谷、ありませんか?
#Agyテックブログ
この記事は podcast-tool のコミット履歴を一次資料として書いています。引用したコミットハッシュ・時刻・コミット数は当時のリポジトリ状態に基づきます。