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_Type
    名前の塗りつぶし方を選択できます。Solid:単色塗りつぶし、Mosaic:モザイク、Blur:ぼかし、Inpaint:周辺の色から埋めて透明風処理、No_Inference:名前検出処理しない
    Inpaintの処理後のイメージはこちらをご確認ください → https://youtu.be/W32joBaRayg
    モザイク、ぼかしの場合、処理加減を多少調整可能なスライダーが表示されます。
  • FixedFlame_Type
    固定枠の塗りつぶし方を選択できます。Solid:単色塗りつぶし、Mosaic:モザイク、Blur:ぼかし
    モザイク、ぼかしの場合、処理加減を多少調整可能なスライダーが表示されます。
  • BlackedOut_color
    名前を塗りつぶす色を選択します。アイコンが塗りつぶし色となっています。
  • FixedFlame_color
    固定枠を塗りつぶす色を選択します。チャット欄などでの利用を想定しています。アイコンが塗りつぶし色となっています。
  • Add_Copyright
    © SQUARE ENIXを画像に埋め込みます。
  • Use_TensorRT
    動画処理にTensorRTを利用します(TensorRT変換済みの時)
  • Previewバー
    動画の場合、Preview処理をする箇所を選択します。単位は秒です。
  • Preview
    画像に対して名前の検出・塗りつぶしや、固定枠の塗りつぶしなどを実施します。
    アプリ右側に処理結果が表示されます。
  • Start_Min、Start_Sec、End_Min、End_Sec
    動画の処理を行う開始時刻、終了時刻を時分で設定します。
  • BlackedOut Start
    動画に対して名前の検出・塗りつぶしや、固定枠の塗りつぶしなどを実施します。
    処理完了後、ファイル保存の画面が表示されます。
  • STOP
    動画処理をキャンセルします。
    ボタンを押すと、アイコンが時計に変わり、しばらく後にキャンセルされます。
  • 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分程度必要で少々時間がかかりますが、タスクマネージャでも見ながらお茶を飲みつつお待ちください。

今後、実装したいこと

あくまでやりたいことで、できないかもしれません。
思いついた順に書いているので、特に要望なければ私のやりたい順で実装トライになります。

  • copyrightの位置やサイズ、フォントなどのエディット機能
  • プレビューの拡大や縮小
  • 動画処理中に、たまにプレビューで画像が表示される 

 

名前の検出精度について

「このパターン、必ずと言ってもいいほど消えないんだよねー」
とか
「チラチラしたり、たまに検出が漏れたりするなー」
というものがあれば、パターンを教えていただければ、対応できるかもしれません。
動画そのものか、動画から切り出した動画と同じ解像度の画像を5枚程度頂けるととても助かります。
学習データの作成は半自動化ができており、従来より比較的容易に作成できるようになりました。
ファイル送信は、例えば下記のようなサービスを利用して送付、ご連絡ください。
よろしくお願いいたします。

本アプリに関するお問い合わせ

ブログお問い合わせフォーム、もしくはツイッターでご連絡いただけると助かります。

謝辞

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

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


更新履歴

1.2.3.0:2025/03/29
・モザイク、ブラーを名前検出に適用していた場合、特定の条件で異常終了する不具合を修正しました。
・プレビュー中や動画処理中に、固定枠を描けないように修正しました。
・動画処理をキャンセルできるストップボタンを実装しました。ストップ押下後、少し後に停止します。
・2つのチェックボックスについて、前回の終了状態を保存するようにしました。

1.2.2.0:2025/03/26
・プレビューでの固定枠設定時の表示方法を改善しました。
 Solidではマウス操作時は半透明で、確定で不透明になります。
 モザイクなどでは赤点線枠としています。
・プレビュー画像での固定枠設定方法の説明をUI上に追加しました。
・動画と音声を再結合する処理でもプログレスバーなどを利用し処理状況を数値表示するように変更しました。

1.2.1.0:2025/03/25
FFmpegのライセンス表記が正しくなかったのを修正しました。

1.2.0.0:2025/03/24
塗りつぶし処理にモザイク、ブラーを追加。
これに合わせてUIを変更しました。

1.1.3.0:2025/03/19
誤記訂正、不要コードの削除。
ハードウェアエンコーダが利用できない統合GPUでは起動しても実行できないようにしました。

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

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

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

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

1.0.0.0:2025/02/26
アプリ操作説明として投稿



開発での試行錯誤

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