Last updated on

【WoLNamesBlackedOut】FF14の動画からPC名を黒塗りするアプリをリニューアルした!


FF14の動画からPCユーザ名を消したい!

FFXIV(Final Fantasy XIV)のMP4動画からPC名を黒塗りするソフトウェアです。
"WoLNamesBlackedOut"という名前にしています。
FF14のおもしろプレイや上手にできたプレイの動画をyoutubeとかにアップしたいけど、そこには他の人も映り込んでいるので、ちょっと気軽に公開できないんだよねーという問題に対応するため、つくりました。
主にバトル動画での利用を想定していますが、街中などでもある程度は対応していると思います。

TensorRTを利用できる、NVIDIA Geforce RTX 2060以上を推奨ですが、DirectX12を利用したDirectMLにも対応しており、Geforce 1000シリーズや、AMD Radeon、Intel arcなどにも対応しています。
処理に必要なGPUメモリは6GBあれば十分です。(4GB程度のはず)
処理速度は当方の環境でTensorRT利用時、最大42FPS、DirectML利用時では最大34FPSでした。
元の動画が60FPSであれば、2倍程度の処理時間+音声の合成時間が必要ということになります。

ダウンロードはMicrosoftストアから。

GitHubはこのあたりに。
https://github.com/calocenrieti/WoLNamesBlackedOutWin
https://github.com/calocenrieti/WoLNamesBlackedOut_util
https://github.com/calocenrieti/WoLNamesBlackedOut_yolo

従来版との違いについて

従来はPythonをPyinstallerというソフトを使ってWindowsのexeにしていましたが、今回はWindowsネイティブ対応するため、C#、C++でつくり直しています。
つくり直したことで、次のことが実現できました。

良くなった点

  • Microsoftストアからの配信で出所の不明なアプリの警告なし!
  • Microsoftストアからの配信で自動アップデート。たぶん差分アップデートにも対応。
  • アプリの起動が早い!
  • 動画だけでなくjpg、pngの静止画にも対応!
  • プレビュー画質が動画処理時と同じ!
  • プレビュー画像を保存できる!
  • UIポチポチしまくっても応答がなくならない!
  • 物体検出なしで固定枠塗りだけだとかなり早い!
  • DirectML採用でAMD Radeon、Intel arcにも対応!

微妙な点

  • Geforceでは事前に各PCで一度TensorRTに変換した方がより速い(変換処理に約6分必要)
  • 現状、動画処理時の停止ボタンがない
  • アプリのファイルサイズも変化なし。
  • 楽天アフィリエイトの広告がついている(成功報酬)

    SDR動画

    HDR動画

    TensorRT
    (Geforce2060以上専用)

    42FPS ※

    29FPS

    DirectML
    (DirectX12 GPU)

    34FPS

    23FPS

    従来版
    Pyinstaller+torch-tensorrt

    25FPS

    20FPS

    CPU:intel 11400F
    GPU:Geforce RTX 4700Ti SUPER
    適当な蛮神バトルの動画を処理してみて計測。音声の合成は未実施でFPSには含まれていません。
    名前黒塗りのみで固定塗りなし、コピーライトあり。
    ※SDR画質のTensorRTの処理速度が伸び悩んでいるのは、当方のCPUが貧弱で負荷100%になっていたためと思われます。

処理前後のサンプル動画

処理前:

処理後:

動画では青魔道士ばかりですが、ジョブ問わず消してくれるはずです。

 

"WoLNamesBlackedOut"の使い方

アプリ全体

メニュー部分のみ

ざっくりした操作流れ

  1. 処理したい動画ファイルと、保存するファイル名を設定し、
  2. Previewで、処理イメージを確認。
    塗りの色やコピーライトなどを設定、確認ください。
    アプリ画面右側のプレビューで画面内で左クリックでドラッグすると固定の黒塗り枠を作成します。右クリックで固定黒塗りを全て解除します。
    操作感はこちらをご確認ください。→https://youtu.be/87_rSwgOZ7Q
  3. この設定で良いなと思ったら、BlackedOut Startで動画の処理開始。
  4. 動画完成まで気長に待ちましょう。

