Upload files to ".config/mpv/scripts"
parent
8f6a16c41f
commit
0ab3c9c46a
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,10 @@
|
||||||
|
local target_fps = 23
|
||||||
|
|
||||||
|
mp.add_periodic_timer(1, function()
|
||||||
|
local fps = mp.get_property_native("estimated-vf-fps")
|
||||||
|
if fps and math.abs(fps - target_fps) > 0.1 then
|
||||||
|
mp.set_property_native("speed", fps / target_fps)
|
||||||
|
else
|
||||||
|
mp.set_property_native("speed", 1)
|
||||||
|
end
|
||||||
|
end)
|
|
@ -0,0 +1,154 @@
|
||||||
|
local utils = require 'mp.utils'
|
||||||
|
local msg = require 'mp.msg'
|
||||||
|
local settings = {
|
||||||
|
|
||||||
|
filetypes = {
|
||||||
|
'jpg', 'jpeg', 'png', 'tif', 'tiff', 'gif', 'webp', 'svg', 'bmp',
|
||||||
|
'mp3', 'wav', 'ogm', 'flac', 'm4a', 'wma', 'ogg', 'opus',
|
||||||
|
'mkv', 'avi', 'mp4', 'ogv', 'webm', 'rmvb', 'flv', 'wmv', 'mpeg', 'mpg', 'm4v', '3gp'
|
||||||
|
},
|
||||||
|
|
||||||
|
--linux(true)/windows(false)/auto(nil)
|
||||||
|
linux_over_windows = nil,
|
||||||
|
|
||||||
|
--at end of directory jump to start and vice versa
|
||||||
|
allow_looping = true,
|
||||||
|
|
||||||
|
--order by natural (version) numbers, thus behaving case-insensitively and treating multi-digit numbers atomically
|
||||||
|
--e.x.: true will result in the following order: 09A 9A 09a 9a 10A 10a
|
||||||
|
-- while false will result in: 09a 09A 10a 10A 9a 9A
|
||||||
|
version_flag = true,
|
||||||
|
}
|
||||||
|
|
||||||
|
local filetype_lookup = {}
|
||||||
|
for _, ext in ipairs(settings.filetypes) do
|
||||||
|
filetype_lookup[ext] = true
|
||||||
|
end
|
||||||
|
|
||||||
|
--check os
|
||||||
|
if settings.linux_over_windows==nil then
|
||||||
|
local o = {}
|
||||||
|
if mp.get_property_native('options/vo-mmcss-profile', o) ~= o then
|
||||||
|
settings.linux_over_windows = false
|
||||||
|
else
|
||||||
|
settings.linux_over_windows = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function show_osd_message(file)
|
||||||
|
mp.osd_message("Now playing: " .. file, 3) -- Adjust OSD display time as needed
|
||||||
|
end
|
||||||
|
|
||||||
|
function nexthandler()
|
||||||
|
movetofile(true)
|
||||||
|
end
|
||||||
|
|
||||||
|
function prevhandler()
|
||||||
|
movetofile(false)
|
||||||
|
end
|
||||||
|
|
||||||
|
function get_files_windows(dir)
|
||||||
|
local args = {
|
||||||
|
'powershell', '-NoProfile', '-Command', [[& {
|
||||||
|
Trap {
|
||||||
|
Write-Error -ErrorRecord $_
|
||||||
|
Exit 1
|
||||||
|
}
|
||||||
|
$path = "]]..dir..[["
|
||||||
|
$escapedPath = [WildcardPattern]::Escape($path)
|
||||||
|
cd $escapedPath
|
||||||
|
|
||||||
|
$list = (Get-ChildItem -File | Sort-Object { [regex]::Replace($_.Name, '\d+', { $args[0].Value.PadLeft(20) }) }).Name
|
||||||
|
$string = ($list -join "/")
|
||||||
|
$u8list = [System.Text.Encoding]::UTF8.GetBytes($string)
|
||||||
|
[Console]::OpenStandardOutput().Write($u8list, 0, $u8list.Length)
|
||||||
|
}]]
|
||||||
|
}
|
||||||
|
local process = utils.subprocess({ args = args, cancellable = false })
|
||||||
|
return parse_files(process, '%/')
|
||||||
|
end
|
||||||
|
|
||||||
|
function get_files_linux(dir)
|
||||||
|
local flags = ('-1p' .. (settings.version_flag and 'v' or ''))
|
||||||
|
local args = { 'ls', flags, dir }
|
||||||
|
local process = utils.subprocess({ args = args, cancellable = false })
|
||||||
|
return parse_files(process, '\n')
|
||||||
|
end
|
||||||
|
|
||||||
|
function parse_files(res, delimiter)
|
||||||
|
if not res.error and res.status == 0 then
|
||||||
|
local valid_files = {}
|
||||||
|
for line in res.stdout:gmatch("[^"..delimiter.."]+") do
|
||||||
|
local ext = line:match("^.+%.(.+)$")
|
||||||
|
if ext and filetype_lookup[ext:lower()] then
|
||||||
|
table.insert(valid_files, line)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return valid_files, nil
|
||||||
|
else
|
||||||
|
return nil, res.error
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function movetofile(forward)
|
||||||
|
if mp.get_property('filename'):match("^%a%a+:%/%/") then return end
|
||||||
|
local pwd = mp.get_property('working-directory')
|
||||||
|
local relpath = mp.get_property('path')
|
||||||
|
if not pwd or not relpath then return end
|
||||||
|
|
||||||
|
local path = utils.join_path(pwd, relpath)
|
||||||
|
local filename = mp.get_property("filename")
|
||||||
|
local dir = utils.split_path(path)
|
||||||
|
|
||||||
|
local files, error
|
||||||
|
if settings.linux_over_windows then
|
||||||
|
files, error = get_files_linux(dir)
|
||||||
|
else
|
||||||
|
files, error = get_files_windows(dir)
|
||||||
|
end
|
||||||
|
|
||||||
|
if not files then
|
||||||
|
msg.error("Subprocess failed: "..(error or ''))
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local found = false
|
||||||
|
local memory = nil
|
||||||
|
local lastfile = true
|
||||||
|
local firstfile = nil
|
||||||
|
for _, file in ipairs(files) do
|
||||||
|
if found == true then
|
||||||
|
mp.commandv("loadfile", utils.join_path(dir, file), "replace")
|
||||||
|
lastfile = false
|
||||||
|
show_osd_message(file)
|
||||||
|
break
|
||||||
|
end
|
||||||
|
if file == filename then
|
||||||
|
found = true
|
||||||
|
if not forward then
|
||||||
|
lastfile = false
|
||||||
|
if settings.allow_looping and firstfile == nil then
|
||||||
|
found = false
|
||||||
|
else
|
||||||
|
if firstfile == nil then break end
|
||||||
|
mp.commandv("loadfile", utils.join_path(dir, memory), "replace")
|
||||||
|
show_osd_message(memory)
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
memory = file
|
||||||
|
if firstfile == nil then firstfile = file end
|
||||||
|
end
|
||||||
|
if lastfile and firstfile and settings.allow_looping then
|
||||||
|
mp.commandv("loadfile", utils.join_path(dir, firstfile), "replace")
|
||||||
|
show_osd_message(firstfile)
|
||||||
|
end
|
||||||
|
if not found and memory then
|
||||||
|
mp.commandv("loadfile", utils.join_path(dir, memory), "replace")
|
||||||
|
show_osd_message(memory)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
mp.add_key_binding('Shift+RIGHT', 'nextfile', nexthandler)
|
||||||
|
mp.add_key_binding('Shift+LEFT', 'previousfile', prevhandler)
|
Loading…
Reference in New Issue