Shotcutの字幕地獄から脱出!自作のAuto-Editor GUIをKdenliveに対応させた話

みなさん、こんにちは。

Linuxを使ってラジコン動画の編集を劇的にラクにするプロジェクトですが、前回までに、auto-editor をラップした自作のPySide6製GUIツール「Aerell Auto Editor GUI改造版」を使い、動きのない部分や無音部分を自動カットする粗編集ワークフローを構築しました。

カット編集の自動化によって動画の量産体制は整っていたのですが、仕上げの「字幕入れ」で新たな壁にぶち当たることになりました。


Shotcutの字幕入れがつらすぎる問題

これまで動画の最終仕上げには「Shotcut」を使っていました。

しかし、Shotcutで字幕を入れる作業がとにかく大変なのです。

クリップごとにテキストフィルタを手動で追加し、位置や表示タイミングを都度調整して……という不毛な作業が、字幕の数だけ延々と発生します。正直言って、かなり精神を削られる作業でした。

「他の動画編集ソフトならもっとラクにできるのでは?」と調査したところ、「Kdenlive」なら標準機能として専用の「字幕トラック」が存在することを知りました。SRTファイルのインポートはもちろん、タイムライン上でサクサク字幕クリップを追加・編集できます。

「これは移行するしかない!」

そう決意したものの、ひとつ大きな問題がありました。

我が相棒である「Aerell Auto Editor GUI改造版」は、ShotcutやPremiere等への書き出しには対応しているものの、Kdenlive向けのプロジェクトファイル(MLT/XML)を出力する機能がなかったのです。

それなら話は簡単です。Kdenliveに対応するよう、ツール側を改造してしまいましょう!


簡単に終わるはずが……立ちはだかる「6つの壁」

自作ツールは auto-editor CLIを裏で呼び出す薄いGUIラッパーです。

調べてみると、なんと auto-editor 本体のCLI機能(--export)には既にKdenlive出力が存在していました。GUIのドロップダウンに選択肢がないだけだったので、「選択肢を追加するだけで完了だな!」と高を括っていたのですが……ここから本当の「茨の道」が始まりました。

kdenlive対応
選択肢を追加すればよいだけだと思っていたが…

相棒のClaudeとともに挑んだ、6つのエラーとの闘いの記録がこちらです。

1. 複数ファイル読み込みで KeyError 爆死

Kdenlive書き出しを選んで実行した瞬間、KeyError で処理が落ちました。

auto-editor 本体のソース(kdenlive.nim)を解読したところ、Kdenlive出力機能は「1つのトラックには1本の動画ファイルしか入らない」前提で書かれていたことが判明。我がツールの目玉である「複数動画をまとめて1本に繋ぐ」操作をした瞬間に辞書参照エラーを起こす仕様でした。

そこで、以前Beutl向けに試作していた「中間表現のタイムラインJSONから自前でプロジェクトファイルを再構築する」独自のKdenliveライターを実装して回避しました。

kdenliveプロジェクトをエクスポートに対応
Kdenlive用プロジェクトのエクスポートは完走した

Beutl、興味はあるのですが、Linux版は未だ不安定なので常用はできていません。着実に進歩は続けているようです。

2. 「プロジェクトのバージョンを読めません」

エラーなく書き出せたファイルをいざKdenlive(21.12.3)で開くと、今度はバージョンエラーが表示されます。

ソースコード(documentvalidator.cpp)を追いかけた結果、最新の auto-editor が出力する「UUID付きtractorによるシーケンス構造」は、私がaptでインストールした2022年時点のKdenliveには存在しない新形式であることが判明。古い旧形式ライターを自作するより環境を最新化する方が筋が良いと判断し、AppImage版の Kdenlive 26.04.3 へアップグレードしました。

Kdenliveの最新版のダウンロードはこちらから。

3. 非標準フレームレートでアプリが強制終了

最新Kdenliveで開いたところ、「非標準のフレームレート(29.63)を使用しています」という警告の直後に落ちる現象が発生。

複数動画を結合した際、auto-editor が算出するタイムベースが 2963/100 のような中途半端な分数になるのが原因でした。Kdenliveの妥当性チェックは標準的なNTSC分数か整数しか受け付けないため、<profile> 要素に書き出すフレームレートだけを整数または標準NTSC分数へ丸める(スナップする)処理を追加して解決しました。

4. 謎の wrong number of subtracks とセグフォルト

警告は消えたものの、今度は読み込み直後にセグフォ(セグメンテーション違反)でクラッシュ。

