Code:
##================================================================================================##
# #
# ____ _ __ ____ __ #
# / _/___ ____ ____ _(_)___ / /_/ __ \___ / /___ ____ ____ #
# / // __ \/ __ \/ __ `/ / __ \/ __/ / / / _ \/ / __ \/ __ `/ __ \ #
# _/ // / / / /_/ / /_/ / / / / / /_/ /_/ / __/ / /_/ / /_/ / /_/ / #
# /___/_/ /_/ .___/\__,_/_/_/ /_/\__/_____/\___/_/\____/\__, /\____/ #
# /_/ /____/ #
# #
##================================================================================================##
# InpaintDelogo is an advanced logo and watermark removal function using inpainting and deblending
# with an adjustable fine process to hide artifacts and get best delogo results.
# Can remove opaque, transparent, semi-transparent and some dynamic logos from video.
# Can be used to remove hardcoded subtitles or extract them to images for OCR.
# Inpainting refers to the application of sophisticated algorithms to reconstruct of lost
# or deteriorated parts of images or videos.
##================================================================================================##
Someone asked for my delogo script, so here it is:
InpaintDelogo() is user friendly script for
AvsInpaint plugin (plugin created by
Wolfgang Boiger).
Why another script for
AvsInpaint!? Because other scripts -
rm_logo &
InpaintFunc are both semi-broken, slow inpainting, with subpar to unusable results.
AvsInpaint is a great plugin, questionably the best tool atm to remove logos. With
InpaintDelogo you can expect better delogo results than from any other tool.
InpaintDelogo can save your time by generating a logo mask automatically, get Color/Alpha masks for deblending in a second, 3x times faster inpainting than with previous user friendly scripts.
Issues with previous scripts for AvsInpaint:
Code:
InpaintFunc Deblend: Results from poor to unusable. As in practice you can't get good masks by analyzing random frames.
InpaintFunc Both: Broken. Results same as Inpaint, simply there is no code to do it.
InpaintFunc Inpaint: Works. No controls. Very slow.
InpaintFunc PP: Subpar. Broken code creates edges and PP=3 can't solve it.
rm_logo Deblend: Results from poor to unusable. Same as InpaintFunc.
rm_logo Both: Broken. Does both but can't do PP as there is no masks to do it.
rm_logo Inpaint: Works. Very slow.
rm_logo PP: Works (not for both).
Benchmarks (in brackets - fps with all new features On. rm_logo is modded for speed or it wouldn't be able to run test at all, both
rm_logo &
InpaintFunc runs at ~same speed. ):
Code:
InpaintDelogo v1.11 rm_logo v0.6_mod/InpaintFunc v1.15
180x180(pre cut):
Deblend 702 fps (153 fps) 587 Fps
Inpaint 33 fps 10 fps
Both 47 fps 10 fps
1920x1080:
Deblend 121 fps (60 fps) 121 Fps
Inpaint 12 fps 4 fps
Basic short guide( things you need before doing delogo ):
0) Read help/manual (at the top of the script) about parameters mentioned below.
1) Run this function to get "Loc" values: InpaintLoc(Loc="100,100,-100,-100"). Adjust "Loc" crop parameters around logo (aka "Left,Top,-Right,-Bottom"). Use even(mod2) numbers.
2) Prepare the "mask" manually, or start InpaintDelogo with "Automask=1" and "Analyze=2", automask result can be adjusted with"aMix".
Some basic delogo parameters for non-transparent logo:
Quote:
InpaintDelogo( mask="D:\mask.bmp", Automask=0, aMix=0, Loc="100,100,-100,-100", Mode="Inpaint")
|
Version history:
Code:
# Version 3.7 : 2023/08/11. Fixed: Broken "YColorSolidIns" arg [code typo].
# Fixed: Bug with "isHD" variable.
# Added 'Mask' path check before running 'Automask'.
# New params: "UVAlphaFromY", "SubPrefix", "SubPostfix".
# Removed "colors_rgb.avsi" dependancy.
# Changed "mShow" to red instead of black.
# Version 3.6 : 2023/01/12. New conditional: Auto max "Interp" for frames where logo is in ~solid background.
# "Optimize" is split to "Optimize1" & "Optimize2".
# Burnin version number into ebmp ["Ver-", positive analyze only].
# Version 3.5 : 2022/12/27. Fixed: Dynamic mask inpainting was broken since v3.4.
# Version 3.4 : 2022/11/24. New feature: "Greyscale" parameter, affects positive "Analyze", "Deblend", "Inpaint"...
# Up to ~60% speed-up when enabled.
# Prevents chroma changes on the greyscale videos by deblend [side effect of "3.1" fix].
# FFT3DFilter replaced by Neo_FFT3D, up to ~20% speed-up.
# Version 3.3 : 2022/11/13. Corrected a code 'typo' in SubsMask2Img(), introduced in v2.10.
# Version 3.2 : 2022/10/22. New feature: Conditional optimizations with "Optimize", enabled by default.
# Up to ~1000% speed-up for slow "Inpaint" & "Interp" presets.
# Additional auto "Interp" disabling.
# New feature: Negative "dPP"/"oPP", adds denoise, enabled by default [20%-50% slow down].
# Very slow inpainting preset: Turbo=-2.
# Quick masks dump with clean "outs": DumpMasks=2.
# Various other tweaks.
# FFT3DFilter plugin is required.
# Version 3.1 : 2022/10/11. Fixed: "Deblend" with positive "Analyze" was unreliable on the colored logos.
# Version 3.00 : 2022/10/07. Fixed: A frame selection scan result wasn't saved properly when "Automask=1" and "Inpaint" mode,
# now the deblending masks generation is up to twice faster in this scenario.
# New feature: Easy use of the ebmp masks on other videos, you can input them directly with "Mask" parameter.
# Ebmp format is changed, the masks from older versions are not compatible.
# New feature: Twice faster subtitles extraction with auto intermediate file.
# It's activated by negative "Extract" values.
# Requirements: LSMASH, TWriteAVI, x264vfw.
# New params: "ReExtract", "FourCC".
# New feature: Adjustable subs detection window, useful if video has non-middle subs alignment.
# New params: "DetWinPercW", "DetWinPercH", "DetWinHoPos".
# With "Show=12" you can see the subs detection window and correlation coefficient [CorrTh/Corr].
# New: "Turbo=-1", it activates an inpainting preset more suitable for UHD - HD resolutions.
# New: "IntSpd=4", similar as above.
# Basemask change: Background should be less than full white, logo - full white.
# Swapped "Turbo" 1 & 3.
# Removed "rSize" parameter.
# Reworked "Show=2", alternative to "Show=1" for positive Analyze.
# New feature: Various parameters to manipulate the deblending masks from positive analyze [for the experts only]:
# "YAlphaTweak", "UAlphaTweak", "VAlphaTweak",
# "YAlphaSolidIns", "UAlphaSolidIns", "VAlphaSolidIns",
# "YAlphaSolidOuts", "UAlphaSolidOuts", "VAlphaSolidOuts",
# "YColorSolid", "UColorSolid", "VColorSolid",
# "YColorSolidOuts", "UColorSolidOuts", "VColorSolidOuts",
# "YColorSolidIns", "UColorSolidIns", "VColorSolidIns",
# "YOffsetIns", "YOffsetOuts", "UVOffsetIns", "UVOffsetOuts", "ShiftMasksVe", "ShiftMasksHo",
# "YAlphaExternal", "WholeDeblend", "TriggerDynamic", "DumpMasks".
# Various other tweaks.
# Avisynth+ v3.7.2 or later is required.
#
#---------------------------------------------------------------------------------------------------
#
# Version 2.17 : 2022/06/13. Option for ranged luma mask with DynMask6.
# Version 2.16 : 2022/06/12. Higher quality and faster "DynColor" mask when used with "DynLocUp".
# Faster "DynColor" alternative if parameter is string, and it supports multiple colors.
# TColorMask plugin is required.
# Version 2.15 : 2022/05/29. Spaces are allowed in "Loc".
# Version 2.14 : 2022/05/22. SubsMask2Img: New option to extract raw non-binarized images.
# Enabled by "Extract=2" in InpaintDelogo() or "Raw" in SubsMask2Img().
# New: "Raw", "RawAvr".
# Version 2.13 : 2022/05/21. SubsMask2Img: Added average luma check to catch non-sub images.
# New: "SubMinLuma", "SubSusLuma".
# Renamed: "SubSuspect" to "SubSusDur".
# Version 2.12 : 2022/05/14. Added generation of the dynamic mask by gradient magnitude map (aka "DynMask=7"/"DynTEdge").
# New: "DynTEdge", "DynTEdgeThY", "DynTEdgeInf", "DynTuneInf", Show=10, Show=11.
# vsTEdgeMask plugin is required.
# Version 2.11 : 2022/05/13. Rewrite: "DynColor" ~30%-300% faster. New: "DynMask=6/"DynTune". Removed: "Show=10".
# Version 2.10 : 2022/05/02. Added auto generation of the dynamic mask by color (aka "DynMask=5"/"DynColor").
# New: "DynColor", "DynColorTol", "DynColorInf", "Show=10".
# This dynamic mask by color can pre-patch video for other "DynMask" methods.
# Version 2.09 : 2022/04/08. Positive "DynMaskUp" is supported with "DynMask=3".
# Improved "KillNoise".
# Version 2.08 : 2022/04/07. Improved negative "KillBlobs".
# Version 2.07 : 2022/04/06. Changed defaults of the sub-parameters for "DynMask=3" (no need to set the bunch of parameters anymore).
# Version 2.06 : 2022/04/06. Fixed: "Show=3" was broken since v1.36.
# Version 2.05 : 2022/04/04. Masktools2 v2.2.30 or later is required.
# Tweaked: "DynMask=4" and positive "DynMaskUp", should be a bit faster and no more glitches.
# New: "DynLocUp" [Experimental WIP parameter for tests].
# Version 2.04 : 2022/02/11. Improved deblend quality with positive "Analyze" when frames quantity to analyze is low.
# Tweaked: A/C masks filename from negative "Analyze" ('Deep' goes to the end of the filename).
# Tweaked: "iTune", "EdgeWide".
# Version 2.03 : 2021/12/13. Tweaked "DynTune".
# Version 2.02 : 2021/12/10. Fixed: "Analyze=1" bug.
# +11% deblend speed-up.
# Tweaked "aMix". "Analyze=2" is default. Adaptive "AnalyzeTh" default [16 or 30].
# Don't search frames for analyse if 'txt' file is present and ReAnalyze=0.
# Version 2.01 : 2021/12/05. "Analyze" 3 option.
# Version 2.00 : 2021/12/04. AviSynth+ v3.7.1 or later & FrameSel plugin is required.
# New: Old Deblend delogo is superceded by the new superior one.
# New: Smart frames selection for analyze using "AnalyzeTh" & "NoBorderAt" parameters.
# New: "Automask" adapted to the new stuff and it doesn't reanalyze when "aMix" is adjusted.
# New: "Show" 7/8/9.
# Note: Old Deblend is saved as negative "Analyze",
# -3/-4 should be same as old, -1/-2 were augmented by the smart frames selection.
#
Requirements:
Code:
# Core requirements:
# AviSynth+ v3.7.2 or later ( https://github.com/AviSynth/AviSynthPlus ).
# AvsInpaint v1.3 or later ( https://github.com/pinterf/AvsInpaint ).
# Other requirements:
# MaskTools2 ( https://github.com/pinterf/masktools ).
# RgTools ( https://github.com/pinterf/RgTools ).
# GRunT ( https://github.com/pinterf/GRunT ).
# RequestLinear ( https://github.com/pinterf/TIVTC ).
# ClipBlend ( http://avisynth.nl/index.php/ClipBlend ).
# RT_Stats ( http://avisynth.nl/index.php/RT_Stats ).
# FrameSel ( http://avisynth.nl/index.php/FrameSel ).
# GrainFactory3 ( http://avisynth.nl/index.php/GrainFactory3 ).
# vsTEdgeMask ( https://github.com/Asd-g/AviSynth-vsTEdgeMask ).
# TColorMask ( https://github.com/Asd-g/AviSynth-tcolormask ).
# Requirements for fast subtitles extraction:
# LSMASH ( http://avisynth.nl/index.php/LSMASHSource ).
# TWriteAVI ( https://github.com/Asd-g/AviSynth-TWriteAVI ).
# x264vfw ( https://sourceforge.net/projects/mpxplay/files/x264vfw ).
Notes for AviSynth v2.6 users:
Code:
# Last compatible version is 1.48
# Requirement: GScript ( http://avisynth.nl/index.php/GScript ).
# "InpaintDelogo.avsi" needs to be renamed to "InpaintDelogo.avs",
# and loaded manually in AviSynth script with: GImport("C:\AviSynth 2.5\plugins\InpaintDelogo.avs"),
# or use AvsInit for autoloading ( https://forum.doom9.org/showthread.php?t=176749 ).
# Subs extraction is up to 600% slower than with AviSynth+!
Download link:
Latest version v3.7:
https://github.com/Purfview/InpaintDelogo