細かいアプデですが、斬り麿 v0.3.0のリリースを行いましたので、紹介と今回技術的に面倒だった部分とかについてつらつらと。
1. 「斬り麿」ってなによ?
個人で製作している、格闘ゲーム特化の動画自動編集ツールです。
撮りっぱなしにした長い動画の中から完結した試合の動画の部分毎に動画を切り出します。
ランクマとかに潜りながらOBSで撮りっぱなしにしたときとかに、あとで試合を見返すときに探すのが面倒だったのでつくりまんた。
斬り麿を使うと、試合単位で区切られた動画が試合数分だけ生成されるので見るのも整理するのも楽になります。
大会の動画の分割とかにも便利かと思います。
2. v0.3.0 紹介!
v0.3.0で追加された機能について説明します。
2.1. サイバーボッツへの対応
人類の悲願。
Capcom Arcade Stadium版のサイバーボッツに対応しました。
Capcom Arcade Stadiumは設定でインターレース風にしたりできますが、そういう表示設定の変更には非対応です。
Steam版での確認を行っていますが、PC設定はデフォルトでDISPLAY設定はNormalでの動作を確認しています。
2.2. 無劣化切り出しへの対応
ffmpegの無劣化切り出し(copy)に対応しました(現バージョンのデフォルト設定)。
実現方法については実装の手間とバランスがとれる手段がなかったので
(1) ffprobe で事前にフレーム情報をすべて解析
(2) 無劣化での切り出しが可能なIフレームのフレーム番号リストを作成
(3) 画像認識で検出した切り出し開始フレームを(2)のリストを参照してその直前のIフレームにずらす
で実現しています。メンドクセー!
ちなみに処理時間は(1)の全フレームの情報確認時間があるので、無劣化切り出しの場合と再エンコードする場合であんま変わらないです。
あんま変わらないなら、きれいな方が良いかなということで。
あと、昔のゲームだと動かないフレームが続くことが結構あり、Iフレームの間隔が結構長くなっていることもあります。
なので、結構前から切り出されるなーと思うこともあると思います。
2.3. 解析間隔の間引き
画像解析の間隔をデフォルトで6フレームに1回に削減しました。
これにより演算量を削減し処理が高速になっています。
最悪で6Fずれますが、0.1秒ぐらい開始や終了がずれても実用上は問題ないと思うのでこういう対策を取っています。
ちなみに12Fで設定でも試しましたが0.2秒ぐらいずれても気にはならないので、少しでも早くしたいかたは
skip_analyzeのオプションで大きなフレームを設定してみてください。
余り大きくし過ぎるとすっぽ抜けて失敗する可能性もあるのでそこだけは注意です。
2.4. ffmpegをバックグラウンド実行
Pythonのprocessing.Popenを使って、解析後の切り出しを別プロセスで実行しその裏で次の試合を探しに行っています。
これでめちゃくちゃ速くなるという訳ではないですが、多少速くなっています。
3. 今後の予定
特に何かに追われているわけではないのでまったりやる予定ですが
- GGSTの観戦時の試合が切れない問題の対処
- 解析側アプリのRust版作成
- 対応タイトルの拡大
を実施する予定です。
動作報告(動いた! or 動かねーぞ!こら!とか。あ、動画もください…)とか、pull requestとかは歓迎です。
録画時に使っている動画エンコーダーの色空間の設定によっては失敗することもあるので…
まぁ使われない限りなかなか良くはならないということで。