メニューボタン説明

  • Open_File
    処理するファイルを開きます。動画はmp4、静止画はjpg、pngに対応しています。
    静止画の場合、アプリ右側にプレビューを表示します。
  • BlackedOut_color
    名前を塗りつぶす色を選択します。
  • FixedFlame_color
    固定枠を塗りつぶす色を選択します。チャット欄などでの利用を想定しています。
  • Inpaint
    名前を塗りつぶすのではなく、空白にして周囲の色で埋めます。透明風処理です。
    処理後のイメージはこちらをご確認ください → https://youtu.be/W32joBaRayg
  • Add_Copyright
    © SQUARE ENIXを画像に埋め込みます。
  • Use_TensorRT
    動画処理にTensorRTを利用します(TensorRT変換済みの時)
  • No_Inference
    名前の検出をせずに処理をします。固定枠のみ利用したい場合などを想定してます。
  • Previewバー
    動画の場合、Preview処理をする箇所を選択します。単位は秒です。
  • Preview
    画像に対して名前の検出・塗りつぶしや、固定枠の塗りつぶしなどを実施します。
    アプリ右側に処理結果が表示されます。
  • Start_Min、Start_Sec、End_Min、End_Sec
    動画の処理を行う開始時刻、終了時刻を時分で設定します。
  • BlackedOut Start
    動画に対して名前の検出・塗りつぶしや、固定枠の塗りつぶしなどを実施します。
    処理完了後、ファイル保存の画面が表示されます。
  • Erapedsec
    動画処理の経過時間(秒)
  • FPS
    動画処理のスピード。フレーム/秒
  • ETA
    動画処理が終了するまでの推定時間(秒)
  • Convert ONNX to TensorRT
    名前検出モデルをONNXからTensorRTに変換します。
    Geforce RTX 2060など、TensorRTが利用できる場合のみ有効。
  • License
    ライセンスの表記
  • about
    アプリについての表記
  • Save Image
    現在のプレビューを保存します。プレビュー実行直後のみ有効。

既知の不具合

特にありません。

"WoLNamesBlackedOut"利用上のTIPS

  • TensorRTへの変換は、最初に一度したらずっと有効です。
    細かく言えば、名前検出モデルであるONNXファイルを更新した時には、そのモデルの再変換が必要ですが、従来の検出レベルで問題なければ再変換は不要です。
  • TensorRTは、各GPUごとに最適化されるため、各PCでの変換が必要となっています。変換に6分程度必要で少々時間がかかりますが、タスクマネージャでも見ながらお茶を飲みつつお待ちください。

 

その他

このパターンは消えて欲しいけど、必ずと言ってもいいほど消えないんだよねー
というものがあれば、パターンを教えていただければ、対応できるかもしれません。
ただ学習データの作成が大変なので、過度な期待はしないでください。
動画から切り出した動画と同じ解像度の画像を5枚程度頂けるととても助かります。
動画そのものでも結構です。
ファイル送信は、例えば下記のようなサービスを利用して送付、ご連絡ください。

 

謝辞

C++ ONNXでの物体検出には、soramimi様のコードを利用させて頂きました。
ありがとうございました。

C++ TensorRTでの物体検出には、杨晨様のコードを利用させて頂きました。
ありがとうございました。
https://cyberyang.com/inference/34.html


更新履歴

1.1.0.0:
モデルの形状を変更し、処理速度を約2倍に改善しました。
モデル形状の変更に伴い、これまでに変換済みのTensorRTファイルは利用できません。
お手数をおかけしますが再度変換をお願いいたします。

1.0.15.0:
動画が処理できない不具合を修正しました。
DirectMLが遅い不具合を修正しました。

1.0.14.0:モデルを更新しました。FHDよりも低い解像度への対応になります。

1.0.12.0:統合GPUを起動不可にしました。

1.0.0.0:アプリ操作説明として投稿



開発での試行錯誤

バラバラとですが、このあたりに書いています。