lua vlc

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)