构建播放列表以在 vlc 中播放媒体文件的选定部分
Building a playlist to play selected portion of media files in vlc
我有一个媒体文件列表(DVD VOB 文件),我只想观看文件列表中的一部分视频。
#! /bin/bash
export SOURCE_DIR=/path/to/dvds/dir
export DVD1=$SOURCE_DIR/dvd1/VIDEO_TS
export DVD2=$SOURCE_DIR/dvd2/VIDEO_TS
export DVD3=$SOURCE_DIR/dvd3/VIDEO_TS
export DVD4=$SOURCE_DIR/dvd4/VIDEO_TS
export FILE1=VTS_01_1.VOB
export FILE2=VTS_01_2.VOB
export FILE3=VTS_01_3.VOB
export FILE4=VTS_01_4.VOB
vlc --play-and-exit --start-time=348 --stop-time=355 $DVD1/$FILE1
vlc --play-and-exit --start-time=574 --stop-time=594 $DVD1/$FILE2
#... and so on ...
我想出了上面的脚本,它启动了一个 vlc 实例并播放了指定 start-time
和 stop-time
中的每个文件。这工作正常,但在每个 vlc --play-and-exit
语句中启动一个新的 vlc 实例,并且文件之间存在明显的中断。
有没有办法将播放列表规则集成到 vlc 中,以便单个实例可以继续播放脚本文件中的所有视频?
可以假定我知道每个文件的 start-time
和 stop-time
值
我能够按照说明完成这项工作 here。 VLC 有 lua 脚本支持。下面是我想出的脚本,它接收一个以 .fixedseek 扩展名结尾的文件。播放列表文件是一个包含三列的 csv 文件,其中包含 file_path_url
、start_time
、stop_time
例如
file:///path/to/dvds/dvd1/VIDEO_TS/VTS_01_3.VOB,348,355
file:///path/to/dvds/dvd2/VIDEO_TS/VTS_01_3.VOB,548,855
... and so on ...
脚本解析文件并播放从start_time
到stop_time
的每一行
-- fixedseek.lua
-- A compiled version of this file (.luac) should be put into the proper VLC playlist parsers directory.
-- In my ubuntu 14.04 vlc installation, it was: /usr/lib/vlc/lua/playlist/
-- For details, refer to:
-- http://wiki.videolan.org/Documentation:Play_HowTo/Building_Lua_Playlist_Scripts
--
-- The play list file format consists of three comma separated parts:
-- (file_path_url, start_time, stop_time)
-- e.g.
-- file:///path/to/dvds/dvd1/VIDEO_TS/VTS_01_3.VOB,348,355
-- The script below opens the file, seeks to start_time and plays until stop_time
-- and then moves on to next file in the playlist
function probe()
-- tell VLC we will handle anything ending in ".fixedseek"
return string.match(vlc.path, "%.fixedseek$")
end
function parse()
-- VLC expects us to return a list of items, each item itself a list
-- of properties
playlist = {}
while true do
playlist_item = {}
line = vlc.readline()
if line == nil then
break
else vlc.msg.info(" Read line: '"..line.."'")
end
-- parse playlist line into three tokens splitting on comma
values = {}
i=0
for word in string.gmatch(line, '([^,]+)') do
values[i]=word
i=i+1
end
vlc.msg.info(values[0])
vlc.msg.info(values[1])
vlc.msg.info(values[2])
playlist_item.path = values[0]
start_time = values[1]
stop_time = values[2]
vlc.msg.info(" Start is '"..tostring(start_time).."'")
vlc.msg.info(" Stop is '"..tostring(stop_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
我有一个媒体文件列表(DVD VOB 文件),我只想观看文件列表中的一部分视频。
#! /bin/bash
export SOURCE_DIR=/path/to/dvds/dir
export DVD1=$SOURCE_DIR/dvd1/VIDEO_TS
export DVD2=$SOURCE_DIR/dvd2/VIDEO_TS
export DVD3=$SOURCE_DIR/dvd3/VIDEO_TS
export DVD4=$SOURCE_DIR/dvd4/VIDEO_TS
export FILE1=VTS_01_1.VOB
export FILE2=VTS_01_2.VOB
export FILE3=VTS_01_3.VOB
export FILE4=VTS_01_4.VOB
vlc --play-and-exit --start-time=348 --stop-time=355 $DVD1/$FILE1
vlc --play-and-exit --start-time=574 --stop-time=594 $DVD1/$FILE2
#... and so on ...
我想出了上面的脚本,它启动了一个 vlc 实例并播放了指定 start-time
和 stop-time
中的每个文件。这工作正常,但在每个 vlc --play-and-exit
语句中启动一个新的 vlc 实例,并且文件之间存在明显的中断。
有没有办法将播放列表规则集成到 vlc 中,以便单个实例可以继续播放脚本文件中的所有视频?
可以假定我知道每个文件的 start-time
和 stop-time
值
我能够按照说明完成这项工作 here。 VLC 有 lua 脚本支持。下面是我想出的脚本,它接收一个以 .fixedseek 扩展名结尾的文件。播放列表文件是一个包含三列的 csv 文件,其中包含 file_path_url
、start_time
、stop_time
例如
file:///path/to/dvds/dvd1/VIDEO_TS/VTS_01_3.VOB,348,355
file:///path/to/dvds/dvd2/VIDEO_TS/VTS_01_3.VOB,548,855
... and so on ...
脚本解析文件并播放从start_time
到stop_time
-- fixedseek.lua
-- A compiled version of this file (.luac) should be put into the proper VLC playlist parsers directory.
-- In my ubuntu 14.04 vlc installation, it was: /usr/lib/vlc/lua/playlist/
-- For details, refer to:
-- http://wiki.videolan.org/Documentation:Play_HowTo/Building_Lua_Playlist_Scripts
--
-- The play list file format consists of three comma separated parts:
-- (file_path_url, start_time, stop_time)
-- e.g.
-- file:///path/to/dvds/dvd1/VIDEO_TS/VTS_01_3.VOB,348,355
-- The script below opens the file, seeks to start_time and plays until stop_time
-- and then moves on to next file in the playlist
function probe()
-- tell VLC we will handle anything ending in ".fixedseek"
return string.match(vlc.path, "%.fixedseek$")
end
function parse()
-- VLC expects us to return a list of items, each item itself a list
-- of properties
playlist = {}
while true do
playlist_item = {}
line = vlc.readline()
if line == nil then
break
else vlc.msg.info(" Read line: '"..line.."'")
end
-- parse playlist line into three tokens splitting on comma
values = {}
i=0
for word in string.gmatch(line, '([^,]+)') do
values[i]=word
i=i+1
end
vlc.msg.info(values[0])
vlc.msg.info(values[1])
vlc.msg.info(values[2])
playlist_item.path = values[0]
start_time = values[1]
stop_time = values[2]
vlc.msg.info(" Start is '"..tostring(start_time).."'")
vlc.msg.info(" Stop is '"..tostring(stop_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