Last updated on

【WoLNamesBlackedOut】FF14の動画からPC名を黒塗りしてくれるアプリを作ってみた!


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

FFXIVのMP4動画からPC名を黒塗りするソフトウェアです。
"WoLNamesBlackedOut"という名前にしました。
FF14のおもしろプレイ動画をyoutubeとかにアップしたいけど、そこには他の人も映り込んでいるので、気軽に公開できないんだよねーという問題に対応するため、つくりました。
Nvidia Geforce推奨、AMD Radeon対応です。(intel arcはごめんなさい)
処理速度は最大40FPS程度で、元の動画が60FPSであれば、3倍程度の処理時間+音声の合成時間が必要ということになります。

ダウンロードはこちらから。

ZIPファイルで2.5GB(!)もあります。適当なフォルダに解凍し、ご利用ください。
ファイル本体はgoogle driveにあります。
GitHubはこちらから。
https://github.com/calocenrieti/WoLNamesBlackedOut

処理前後のサンプル動画

処理前:

https://youtu.be/oklXwWOAq1A
処理後:(Score Threshold=0.2)

https://youtu.be/5avltDt5K0Q
動画では青魔道士ばかりですが、ジョブ問わず消してくれるはずです。

 

"WoLNamesBlackedOut"の使い方

1.処理したい動画ファイルと、保存するファイル名を設定し、
2.検出スコア(Score Threshold)を設定し、
3.Previewで、処理イメージを確認。
4.隣のバーでフレーム指定し、再度Previewを押すことで、いろんなフレームでの処理結果を確認できます。
5.この検出スコアで良いなと思ったら、BlackedOut Startで処理開始。
6.気長に待ちましょう。
7.プレビュー画面内で左クリックでドラッグすると固定の黒塗り枠を作成します。右クリックで固定黒塗りを全て解除します。
 操作感はこちらをご確認ください → https://youtu.be/oGXufGOJVPY
8.Start_min、sec、End_min、secを変更するとその範囲のみ動画の出力をするようにトリミングします。

Score Thresholdの値を変更することで、ユーザ名の検出率を変更します。
・Score Thresholdの数値を小さくする → より検出しやすくなる。誤検知も増える。
・Score Thresholdの数値を大きくする → 検出しにくくなる。誤検知が減る。

Inpaintはユーザ名を黒塗りの変わりに黒塗り周囲から中央を埋めるような処理を行います。
処理後のイメージはこちらをご確認ください → https://youtu.be/W32joBaRayg

No_Inferenceは名前の検出を行わず、SDR化、固定枠の黒塗り、動画の前後トリミングだけを行うモードです。
単純な動画編集のみを利用したい場合に利用ください。名前の検出をする時より、処理は速いです。

 

既知の不具合

動画処理と、プレビューでHDR→SDRの処理内容が異なります。
動画処理は今回採用したFFmpegでの処理、プレビューは従来同様の処理。
そのため、プレビュー画面と出力された動画で色味などが異なると思われます。
FFmpegに合わせたかったのですが、すぐに実装できず、また優先度は低いと考えたため、現状は別処理のままにしています。

黒塗りの色変更を2度以上すると、動画処理ボタン押下直後から、画面の更新が停止してしまいます。
またinpaintなど他の設定などを変更して、再出力すると、やはり画面の更新が停止してしまいます。
その結果、動画処理は動いているものの、FPSの表示やプログレスバーは変化しません。
また停止ボタンは押せ、動画処理は止まるのですが、再度処理開始することも、×でウィンドウを閉じることもできません。(タスクバーのアイコン右クリック>閉じる はできます。)
UIライブラリの問題でgithub issueを起票済みですが、すぐに修正はされないと思います。
当面は、黒塗りの色変えは、1度で決める、もしくは複数回、色をプレビューで試行錯誤する場合は、一度アプリを終了し、再びアプリを起動して最終的に決めた色に1度で設定して、動画処理を開始する、というような形で回避をお願いいたします。

"WoLNamesBlackedOut"利用上のTIPS

検出スコアのデフォルト値は0.01としています。
あまりに誤検知が多い場合には、数値を少し大きくしてください。

街中などでもある程度消えると思いますが、あまり期待しないでください。

