前言

Microsoft Virtual Academy提供了学习ASP.NET的大量视频材料。(注1)

由于视频服务器位于海外,国内浏览速度并不理想,幸好官方提供了视频的下载地址以及英文字幕文件。

然而其提供下载的字幕文件仅为不带时间戳的文本文档,而页面上提供的带时间戳的字幕文件并非标准格式字幕文件,因此用C#制作了一个简单字幕制作程序。

需求

1.在提供的文本中提取字幕开始与结束时间戳。由于官方字幕文档只有开始时间,需要截取下一条字幕开始时间作为结束时间并进行微调;

2.将提取的时间戳扩展为srt标准时间戳格式。官方字幕的时间格式并不符合srt字幕需求的格式;

3.输出标准格式的srt字幕文件。

输出结果如下,依次为原始的字幕文档、准确的srt文件、字幕添加到视频中的效果(注2)

00:00:04	We are back.
00:00:04 And we are almost to the MVC partof ASP.NET Core introduction,
00:00:09 not quite, but almost.
00:00:11 What we're gonna do here is we'regonna give you a little bit...

  

1
00:00:03.00 --> 00:00:04.50
We are back.
2
00:00:04.55 --> 00:00:09.50
And we are almost to the MVC partof ASP.NET Core introduction,
3
00:00:09.55 --> 00:00:11.50
not quite, but almost.
4
00:00:11.55 --> 00:00:13.50
What we're gonna do here is we'regonna give you a little bit...

  

  

  

实现

using System.IO;

namespace TxtToSrtForVideoOnASP.NET
{
class Program
{
static void Main(string[] args)
{
//读取与输出文件
string path = @"D:\transcript.txt";
string subPath = @"D:\sub.srt"; using (StreamWriter sw=new StreamWriter(subPath))
{
string[] allLine = File.ReadAllLines(path);
string startTime="";
string endTime = "";
for (int i = ; i < allLine.Count(); i++)
{
//读取每行前8个字符作为每条字幕开始时间
startTime = AdjustTime(allLine[i].Substring(, ), true); //读取下一行前8个字符作为每条字幕结束时间
if (i == (allLine.Count()-))
//视频结束时间
endTime = "00:19:24,00";
else
endTime= AdjustTime(allLine[i+].Substring(, ), false); //输出标准srt格式字幕
sw.WriteLine((i + ) + "\r\n" + startTime + " --> " + endTime + "\r\n" + allLine[i].Substring());
}
}
Console.WriteLine("输出完毕");
Console.ReadKey();
} /// <summary>
/// 为srt文件提供完整的时间戳格式,加入少量延迟使字幕时间更准确
/// </summary>
/// <param name="Time">从transcript.txt中读取的时间戳</param>
/// <param name="start">Time是否为开始时间</param>
/// <returns></returns>
public static string AdjustTime(string Time,bool start)
{
if (start)
return (TimeSpan.Parse(Time) + TimeSpan.FromSeconds(0.55)).ToString().Substring(,);
else
return (TimeSpan.Parse(Time) + TimeSpan.FromSeconds(0.5)).ToString().Substring(,);
}
}
}

注:

1.https://mva.microsoft.com/en-US/training-courses/introduction-to-asp-net-core-1-0-16841?l=yiobVeE6C_3506218965

2.第一条字幕由于时间较短以及官方时间戳的不完整与第二字幕开始时间一致,需要经过手动微调。可以增加逻辑进行处理,然而只有一条字幕所以在本例没有实现。

