在 VLC/Lua 中构建播放列表以单独控制每个媒体文件的播放选项
Building a playlist to control playback options for each media file individually in VLC/Lua
我有一个包含视频文件的播放列表。对于每个播放列表项目,我想使用 Lua 脚本在 VLC 中控制每个曲目是否应该 "repeat"、"play-and-stop" 等的播放列表模式。
file:///data/video1.mp4,repeat
file:///data/video2.mp4,play-and-stop
目标是某些视频轨道应无限重复,直到用户手动前进到下一轨道。播放列表中的其他曲目应该播放一次然后前进到下一首曲目,或者 play-and-stop
并等待用户交互后再开始播放。
我目前有以下代码改编自 , however I'm unable to apply the playlist options 分别适用于每个曲目(选项适用于整个播放列表)。有什么办法可以扩展我的脚本来实现这个目标吗?
function probe()
return string.match(vlc.path, "%.myplaylist$")
end
function parse()
playlist = {}
while true do
playlist_item = {}
line = vlc.readline()
if line == nil then
break
-- parse playlist line into two tokens splitting on comma
values = {}
i=0
for word in string.gmatch(line, '([^,]+)') do
values[i]=word
i=i+1
end
playlist_item.path = values[0]
playback_mode = values[1]
playlist_item.options = {}
table.insert(playlist_item.options, "fullscreen")
table.insert(playlist_item.options, playback_mode)
-- add the item to the playlist
table.insert( playlist, playlist_item )
end
return playlist
end
在每个轨道基础上添加 "video options" to playlist_item.options
is working, but adding "playlist options" 不会。我不确定如何继续,因为我只能 return 整个播放列表。
给定一个自定义播放列表
file:///data/video1.mp4,repeat
file:///data/video2.mp4,play-once
我通过将 repeat/play-once 信息添加到曲目元数据来完成上述原始问题中的播放列表脚本。
playlist_item.meta = { ["Playback mode"] = playback_mode }
最后一步是创建一个扩展(类似于 Song Tracker 扩展)来监听 input_changed
事件并使用 "Playback mode" 轨道元数据来切换 vlc.playlist.repeat_()
相应地。
function activate()
update_playback_mode()
end
function input_changed()
update_playback_mode()
end
function update_playback_mode()
if vlc.input.is_playing() then
local item = vlc.item or vlc.input.item()
if item then
local meta = item:metas()
if meta then
local repeat_track = meta["Playback mode"]
if repeat_track == nil then
repeat_track = false
elseif string.lower(repeat_track) == "repeat" then
repeat_track = true
else
repeat_track = false
end
local player_mode = vlc.playlist.repeat_()
-- toggle playlist.repeat_() as required
if player_mode and not repeat_track then
vlc.playlist.repeat_()
elseif not player_mode and repeat_track then
vlc.playlist.repeat_()
end
return true
end
end
如果您有兴趣,可以通过在 VLC 中创建播放列表并将其保存为 XSPF 文件来解决重复问题。然后你需要用记事本编辑文件并将其添加到你想要重复的曲目的扩展标签中:
<vlc:option>input-repeat=9999</vlc:option>
示例:
<track>
<location>file:///C:/Users/Notebook/Desktop/17-LOOP.mp4</location>
<duration>10048</duration>
<extension application="http://www.videolan.org/vlc/playlist/0">
<vlc:id>1</vlc:id>
<vlc:option>input-repeat=9999</vlc:option>
</extension>
</track>
执行此操作后,此文件在播放列表中播放的那一刻将重复 9999 次(如果文件太短,您可以更改此设置)或直到您按下一步。然后播放列表将继续。
我有一个包含视频文件的播放列表。对于每个播放列表项目,我想使用 Lua 脚本在 VLC 中控制每个曲目是否应该 "repeat"、"play-and-stop" 等的播放列表模式。
file:///data/video1.mp4,repeat
file:///data/video2.mp4,play-and-stop
目标是某些视频轨道应无限重复,直到用户手动前进到下一轨道。播放列表中的其他曲目应该播放一次然后前进到下一首曲目,或者 play-and-stop
并等待用户交互后再开始播放。
我目前有以下代码改编自
function probe()
return string.match(vlc.path, "%.myplaylist$")
end
function parse()
playlist = {}
while true do
playlist_item = {}
line = vlc.readline()
if line == nil then
break
-- parse playlist line into two tokens splitting on comma
values = {}
i=0
for word in string.gmatch(line, '([^,]+)') do
values[i]=word
i=i+1
end
playlist_item.path = values[0]
playback_mode = values[1]
playlist_item.options = {}
table.insert(playlist_item.options, "fullscreen")
table.insert(playlist_item.options, playback_mode)
-- add the item to the playlist
table.insert( playlist, playlist_item )
end
return playlist
end
在每个轨道基础上添加 "video options" to playlist_item.options
is working, but adding "playlist options" 不会。我不确定如何继续,因为我只能 return 整个播放列表。
给定一个自定义播放列表
file:///data/video1.mp4,repeat
file:///data/video2.mp4,play-once
我通过将 repeat/play-once 信息添加到曲目元数据来完成上述原始问题中的播放列表脚本。
playlist_item.meta = { ["Playback mode"] = playback_mode }
最后一步是创建一个扩展(类似于 Song Tracker 扩展)来监听 input_changed
事件并使用 "Playback mode" 轨道元数据来切换 vlc.playlist.repeat_()
相应地。
function activate()
update_playback_mode()
end
function input_changed()
update_playback_mode()
end
function update_playback_mode()
if vlc.input.is_playing() then
local item = vlc.item or vlc.input.item()
if item then
local meta = item:metas()
if meta then
local repeat_track = meta["Playback mode"]
if repeat_track == nil then
repeat_track = false
elseif string.lower(repeat_track) == "repeat" then
repeat_track = true
else
repeat_track = false
end
local player_mode = vlc.playlist.repeat_()
-- toggle playlist.repeat_() as required
if player_mode and not repeat_track then
vlc.playlist.repeat_()
elseif not player_mode and repeat_track then
vlc.playlist.repeat_()
end
return true
end
end
如果您有兴趣,可以通过在 VLC 中创建播放列表并将其保存为 XSPF 文件来解决重复问题。然后你需要用记事本编辑文件并将其添加到你想要重复的曲目的扩展标签中:
<vlc:option>input-repeat=9999</vlc:option>
示例:
<track>
<location>file:///C:/Users/Notebook/Desktop/17-LOOP.mp4</location>
<duration>10048</duration>
<extension application="http://www.videolan.org/vlc/playlist/0">
<vlc:id>1</vlc:id>
<vlc:option>input-repeat=9999</vlc:option>
</extension>
</track>
执行此操作后,此文件在播放列表中播放的那一刻将重复 9999 次(如果文件太短,您可以更改此设置)或直到您按下一步。然后播放列表将继续。