dotfiles2/base/.config/mpv/scripts/config.lua

120 lines
3.1 KiB
Lua
Raw Permalink Normal View History

2022-08-06 05:16:17 +00:00
local mpopt = require('mp.options')
local initial_config = {}
local default_profile_filename = 'subs2srs'
local profiles_filename = 'subs2srs_profiles'
local config, profiles
local function is_empty(var)
return var == nil or var == '' or (type(var) == 'table' and next(var) == nil)
end
local function set_audio_format()
if config.audio_format == 'opus' then
config.audio_codec = 'libopus'
config.audio_extension = '.ogg'
else
config.audio_codec = 'libmp3lame'
config.audio_extension = '.mp3'
end
end
local function set_video_format()
if config.snapshot_format == 'webp' then
config.snapshot_extension = '.webp'
config.snapshot_codec = 'libwebp'
else
config.snapshot_extension = '.jpg'
config.snapshot_codec = 'mjpeg'
end
end
local function ensure_in_range(dimension)
config[dimension] = config[dimension] < 42 and -2 or config[dimension]
config[dimension] = config[dimension] > 640 and 640 or config[dimension]
end
local function conditionally_set_defaults(width, height, quality)
if config[width] < 1 and config[height] < 1 then
config[width] = -2
config[height] = 200
end
if config[quality] < 0 or config[quality] > 100 then
config[quality] = 15
end
end
local function check_image_settings()
ensure_in_range('snapshot_width')
ensure_in_range('snapshot_height')
conditionally_set_defaults('snapshot_width', 'snapshot_height', 'snapshot_quality')
end
local function validate_config()
set_audio_format()
set_video_format()
check_image_settings()
end
local function load_profile(profile_name)
if is_empty(profile_name) then
profile_name = profiles.active
if is_empty(profile_name) then
profile_name = default_profile_filename
end
end
mpopt.read_options(config, profile_name)
end
local function save_initial_config()
for key, value in pairs(config) do
initial_config[key] = value
end
end
local function restore_initial_config()
for key, value in pairs(initial_config) do
config[key] = value
end
end
local function next_profile()
local first, next, new
for profile in string.gmatch(profiles.profiles, '[^,]+') do
if not first then
first = profile
end
if profile == profiles.active then
next = true
elseif next then
next = false
new = profile
end
end
if next == true or not new then
new = first
end
profiles.active = new
restore_initial_config()
load_profile(profiles.active)
validate_config()
end
local function init(config_table, profiles_table)
config, profiles = config_table, profiles_table
-- 'subs2srs' is the main profile, it is always loaded.
-- 'active profile' overrides it afterwards.
mpopt.read_options(profiles, profiles_filename)
load_profile(default_profile_filename)
save_initial_config(config)
if profiles.active ~= default_profile_filename then
load_profile(profiles.active)
end
validate_config()
end
return {
init = init,
next_profile = next_profile,
}