HDR画質の動画の場合、やや処理速度は遅くなります。(当方の環境では、SDR→SDRが25FPS、HDR→SDRが20FPS)
Inpaintは、黒塗りに比べ処理が遅いです(当方の環境では、HDR→SDR+inpaintで15FPS)

 

その他

アプリに署名がないので、
「出所の怪しいソフトですが、実行しますか?」
というような警告が出ると思います。

このパターンは消えて欲しいけど、必ずと言ってもいいほど消えないんだよねー
というものがあれば、パターンを教えていただければ、対応できるかもしれません。
ただ学習データの作成が大変なので、過度な期待はしないでください。
動画から切り出した動画と同じ解像度の画像を5枚程度頂けるととても助かります。

 

謝辞

私の趣味であるにも関わらず、アプリ動作検証にお付き合いいただいた、MANA青魔道士CWLS"Holiday-AOMA"の皆さん、ありがとうございました。
今後も仲良くしてください。
よろしくおねがいしますー

 


更新履歴

20241127:
・重みを更新しました。検出精度の向上が目的です。
20241124:
・重みを更新し、ジョブアイコンなし、イニシャル設定を考慮するようになりました。
・No_Inference設定を追加しました。名前の検出を行わず、SDR化、固定消し、動画トリミングのみするモードです。
・使用ライブラリを更新しました。
20241117:
・Ultralytics Discordでアドバイスをもらい、画像縮小処理などをUltralyticsに任せるようにしました。
 これにより検出精度、処理速度が向上しています。
・上記に関連して重みファイルを更新しています。
・Inpaint機能を追加しました。黒塗り部分を周囲から補完塗りします。
・Score Thresholdの初期値を0.01に変更しました。誤検知が多い場合には数値を大きくしてください。
・ライセンスをAGPL3.0に統一しました。
20241026:
・黒塗りの重みのモデルサイズをより大きなものに変更し安定度を向上させています。
・重みモデルサイズの変更で、約3FPSほど処理が遅くなりました。
・黒塗りの重みを更新し、暗転時のチャット欄や、レディチェックやカウントダウンなどの黒塗りを強化しました。
・カラーピッカーの関数が重複していたので共通化しました。
20241015:
・黒塗りの色指示をループ処理外で実施するよう修正しました。
・プレビュー時、カラーピッカーを実行できないように修正しました。
・動画処理完了後、カラーピッカーが実行できない不具合を修正しました。
20241014:
・ユーザ名と固定枠の黒塗りの色を選択できるようにしました。
20241012:
・出力動画にcopyrightの"© SQUARE ENIX"を埋め込める設定を追加しました。
・タスクバーのアイコンを設定しました。
・入力ファイルを*.mp4限定にしました。
・動画処理中は停止以外のボタンは変更できないようにしました。
(変更しても処理に影響はありませんでしたが分かりやすくするためです)
20241010A:
・プレビュー画面においてRadeon対応が漏れていたため修正しました。
20241010:
・AMD Radeonに対応しました。検出にはONNXを、エンコードにはhevc_amfを利用します。
 但し当方のRadeonの環境がなく、特にエンコード部分は確認できていません。
 何かあればフィードバック頂きたくお願いいたします。
