一键导入
mask-video
動画内のファイルパス・ユーザー名・APIキー等を自動検出してぼかしでマスクする。「動画のパスをマスクしたい」「録画を公開したいけど個人情報が映ってる」等で発動。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
動画内のファイルパス・ユーザー名・APIキー等を自動検出してぼかしでマスクする。「動画のパスをマスクしたい」「録画を公開したいけど個人情報が映ってる」等で発動。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | mask-video |
| description | 動画内のファイルパス・ユーザー名・APIキー等を自動検出してぼかしでマスクする。「動画のパスをマスクしたい」「録画を公開したいけど個人情報が映ってる」等で発動。 |
| argument-hint | <input_video> [output_video] |
| disable-model-invocation | true |
| allowed-tools | Bash, Read, Glob |
動画内の機密テキスト(ファイルパス、ユーザー名、APIキー等)をテンプレートマッチングで検出し、ガウスぼかしで自動マスクする。
scripts/mask_path.py が存在することpip install opencv-python-headless) がインストール済みであること$ARGUMENTS から入力ファイルパスを取得する。
<入力名>_masked.<拡張子> を自動生成)入力ファイルの存在を確認する。存在しない場合はエラーを報告して終了。
以下を Bash で確認し、不足があればインストール手順を提示して終了:
ffmpeg -version
python -c "import cv2; print(cv2.__version__)"
mkdir -p /tmp/vpm_sample
ffmpeg -y -i <input> -vframes 1 -q:v 2 /tmp/vpm_sample/frame_001.jpg
Windows の場合は %TEMP%\vpm_sample を使用する。
重要: -vframes 1 を使うこと。-vf "fps=1" でリサンプルするとJPEG圧縮品質が mask_path.py の内部抽出と異なり、マッチングスコアが0.52まで低下して検出できなくなる。
Read ツールでフレーム画像を読み込み、以下を特定:
C:\Users\...、/home/... 等)が映っている箇所sk-ant-、Bearer 等)が映っている箇所座標の特定方法:
テンプレートの切り出し(Python で実行):
import cv2
gray = cv2.imread('/tmp/vpm_sample/frame_001.jpg', cv2.IMREAD_GRAYSCALE)
template = gray[y:y+h, x:x+w]
cv2.imwrite('/tmp/vpm_sample/template.png', template)
テンプレートは短い固有文字列(Users\\komei 等)にする。長すぎると部分一致しにくくなる。
--pad-right を大きく(400-600)--pad-right をさらに大きく(200-400)--pad-left を調整Phase 3 で保存したテンプレート PNG を使い、まずスコアを確認:
import cv2, numpy as np
gray = cv2.imread('/tmp/vpm_sample/frame_001.jpg', cv2.IMREAD_GRAYSCALE)
template = cv2.imread('/tmp/vpm_sample/template.png', cv2.IMREAD_GRAYSCALE)
result = cv2.matchTemplate(gray, template, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
print(f"Best match: {max_val:.4f} at {max_loc}")
locations = np.where(result >= 0.65)
print(f"Matches (>=0.65): {len(locations[0])}")
次に短い動画テスト:
python scripts/mask_path.py <input> /tmp/vpm_test.mp4 --template /tmp/vpm_sample/template.png --pad-right <N> --detect-interval 5
処理後、出力フレームを Read ツールで確認:
filePath: 等は見えてOK)問題があれば座標やパディングを調整して Phase 3 に戻る。
確定したパラメータで全フレームを処理:
python scripts/mask_path.py <input> <output> \
--template /tmp/vpm_sample/template.png \
--threshold 0.65 \
--pad-left 10 --pad-right <N> \
--pad-top 3 --pad-bottom 3 \
--blur-size 41 \
--detect-interval 5
複数箇所をマスクする場合は、--template を複数指定して1パスで処理する(再エンコードによる品質劣化なし):
python scripts/mask_path.py <input> <output> \
--template /tmp/vpm_sample/template1.png \
--template /tmp/vpm_sample/template2.png
出力動画からサンプルフレームを抽出して Read ツールで目視確認:
mkdir -p /tmp/vpm_check
ffmpeg -y -i <output> -vframes 3 -vf "select='eq(n\,0)+eq(n\,500)+eq(n\,1000)'" -vsync vfr -q:v 2 /tmp/vpm_check/frame_%03d.jpg
フレーム番号は動画の長さに応じて調整する(先頭・中間・終盤の3箇所を確認)。
確認項目:
ffprobe <output> で音声ストリームを確認)問題があれば Phase 3 に戻ってパラメータを調整する。
完了したら一時ファイルを削除:
rm -rf /tmp/vpm_sample /tmp/vpm_check /tmp/vpm_test.mp4