【Win 10 应用开发】加载外部的 srt 字幕
2023-03-20 14:46:43 时间
据说系统内置的多媒体功能支持 srt、 ssa 等字幕,老周测试过几种格式的字幕均能加载。
SRT 字幕是最简单的字幕结构,甚至你用记事本都能做出来,就是分为几行来写。
第一行是字幕的编号,应该是从1开始的,反正工具生成的SRT都是从1开始编号;
第二行是字幕的开始时间和结束时间,中间用一个 “-->”来分隔;
第三行是字幕内容。
比如这样:
18 00:03:37,933 --> 00:03:45,366 時而憑風遨遊,時而髙談怪論 19 00:03:45,366 --> 00:03:45,599 20 00:03:45,600 --> 00:03:49,800 來往於仙山飄渺之間
编号为19的字幕是空白,所以第三行没有内容。
好,下面就说说加载外部SRT字幕的方法。
第一步:创建MediaSource,然后把这个MediaSource实例与MediaElement控件关联,这样就可以在界面上播放。
FileOpenPicker picker = new FileOpenPicker(); picker.FileTypeFilter.Add(".mkv"); picker.FileTypeFilter.Add(".mp4"); StorageFile file = await picker.PickSingleFileAsync(); if (file != null) { MediaSource ms = MediaSource.CreateFromStorageFile(file); me.Tag = ms; me.SetPlaybackSource(ms); }
第二步,加载字幕文件,然后创建TimedTextSource对象,再把它加入到MediaSource.ExternalTimedTextSources属性中,这个属性是一个列表,类型为TimedTextSource。每加入一个TimedTextSource对象就多一个字幕轨道。
MediaSource mdsrc = me.Tag as MediaSource; FileOpenPicker picker = new FileOpenPicker(); picker.FileTypeFilter.Add(".srt"); StorageFile srtfile = await picker.PickSingleFileAsync(); if (srtfile != null) { IRandomAccessStream stream = await srtfile.OpenReadAsync(); TimedTextSource txtsrc = TimedTextSource.CreateFromStream(stream); mdsrc.ExternalTimedTextSources.Clear(); mdsrc.ExternalTimedTextSources.Add(txtsrc); }
这样就完成了。如果视频文件有内置字幕,方法也一样,只是在创建TimedTextSource对象时指定的是视频文件本身,如果是外部字幕,就指定字幕文件。
运行应用程序,先打开视频播放,然后选择字幕文件。当添加了有效的字幕文件后,MediaElement控件的控制条中会出现一个打开字幕的按钮。如图。
然后,点击这个按钮就可以选择加载的字幕,或者关闭字幕。
最后,在视频中就能显示字幕了。
好了,老周近两天严重感冒了,现在稍为好转,就顺便写一写博文。
相关文章
- 金融服务领域的大数据:即时分析
- 影响大数据、机器学习和人工智能未来发展的8个因素
- 从0开始构建一个属于你自己的PHP框架
- 如何将Hadoop集成到工作流程中?这6个优秀实践必看
- SEO公司使用大数据优化其模型的5种方法
- 关于Web Workers你需要了解的七件事
- 深入理解HTTPS原理、过程与实践
- 增强分析:数据和分析的未来
- PHP协程实现过程详解
- AI专家:大数据知识图谱——实战经验总结
- 关于PHP的错误机制总结
- 利用数据分析量化协同过滤算法的两大常见难题
- 怎么做大数据工作流调度系统?大厂架构师一语点破!
- 2019大数据处理必备的十大工具,从Linux到架构师必修
- OpenCV中的KMeans算法介绍与应用
- 教大家如果搭建一套phpstorm+wamp+xdebug调试PHP的环境
- CentOS下三种PHP拓展安装方法
- Go语言HTTP Server源码分析
- Go语言HTTP Server源码分析
- 2017年4月编程语言排行榜:Hack首次进入前五十