构建一个播放列表,在vlc中播放所选部分的媒体文件。
2015-4-18 12:52:22
收藏:0
阅读:164
评论:1
我有一个媒体文件列表(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
#...等等...
我想出了上面的脚本,它启动一个 vlc 实例并从指定的 start-time 和 stop-time 播放每个文件。这个工作得很好,但在每个 vlc --play和-exit 语句中都会启动一个新的 vlc 实例,并且由此产生的文件之间有明显的中断。
有没有一种方法将播放列表规则集成到 vlc 中,以便单个实例可以继续播放脚本文件中的所有视频?
可以假定我知道每个文件的 start-time 和 stop-time 值。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
我通过遵循这里的指示成功实现了这个功能。 VLC具有lua脚本支持。下面是我编写的脚本,它需要以.fixedseek结尾的文件。播放列表文件是一个包含三列
文件路径_url,开始时间,结束时间的csv文件,例如: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 ……等等……脚本解析文件并从
开始时间到结束时间播放每行。-- fixedseek.lua -- 该文件的已编译版本(.luac)应放入适当的VLC播放列表解析器目录中。 -- 在我的ubuntu 14.04 vlc安装中,它是:/usr/lib/vlc/lua/playlist/ -- 有关详细信息,请查阅: -- http://wiki.videolan.org/Documentation:Play_HowTo/Building_Lua_Playlist_Scripts -- -- 播放列表文件格式由三个逗号分隔的部分组成: -- (file_path_url,start_time,stop_time) -- 例如: -- file:///path/to/dvds/dvd1/VIDEO_TS/VTS_01_3.VOB,348,355 -- 下面的脚本打开文件,寻找开始时间并播放到停止时间 -- 然后继续播放列表中的下一个文件 function probe() -- 告诉VLC我们将处理以“.fixedseek”结尾的所有内容 return string.match(vlc.path, "%.fixedseek$") end function parse() -- VLC期望我们返回一个项目列表,每个项目本身都是一个属性列表 playlist = {} while true do playlist_item = {} line = vlc.readline() if line == nil then break else vlc.msg.info(" 读取行:'"..line.."'") end -- 将播放列表行解析为三个标记,分割逗号 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(" 开始时间是'"..tostring(start_time).."'") vlc.msg.info(" 停止时间是'"..tostring(stop_time).."'") -- 播放列表项具有内部列表,其中包含选项 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") -- 将项目添加到播放列表中 table.insert( playlist, playlist_item ) end return playlist end