動画編集を続けていると、映像そのものよりも、素材を並べる、音声を合わせる、字幕を表示する、少しだけ位置を直す、といった反復作業に時間を取られます。しかも、同じ形式の動画を何本も作る場合、手作業では微妙なズレや設定漏れが積み重なります。
そこで、動画編集ソフトを人間が毎回操作するのではなく、編集内容をデータとして組み立て、ソフトに適用する方法を試しました。本稿では、その実験で得られたOpenShot自動化の考え方と構成を、特定の個人・企業・業務に依存しない形で整理します。
まず、なぜ自動化したかったのか
動画制作で本当に難しいのは、1本を完成させることだけではありません。同じルールで何度も作り直せること、途中で失敗しても安全に復旧できること、別の素材に置き換えても同じ手順を使えることが重要です。
手作業中心の編集には、次のような問題があります。
- 音声と字幕の開始位置を毎回合わせる必要がある
- 字幕が長いと、画面端からはみ出す
- クリップを途中で分割すると、後続の字幕や効果の位置調整が必要になる
- 大量の素材を一度に操作すると、見落としやクリックミスが起きる
- 失敗したとき、どの操作まで完了したか分かりにくい
この問題を「編集者の熟練度」で解決するのではなく、「編集計画を生成し、適用し、検証する仕組み」に置き換えるのが狙いでした。
ベースソフトにOpenShotを選んだ理由
自動化の土台にはOpenShotを使いました。理由は、一般的な動画編集ソフトとしての使いやすさと、プロジェクトをタイムラインとして扱えることのバランスがよかったからです。
完全なノンリニア編集を自動生成する専用レンダラーを最初から作ると、映像・音声・字幕・エフェクト・プレビュー・保存など、非常に多くの機能を自前で持つ必要があります。一方、OpenShotを実行エンジンとして使えば、人間が必要に応じて微調整できる編集画面を残しながら、反復作業だけを機械に任せられます。
ここでのポイントは、OpenShotを単なるGUIとしてではなく、最終編集状態を保持するタイムラインの実行先として捉えたことです。自動化側は「何を、いつ、どのレイヤーに置くか」を計算し、OpenShot側はそれを再生・表示・保存・書き出しにつなげます。
全体構成:素材ではなく編集計画を受け渡す
構成は、次のように分けました。
- 入力素材を準備する
- 音声や字幕に時間情報を付ける
- 編集計画を中間データとして生成する
- OpenShotへ計画を適用する
- タイムラインを検証する
- プレビューや保存状態を確認する
重要なのは、各段階を直接つなげず、中間データを残すことです。たとえば、音声セグメントの一覧をマニフェストとして保持し、その各項目に開始時刻、終了時刻、テキスト、ファイル名などを持たせます。
この形式にすると、次の処理は「マニフェストを読み、必要なクリップと字幕を生成する」だけになります。LLMや別の自動化プログラムが途中から参加しても、自然言語の会話履歴ではなく、構造化されたデータを入力にできます。
音声と字幕を同じ時間モデルで扱う
音声と字幕のズレを防ぐため、両者を同じ開始時刻・終了時刻から生成します。
概念的には、次のようなデータです。
{
"index": 1,
"start": "00:00:00.000",
"end": "00:00:02.000",
"text": "ここに字幕の文章が入ります。",
"audio": "segment-001.wav"
}
この項目から、音声クリップは音声レイヤーへ、字幕クリップは字幕レイヤーへ、同じ start を基準に配置します。字幕の表示時間も end - start から求めるため、音声だけ、字幕だけを個別に手修正する必要が減ります。
また、動画本体、効果音、合成音声、字幕をレイヤーとして分けました。レイヤーの役割を固定すると、後から「音声だけを差し替える」「字幕だけを再生成する」といった部分更新がしやすくなります。
JSON編集計画で操作を小さく分ける
自動化の操作は、巨大な一括処理にせず、小さな命令の集合として表現します。たとえば、次のような操作です。
{
"operation": "apply_edit_plan",
"edits": [
{"operation": "add_clip", "path": "video.mp4", "position": 0, "layer": 0},
{"operation": "add_clip", "path": "narration.wav", "position": 2.0, "layer": 2},
{"operation": "add_clip", "path": "caption.svg", "position": 2.0, "duration": 2.5, "layer": 3}
]
}
実際のファイル名やパスは環境ごとに異なるため、記事では一般化しています。大切なのは、命令を「素材の追加」「位置の指定」「レイヤーの指定」「表示時間の指定」のように分解することです。
処理が大きい場合は、編集計画を複数のチャンクに分けます。少数のクリップを適用して状態を保存し、次のチャンクを適用する方式です。これにより、1回の失敗で全体を失うリスクを下げ、どの範囲まで反映されたかを確認できます。
字幕は文字数ではなく画面上の幅で分割する
字幕では、単純に「何文字で改行する」というルールだけでは不十分です。日本語、英数字、記号では文字幅が異なり、縁取りを付けるとさらに表示領域を消費します。
そこで、字幕生成では次の条件を使いました。
- 動画フレームの左右に安全領域を設ける
- 使用フォントとフォントサイズを固定する
- 縁取りの幅を含めて文字列の実測幅を求める
- 文節や句読点など、意味のまとまりを壊さずに改行する
- 2行で収まらない場合だけ3行を検討する
候補となる改行を複数生成し、実測幅、安全領域への収まり、行の長さのバランス、意味の区切りを評価して選びます。この方法では、「文字数は少ないのに画面からはみ出す」「単語の途中で不自然に切れる」といった問題を減らせます。
字幕を画像やSVGなどの独立した素材として作る方式と、OpenShotの字幕エフェクトを使う方式も検討しました。前者は見た目を厳密に管理しやすく、後者は編集画面での再利用性が高いという違いがあります。どちらを選ぶ場合も、字幕の内容・時刻・表示領域を別データとして管理しておくと、再生成が容易です。
失敗しやすい操作には状態と検証を持たせる
タイムライン編集では、見た目には正しくても内部状態が期待と違うことがあります。たとえば、クリップの分割後に後続要素の時刻がずれている、音声が別レイヤーに入っている、字幕が意図しない長さで表示されている、といった問題です。
そのため、操作ごとに次の情報を扱います。
- 適用前のリビジョンや状態
- 実行した操作の種類
- 適用後の状態
- 期待するクリップ数、レイヤー、時刻範囲
- 保存済みかどうか
- プレビューで確認した結果
特に重要なのは、編集後に「成功したように見える」だけで終わらせないことです。タイムライン検証、特定時刻へのシーク、プレビュー画像の確認、保存後の再オープンなどを組み合わせます。
クロスフェードや分割のように、周辺クリップへ影響する操作は、単独のテスト用タイムラインで先に確認します。実際のプロジェクトへ適用する前に、境界位置、連続性、音声の有無、字幕の追従を検証しておくと安全です。
LLMにとって扱いやすい自動化にする設計原則
LLMを自動化の中心に置く場合、自然言語だけで状態を管理しないことが重要です。LLMは計画の生成や例外への対応が得意ですが、長いタイムラインの全要素を会話だけで正確に記憶する用途には向きません。
そこで、次のような契約を設けます。
- 入力:素材一覧、時間情報、字幕テキスト、プロジェクト設定
- 計画:追加・分割・移動・削除などの編集命令
- 期待結果:時刻範囲、レイヤー、字幕数、保存状態
- 検証結果:成功・失敗、差分、プレビュー確認結果
- 再実行条件:同じ計画を再適用してよいか、リビジョンが一致するか
この構造なら、LLMは「次に何をすべきか」を判断し、プログラムは「正確な数値とファイルを扱う」役割を担えます。人間は、最終的な見た目や内容の妥当性を確認できます。
得られたメリット
この方式のメリットは、単なる作業時間の短縮だけではありません。
再現性が上がる
編集計画と入力データが残るため、同じ条件なら同じタイムラインを再構築できます。担当者の操作順や記憶に依存しにくくなります。
部分修正がしやすい
字幕だけ、音声だけ、特定区間だけを再生成できます。最初から全編集をやり直す必要がありません。
品質基準をコード化できる
字幕の安全領域、行数、音声と字幕の同期、レイヤー構成などを検査条件として明文化できます。
失敗から復旧しやすい
小さなチャンク、状態保存、リビジョン確認、再オープン確認を組み合わせることで、途中状態から安全に続行できます。
人間とLLMの役割分担が明確になる
LLMは素材の意味理解、編集計画、例外の説明を担当し、決められた数値操作と検証は機械的に実行できます。
注意点と限界
自動化しても、すべての判断が不要になるわけではありません。字幕の自然さ、音声の聞きやすさ、映像との意味的な一致、演出としてのテンポは、最終的に人間が確認した方がよい領域です。
また、OpenShotのバージョン、字幕エフェクトの仕様、利用するフォントやレンダリング環境によって表示結果が変わる場合があります。自動化の命令を固定的な魔法として扱わず、対象バージョンと検証結果を記録することが大切です。
まとめ
OpenShotの自動化で重要だったのは、GUI操作を無理に再現することではありません。音声・字幕・タイムラインを構造化し、編集計画として受け渡し、段階的に適用し、検証可能な状態として保存することです。
この考え方を採用すると、動画編集は「人が毎回クリックする作業」から、「入力データに対して再現可能な編集パイプラインを実行する作業」へ変わります。OpenShotはその実行先として、人間による最終確認と自動生成の間をつなぐ、扱いやすいベースソフトになります。