[C#]为微软ASP.NET官方教学视频增加字幕的更多相关文章

  1. B站英文教学视频的字幕获取 学习必看!

    前言 最近在B站看一些纯英文的课程,视频课程有的是纯中文字幕的,有的是纯英文字幕的.由于英文的重要性,一份字幕的文档在我们观看后,留着日后粗略再读是很有益处的.但是为了得到这个英文字幕走了许多弯路.最 ...

  2. Unity3D大风暴之入门篇(海量教学视频版)

    智画互动开发团队 编   ISBN 978-7-121-22242-9 2014年2月出版 定价:79.00元 328页 16开 编辑推荐 长达800分钟的高清教学视频,手把手教会初学者 数个开发案例 ...

  3. 马哥linux运维初级+中级+高级 视频教程 教学视频 全套下载(近50G)

    马哥linux运维初级+中级+高级 视频教程 教学视频 全套下载(近50G)目录详情:18_02_ssl协议.openssl及创建私有CA18_03_OpenSSH服务及其相关应用09_01_磁盘及文 ...

  4. 微软ASP.NET技术“乱谈”

    微软ASP.NET技术“乱谈” 2014新年了,顺手写的一点文字,主要谈谈我对当前微软ASP.NET技术的看法,比较随意,大伙儿随便看看吧. 1 当前微软Web平台技术全貌 从2002年发布.NET ...

  5. 微软ASP.NET MVC 学习地址

    微软ASP.NET MVC4.0学习地址:http://www.asp.net/mvc

  6. Cocos2d-x官方在线视频-Cocos2d-x3.2《2048》手游开发揭秘

    Cocoachina 官方在线视频 http://cn.cocos2d-x.org/tutorial/lists?id=58 一.游戏介绍 2048游戏是一款风靡全球的休闲类游戏,通过控制4X4范围内 ...

  7. 微软发布Win10开发者指南视频

    假设你是一个开发者,推荐你看看微软今天推出了一系列视频,标题是Win10开发人员指南,总体长度6时,多达22章内容,介绍很广泛.其实,即使你是编程新手或仅有兴趣,也值得一看. 开发人员Jerry Ni ...

  8. 重温吕鑫MFC教学视频(一)

    重温吕鑫MFC教学视频(一)1. picture控件的使用,可以显示icon和bitmap2. WM_Create窗口的创建3. 创建的销毁消息及区别WM_SYSCOMMAND WM_CLOSE WM ...

  9. vue教学视频(小程序教学视频)

    写在前面 最近通过了解众多面试者的面试情况 总结出以下几点: 对框架的要求越来越高特别是vue和小程序 不会vue和小程序连面试机会都没有 会vue的比不会vue的薪资高4-5k 小程序有发展的趋势 ...

随机推荐

  1. Monitorix 监控 安装配置

    Monitorix 监控 安装配置 1. 首先安装RPMforge RPMforge 是由 Dag 及其他包裝者合作維護的.他們為 CentOS 提供超過 5000 個套件,包括 wine.vlc.m ...

  2. nginx keepalived 主从切换

    注:  LVS + Keepalived  不知道为什么出现一个很郁闷的问题....... ------------------------------------------------------ ...

  3. html的URL参数传值问题

    在URL中的参数传值时,例如:www.nihao.com?id=001 ,= 两边不能有空格,不然PHP在通过$_GET['id']获取时会出现传值为空.

  4. VS2010打开旧版本MFC工程无对话框

    解决方案: 左侧有个"资源视图",打开,里面就能找得到对话框,如果没有资源视图,就在菜单的视图选项里打开资源视图!

  5. libusb开发者指南(转)

    源:libusb开发者指南 译者: gashero 作者: Johannes Erdfelt 日期: 2010-04-17 地址: http://libusb.sourceforge.net/doc/ ...

  6. php连接mysql数据库(新浪云SAE)

    新浪云提供了免费的创建服务器端应用的服务.网址为:https://www.sinacloud.com/ 在上面创建好应用,然后在本地使用记事本编写应用的代码如下: <?php echo &quo ...

  7. Treap初步

    模板题 bzoj3224: Tyvj 1728 普通平衡树 #include <bits/stdc++.h> #define rep(i, a, b) for (int i = a; i ...

  8. yield return 和yield break

    这个还是有点意思,两个都是有返回的意思,但是区别在哪里呢? 1.return 会销毁函数的局部变量,下次调用的时候又会产生新的值 2.yield 当退出函数的时候,变量人然存在,函数下次调用的时候变量 ...

  9. 利用Selenium和Browsermob批量嗅探下载Bilibili网站视频

    Rerence: http://www.liuhao.me/2016/09/20/selenium_browsermob_sniff_bilibili_video/ 日常生活中,用电脑看视频是非常频繁 ...

  10. iOS 更改启动视图

    TMMainViewCtrl *main = [[TMMainViewCtrl alloc] init]; self.window.rootViewController = main;