mirror of
https://github.com/ksyasuda/aniwrapper.git
synced 2024-11-22 03:19:53 -08:00
add skip-intro.lua script and modify setup
This commit is contained in:
parent
a40e673ed3
commit
9e4722da4e
151
skip-intro.lua
Normal file
151
skip-intro.lua
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
MAX_SPEED = 100
|
||||||
|
NORMAL_SPEED = 1
|
||||||
|
ONE_SECOND = 1
|
||||||
|
skip = false
|
||||||
|
-- Max noise (dB) and min silence duration (s) to trigger
|
||||||
|
opts = { quietness = -45, duration = 0.85 }
|
||||||
|
|
||||||
|
|
||||||
|
function setOptions()
|
||||||
|
local options = require 'mp.options'
|
||||||
|
options.read_options(opts)
|
||||||
|
end
|
||||||
|
|
||||||
|
function setTime(time)
|
||||||
|
mp.set_property_number('time-pos', time)
|
||||||
|
end
|
||||||
|
|
||||||
|
function getTime()
|
||||||
|
return mp.get_property_native('time-pos')
|
||||||
|
end
|
||||||
|
|
||||||
|
function setSpeed(speed)
|
||||||
|
mp.set_property('speed', speed)
|
||||||
|
end
|
||||||
|
|
||||||
|
function setPause(state)
|
||||||
|
mp.set_property_bool('pause', state)
|
||||||
|
end
|
||||||
|
|
||||||
|
function setMute(state)
|
||||||
|
mp.set_property_bool('mute', state)
|
||||||
|
end
|
||||||
|
|
||||||
|
function initAudioFilter()
|
||||||
|
local af_table = mp.get_property_native('af')
|
||||||
|
af_table[#af_table + 1] = {
|
||||||
|
enabled = false,
|
||||||
|
label = 'silencedetect',
|
||||||
|
name = 'lavfi',
|
||||||
|
params = { graph = 'silencedetect=noise=' .. opts.quietness .. 'dB:d=' .. opts.duration }
|
||||||
|
}
|
||||||
|
mp.set_property_native('af', af_table)
|
||||||
|
end
|
||||||
|
|
||||||
|
function initVideoFilter()
|
||||||
|
local vf_table = mp.get_property_native('vf')
|
||||||
|
vf_table[#vf_table + 1] = {
|
||||||
|
enabled = false,
|
||||||
|
label = 'blackout',
|
||||||
|
name = 'lavfi',
|
||||||
|
params = { graph = '' }
|
||||||
|
}
|
||||||
|
mp.set_property_native('vf', vf_table)
|
||||||
|
end
|
||||||
|
|
||||||
|
function setAudioFilter(state)
|
||||||
|
local af_table = mp.get_property_native('af')
|
||||||
|
if #af_table > 0 then
|
||||||
|
for i = #af_table, 1, -1 do
|
||||||
|
if af_table[i].label == 'silencedetect' then
|
||||||
|
af_table[i].enabled = state
|
||||||
|
mp.set_property_native('af', af_table)
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function dim(state)
|
||||||
|
local dim = { width = 0, height = 0 }
|
||||||
|
if state == true then
|
||||||
|
dim.width = mp.get_property_native('width')
|
||||||
|
dim.height = mp.get_property_native('height')
|
||||||
|
end
|
||||||
|
return dim.width .. 'x' .. dim.height
|
||||||
|
end
|
||||||
|
|
||||||
|
function setVideoFilter(state)
|
||||||
|
local vf_table = mp.get_property_native('vf')
|
||||||
|
if #vf_table > 0 then
|
||||||
|
for i = #vf_table, 1, -1 do
|
||||||
|
if vf_table[i].label == 'blackout' then
|
||||||
|
vf_table[i].enabled = state
|
||||||
|
vf_table[i].params = { graph = 'nullsink,color=c=black:s=' .. dim(state) }
|
||||||
|
mp.set_property_native('vf', vf_table)
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function silenceTrigger(name, value)
|
||||||
|
if value == '{}' or value == nil then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local skipTime = tonumber(string.match(value, '%d+%.?%d+'))
|
||||||
|
local currTime = getTime()
|
||||||
|
|
||||||
|
if skipTime == nil or skipTime < currTime + ONE_SECOND then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
stopSkip()
|
||||||
|
setTime(skipTime)
|
||||||
|
skip = false
|
||||||
|
end
|
||||||
|
|
||||||
|
function setAudioTrigger(state)
|
||||||
|
if state == true then
|
||||||
|
mp.observe_property('af-metadata/silencedetect', 'string', silenceTrigger)
|
||||||
|
else
|
||||||
|
mp.unobserve_property(silenceTrigger)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function startSkip()
|
||||||
|
startTime = getTime()
|
||||||
|
-- This audio filter detects moments of silence
|
||||||
|
setAudioFilter(true)
|
||||||
|
-- This video filter makes fast-forward faster
|
||||||
|
setVideoFilter(true)
|
||||||
|
setAudioTrigger(true)
|
||||||
|
setPause(false)
|
||||||
|
setMute(true)
|
||||||
|
setSpeed(MAX_SPEED)
|
||||||
|
end
|
||||||
|
|
||||||
|
function stopSkip()
|
||||||
|
setAudioFilter(false)
|
||||||
|
setVideoFilter(false)
|
||||||
|
setAudioTrigger(false)
|
||||||
|
setMute(false)
|
||||||
|
setSpeed(NORMAL_SPEED)
|
||||||
|
end
|
||||||
|
|
||||||
|
function keypress()
|
||||||
|
skip = not skip
|
||||||
|
if skip then
|
||||||
|
startSkip()
|
||||||
|
else
|
||||||
|
stopSkip()
|
||||||
|
setTime(startTime)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
setOptions(opts)
|
||||||
|
initAudioFilter()
|
||||||
|
initVideoFilter()
|
||||||
|
|
||||||
|
mp.add_key_binding('Tab', 'skip-key', keypress)
|
Loading…
Reference in New Issue
Block a user