20241008:
・PCユーザ名検出の重みを更新しました。
20241006:
・内部処理の変更により処理速度が向上しました。
・PCユーザ名検出の重みを更新しました。
・動画をトリミングした際、音声が付かなかった不具合を修正しました。
20240927:
・動画のトリミングに対応しました。
・PCユーザ名検出の重みを更新しました。
・黒い画面が2度表示されていた問題に対応し表示しないようにしました。
・動画からフレーム取得時のRGB値が誤っており、名前検出が不正確である不具合を修正しました。
20240920:
・使用ライブラリをMoviepyからFFmpegに変更しました。これにより以下のこと実現できました。
・HDR動画をある程度の処理速度で黒消ししつつSDR動画にすることができます。当方環境ではSDR → SDR が25FPSで、HDR → SDRは20FPSでした。従来は3FPSでした。
・処理後の音声の合成を、再圧縮しないようになりました。これにより音声合成は一瞬で完了します。
・GPLライセンスのFFmpegを同梱しました。
・CUDA専用になりました。
・CUDA専用としたため、CUDAのチェックボックスを削除しました。
・HDR動画の判別は自動で行うため、HDRtoSDRのチェックボックスを削除しました。
・プレビューの縮小率の初期値を80%に変更しました。
・動画処理を中断した場合、処理途中までの動画を保存しなくなりました。
・動画や音声の一時ファイルを、実行ファイルと同じフォルダに作成するようにし、利用後は削除するように変更しました。
・新しいファイルを開いた際、固定黒枠の設定をリセットするように変更しました。
・ムービー等で名前が検出されないフレームでエラーとなる不具合を修正しました。
20240908A:
不要なライブラリが同梱されていたので削除しました。機能に変更はありません。
20240908:
・CUDAが利用できる場合、音声を合成し動画を再構成する際、NVENCを利用して処理を高速化しました。CUDAが利用できない場合は従来通りです。
20240906:
・プレビュー画面をスライダーで縮小状態で表示できるようにしました。
・固定黒枠を右クリックでリセットする際、画面表示上もリセットされるようにしました。
20240905:
・プレビュー画面で左クリックでドラッグすると、位置固定の黒塗り枠を設定します。
 右クリックで位置固定黒塗り枠の設定をリセットします。
 操作感はこちらの動画をご確認ください→ https://youtu.be/oGXufGOJVPY
20240903:
・長い名前も消し込みできるように追加学習しました。
・アップデート有無を起動時に確認するようにしました。ver.がGitHubと一致しているかチェックしています。
・プレビューのフレーム番号をスライドバーだけでなくテキストで値を変更できるようにしました。
・誤植の訂正。
20240901:
・レディチェック、レイズ等の消し込みに対応しました。
・CUDAスイッチはチェックボックスに変更し、操作不可としました。
20240828:
・cisco open-h264をの方がファイルサイズが大きかったのでやめました。勘違いですみません。
・音声処理後の書き出し作業の進捗をプログレスバーに表示するようにしました。但しバーのみです。
・新たなファイルを読み込んだ時、また処理が完了した時にプログレスバーの値を0に初期化するようにしました。
20240827:
・cisco open-h264を同梱し中間ファイルを小さくするようにしました。
・HDR動画をSDR画質に変換し処理できるように、チェックボックスを追加しました。但し3FPSとめちゃ遅いです。
・新たにファイルを開いた時に、前のファイルのフレーム指定が新たなファイルのフレームよりも大きい場合エラーになる不具合を修正しました。
20240824:
・物体検出モデルをYOLOv8に変更しました。
・物体検出モデルの変更で、処理速度が従来3FPS程度だったものが、20FPS程度にまで改善できました。
・物体検出モデルの変更で、HDR画質の動画においても適切に検出できるようになりました。但し出力される動画はSDRのため白飛びします。
・オープンソース化対応のため、GitHubにてソース公開しています。
20240819:
・CUDA設定不可時の初期設定がおかしい可能性があったので修正。
・閾値の初期値を0.2にしました。
・動画、音声の一時ファイルを、ユーザのtemp(例:C:\Users\ユーザ名\AppData\Local\Temp)に作成するようにしているが、削除ができないので接頭辞に"wol_"をつけるようにし区別しやすくしました。なお、クリーンアップ設定をしていればwindowsに自動的に削除してもらえます。
20240814A:初リリース


【ソフト名】WoLNamesBlackedOut
【著作権者】カロセンリーチ
【制作日】2024/08/14
【種 別】フリーソフト
【連絡先】X:@calcMCalcm
【配布元】
【転 載】
【登 録 名】
【圧縮形式】ZIP
【動作環境】Windows11 64bit (たぶんWindows10 64bitでも大丈夫たぶん)
【開発環境】Python3.11
―――――――――――――――――――――――――――――――――――――

≪著作権および免責事項≫
 本ソフトはフリーソフトです。自由にご使用ください。なお,著作権は作者
である"カロセンリーチ"が保有しています。
 このソフトウェアを使用したことによって生じたすべての障害・損害・不具
合等に関しては、私と私の関係者および私の所属するいかなる団体・組織とも、
一切の責任を負いません。各自の責任においてご使用ください。
―――――――――――――――――――――――――――――――――――――


開発での試行錯誤

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