デバッグログの wrong number of subtracks という一行から判明したのは、Kdenliveの内部規約として 「1トラックにつき必ず2つのサブトラック(playlist)を持たせる必要がある」 という暗黙のルールでした。1トラック1playlistで作っていたため「壊れたトラック」と見なされていたのです。空のplaylistを追加して無事に突破しました。

5. 読み込めたのにプレビュー表示でフリーズ

画面は開くようになったものの、プレビューモニターを触った瞬間に応答不能に。

原因は、プロジェクトの素材一覧(bin)に最初の1ファイルしか登録していなかったことでした。Kdenliveはbinモデルを通してサムネイルやメタデータを管理するため、未登録のクリップを参照するとフリーズします。ソースファイル単位で1つのbinクリップを登録し、同一ファイルはchainを使い回す構造に改修しました。

6. 最後の罠!MLTフレームワークの「前方参照禁止」

ここまで対応しても、まだプレビューで固まります。ログには Property without a parent 'property'?? という不穏な警告が……。

腹を括ってレンダリングエンジンである MLTフレームワーク のソース(producer_xml.c)を読みに行ったところ、衝撃の事実が発覚します。

MLTのXMLパーサーは1パス走査のため、「参照先のID(producer等)は、参照元(entry等)よりも『前』に記述されていなければならない」 という強烈な制約が存在していたのです。

  1. バージョン検知回避のために先頭へ移動させていた main_bin が、後ろの要素を参照していた。
  2. トラック生成時に <playlist> タグを先に書いてから、内部のクリップ(producer)を生成していた。

この2点が完全な前方参照になっていました。XML全体の依存関係を走査し、「全ての参照元が参照先より後ろに来る」よう順序を徹底的に厳格化するスクリプトを書いて検証・修正を行いました。


修正結果とまとめ

怒涛のデバッグを経て修正したプロジェクトファイルをKdenlive 26.04.3で開いたところ……

エラーもフリーズも一切なく、完璧に読み込み&プレビュー再生ができるようになりました!

課題原因対策
複数ファイルでKeyErrorauto-editor 本体のKdenlive書き出しの仕様制限タイムラインJSONから自前でMLT/XMLを組み立てる独自ライターを実装
バージョンエラーKdenlive 21.12.3が新シーケンス構造に未対応AppImage版で最新のKdenlive 26.04.3へ移行
非標準fpsで落ちる結合時のfps計算値(29.63等)をKdenliveが拒絶プロファイルのfps表記を標準NTSC分数/整数へ丸め処理
セグフォルトKdenlive内部の「1トラック2サブトラック」規約違反各トラックに空のplaylistを補完して構造を正常化
プレビューフリーズ (1)bin(素材一覧)への未登録による参照エラーファイル単位でbin登録を行い、chainを適切に再利用
プレビューフリーズ (2)MLTパーサーの仕様(前方参照の禁止)XML記述順を厳密に「参照先 ➔ 参照元」の順に並び替え

念願の「字幕トラック」も試してみましたが、タイムライン上の任意の場所をダブルクリックするだけでサクサク字幕が追加でき、今までの苦労が嘘のように快適です。

字幕挿入もらくらく
字幕挿入もらくらく

振り返ってみると、「構文としては正しいXMLなのに、KdenliveやMLTが暗黙に求めている内部規約を満たしていない」という難敵ばかりでした。最終的にKdenliveやMLTの C/C++ ソースコードをClaudeと一緒に直接読みに行ったのが、一番の近道でしたね。

これで「自作ツールでサクッとカット編集 ⇒ Kdenliveで快適に字幕入れ」という最高の動画編集環境が完成しました。Shotcutでの字幕地獄から解放され、QOLが爆上がりです。

改修したコードはGitHubに反映していますので、同じようにLinuxでの動画編集効率化を目指している方はぜひ試してみてください。

リポジトリはこちら:taoman26/Aerell-Auto-Editor-GUI


「自分も何か作ってみたい」と思われた方、そのアイデア、頭の中で寝かせておくのはもったいないかもしれません。

ビューローみかみでは、構想段階の壁打ちからPoC・実装・現場導入まで、現場で「使い続けられる」ものづくりを支援しています。

アイデアを短期間で「動くもの」にし、PoCで終わらせず、実運用まで伴走します。まずは「これ、作る価値ありますか?」という壁打ちからでも大歓迎です。

▶ PoC・MVP開発サービスの詳細はこちら

気になることがあればお気軽にご相談ください。

本日も最後までお読みいただきありがとうございました。

それでは、よい動画編集ライフを!

カテゴリ: その他

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール