VLC Scripting con Lua: ¿Saltar a una hora específica en un archivo?
(3)
En realidad, la documentación dice que puedes hacerlo ... aunque no en tantas palabras. Esto es lo que dice sobre la interfaz para analizadores de listas de reproducción:
VLC Lua playlist modules should define two functions:
* probe(): returns true if we want to handle the playlist in this script
* parse(): read the incoming data and return playlist item(s)
Playlist items use the same format as that expected in the
playlist.add() function (see general lua/README.txt)
Si sigues con la descripción de playlist.add()
dice que los elementos tienen una gran lista de campos que puedes proporcionar. Hay muchas opciones ( .name
, .title
, .artist
, etc.) pero la única requerida parece ser .path
... que es "la ruta completa / URL del elemento" .
No hay una mención explícita de dónde buscar, pero uno de los parámetros que puede elegir proporcionar es .options
, que se dice que es "una lista de opciones de VLC . Da una fullscreen
como ejemplo. Si funciona una fullscreen
paralela a --fullscreen
, puede ¿Otras opciones de línea de comandos como --start-time
y --stop-time
work también?
En mi sistema lo hacen, y aquí está el script!
-- randomseek.lua
--
-- A compiled version of this file (.luac) should be put into the proper VLC
-- playlist parsers directory for your system type. See:
--
-- http://wiki.videolan.org/Documentation:Play_HowTo/Building_Lua_Playlist_Scripts
--
-- The file format is extremely simple and is merely alternating lines of
-- filenames and durations, such as if you had a file "example.randomseek"
-- it might contain:
--
-- foo.mp4
-- 3:04
-- bar.mov
-- 10:20
--
-- It simply will seek to a random location in the file and play a random
-- amount of the remaining time in the clip.
function probe()
-- seed the random number since other VLC lua plugins don''t seem to
math.randomseed(os.time())
-- tell VLC we will handle anything ending in ".randomseek"
return string.match(vlc.path, ".randomseek$")
end
function parse()
-- VLC expects us to return a list of items, each item itself a list
-- of properties
playlist = {}
-- I''ll assume a well formed input file but obviously you should do
-- error checking if writing something real
while true do
playlist_item = {}
line = vlc.readline()
if line == nil then
break --error handling goes here
end
playlist_item.path = line
line = vlc.readline()
if line == nil then
break --error handling goes here
end
for _min, _sec in string.gmatch( line, "(%d*):(%d*)" )
do
duration = 60 * _min + _sec
end
-- math.random with integer argument returns an integer between
-- one and the number passed in inclusive, VLC uses zero based times
start_time = math.random(duration) - 1
stop_time = math.random(start_time, duration - 1)
-- give the viewer a hint of how long the clip will take
playlist_item.duration = stop_time - start_time
-- a playlist item has another list inside of it of options
playlist_item.options = {}
table.insert(playlist_item.options, "start-time="..tostring(start_time))
table.insert(playlist_item.options, "stop-time="..tostring(stop_time))
table.insert(playlist_item.options, "fullscreen")
-- add the item to the playlist
table.insert( playlist, playlist_item )
end
return playlist
end
Esto parece que debería ser simple, pero aquí voy con las manos vacías. Estoy tratando de hacer un script VLC simple que compruebe si el botón "aleatorio" está activado, y si es así, cuando salta a un archivo aleatorio, en lugar de comenzar en tiempo = 0, comienza en un tiempo aleatorio.
Hasta ahora, me parece que debería ser un script de lista de reproducción y puedo obtener la duración del objeto de la lista de reproducción, pero en esta página de documentación o en Google, parece que no puedo encontrar una manera de saltar a un momento específico desde dentro de la escritura Lua. ¿Alguien tiene más experiencia en el control de la reproducción de VLC con Lua?
Hay un método de búsqueda en common.lua .
Ejemplos de uso:
require ''common''
common.seek(123) -- seeks to 02m03s
common.seek("50%") -- seeks to middle of video
Solo usa esto:
vlc.var.set(input, "time", time)