-
-
Save myfreeer/d744c445aa71c0eeb165ca39cf6c0511 to your computer and use it in GitHub Desktop.
| -- 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 |
Hi, I try to limit the effect of lavfi atadenoise to a specific srgb threshold but I have no idea how to make this "work"
this would be the ffmpeg command
-vf "split [original][denoised];
[denoised] atadenoise [denoised_out];
[original] lutyuv='u=128:v=128' [gray];
[gray][denoised_out]
blend=all_expr='if(between(A,0,25),B,if(between(A,25,35),B+(35-A)*(B-A)/10,A))'"
So how to put this inside mpv? ^^'
@geextahslex
So how to put this inside mpv? ^^'
See CONFIGURATION FILES, using this can make mpv load specified options on startup.
@myfreeer yeah I already fixed that, no worries mate :)
How to use this script ? Kept the file in my scripts directory. What next ?
PS: I use no-input-default-bindings and have my own bindings through input.conf
How to use this script ? Kept the file in my scripts directory. What next ?
PS: I use
no-input-default-bindingsand have my own bindings throughinput.conf
Edit the key binding here, and press it when the player is active.
Have not tested how no-input-default-bindings affects this.
@myfreeer That is exactly why I asked. Doesn't work with no-input-default-bindings
Why not just use forced function in your script? Like what's the point of preventing the bindings from users who do no-input-default-bindings ? Like I don't even use n binding and the script doesn't work.
@geextahslex The filters referenced by this script is ffmpeg filters, check the docs for detailed usage of filters, or maybe try VapourSynth filter if your build includes it.