Skip to content

Instantly share code, notes, and snippets.

@himanshuxd
Forked from myfreeer/cycle-denoise.lua
Created April 1, 2023 14:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save himanshuxd/d54723d22e9c7f70d2ce54932c8a2ca2 to your computer and use it in GitHub Desktop.
Save himanshuxd/d54723d22e9c7f70d2ce54932c8a2ca2 to your computer and use it in GitHub Desktop.
mpv user-script to cycle between lavfi's denoise filters, tested over mpv 0.25.0-58-g99cef59fc
-- settings
-- key_binding: press the key specified below
-- to cycle between denoise filters below,
-- set it to nil to disable the binding
local key_binding = "n"
-- key_binding_reverse cycle between denoise filters below
-- in reverse order, set it to nil to disable the binding,
-- set it to a single-char string to enable
local key_binding_reverse = nil
-- denoisers: specify names of denoise libavfilter filters
-- from `mpv --vf=lavfi=help` command
-- where the last 3 filters (dctdnoiz, owdenoise, nlmeans)
-- are too slow to be used in playback
local denoisers = {
"removegrain"
,"atadenoise"
,"hqdn3d"
,"vaguedenoiser"
-- ,"dctdnoiz"
-- ,"owdenoise"
-- ,"nlmeans"
}
local denoiser_count = #denoisers
local filter_index = 0
local script_name = mp.get_script_name()
local denoise_label = string.format("%s-denoise", script_name)
-- from https://github.com/mpv-player/mpv/blob/39e04e929483847a3e0722d86d53f69837ed99db/TOOLS/lua/autocrop.lua
function del_filter_if_present(label)
-- necessary because mp.command('vf del @label:filter') raises an
-- error if the filter doesn't exist
local vfs = mp.get_property_native("vf")
for i,vf in pairs(vfs) do
if vf["label"] == label then
table.remove(vfs, i)
mp.set_property_native("vf", vfs)
return true
end
end
return false
end
function cycle_denoise()
if not del_filter_if_present(denoise_label) then
filter_index = 0
end
filter_index = filter_index + 1
if filter_index > denoiser_count then
mp.osd_message("denoise filters removed", osd_time)
return
end
-- insert the filter
mp.command(
string.format(
'vf add @%s:lavfi=graph="%s"',
denoise_label, denoisers[filter_index]
)
)
end
function cycle_denoise_reverse()
if not del_filter_if_present(denoise_label) then
filter_index = denoiser_count
else
filter_index = filter_index - 1
end
if filter_index < 1 then
mp.osd_message("denoise filters removed", osd_time)
return
end
-- insert the filter
mp.command(
string.format(
'vf add @%s:lavfi=graph="%s"',
denoise_label, denoisers[filter_index]
)
)
end
if key_binding then
mp.add_key_binding(key_binding, "denoise", cycle_denoise)
end
if key_binding_reverse then
mp.add_key_binding(key_binding_reverse, "denoise-reverse", cycle_denoise_reverse)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment