【Win 10 应用开发】加载外部的 srt 字幕

作者: 李禾

更新时间:2022-03-26 13:11:39

2855 阅读

据说系统内置的多媒体功能支持 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控件的控制条中会出现一个打开字幕的按钮。如图。

 

然后,点击这个按钮就可以选择加载的字幕,或者关闭字幕。

 

最后,在视频中就能显示字幕了。

 

好了,老周近两天严重感冒了,现在稍为好转,就顺便写一写博文。

示例代码下载。

 

版权声明:本文著作权归作者【李禾 】所有,不代表本网站立场。

侵权请联系:root_email@163.com