前言

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

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

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

需求

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

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

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

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

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

  

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

  

  

  

实现

  1. using System.IO;
  2.  
  3. namespace TxtToSrtForVideoOnASP.NET
  4. {
  5. class Program
  6. {
  7. static void Main(string[] args)
  8. {
  9. //读取与输出文件
  10. string path = @"D:\transcript.txt";
  11. string subPath = @"D:\sub.srt";
  12.  
  13. using (StreamWriter sw=new StreamWriter(subPath))
  14. {
  15. string[] allLine = File.ReadAllLines(path);
  16. string startTime="";
  17. string endTime = "";
  18. for (int i = ; i < allLine.Count(); i++)
  19. {
  20. //读取每行前8个字符作为每条字幕开始时间
  21. startTime = AdjustTime(allLine[i].Substring(, ), true);
  22.  
  23. //读取下一行前8个字符作为每条字幕结束时间
  24. if (i == (allLine.Count()-))
  25. //视频结束时间
  26. endTime = "00:19:24,00";
  27. else
  28. endTime= AdjustTime(allLine[i+].Substring(, ), false);
  29.  
  30. //输出标准srt格式字幕
  31. sw.WriteLine((i + ) + "\r\n" + startTime + " --> " + endTime + "\r\n" + allLine[i].Substring());
  32. }
  33. }
  34. Console.WriteLine("输出完毕");
  35. Console.ReadKey();
  36. }
  37.  
  38. /// <summary>
  39. /// 为srt文件提供完整的时间戳格式,加入少量延迟使字幕时间更准确
  40. /// </summary>
  41. /// <param name="Time">从transcript.txt中读取的时间戳</param>
  42. /// <param name="start">Time是否为开始时间</param>
  43. /// <returns></returns>
  44. public static string AdjustTime(string Time,bool start)
  45. {
  46. if (start)
  47. return (TimeSpan.Parse(Time) + TimeSpan.FromSeconds(0.55)).ToString().Substring(,);
  48. else
  49. return (TimeSpan.Parse(Time) + TimeSpan.FromSeconds(0.5)).ToString().Substring(,);
  50. }
  51. }
  52. }

注:

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. The 2013 ACMICPC Asia Regional Chengdu

    还有19天出发北京站,今年北京站的出题方是上交,去年他们出的成都现场的赛题,首先复盘一下. 去年的成都是我经历的第一次现场赛,也是近距离第一次见到了CLJ的真人,最后也是被虐惨了,那时候是声闻大神带着 ...

  2. html5 WebSocket 与 PHP socket 聊天室原理

    html js <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  3. iOS开发概述UIkit动力学,讲述UIKit的Dynamic特性,UIkit动力学是UIkit框架中模拟真实世界的一些特性。

    转发:http://my.oschina.net/u/1378445/blog/335014 iOS UIKit动力学 Dynamics UIAttachmentBehavior 实现iMessage ...

  4. 手机web——自适应网页设计(html/css控制) - 51CTO.COM

    body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...

  5. ue4中窗口打开web地址

    首先打开项目,设置,widgets,启用webbroswer 新建一个蓝图, 在控件栏里就可以找到添加webbroswer 设置initial url就可以打开网页了, 项目中还用到获取界面参数,与界 ...

  6. IP头,TCP头,UDP头,MAC帧头定义(转)

    源:IP头,TCP头,UDP头,MAC帧头定义 一.MAC帧头定义 /*数据帧定义,头14个字节,尾4个字节*/ typedef struct _MAC_FRAME_HEADER { ]; //目的m ...

  7. bzoj-3450 Easy概率DP 【数学期望】

    Description 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:(我们来简化一下这个游戏的规则有n次点击要做,成功了就是o,失败了就是x,分数是按comb计算的,连续a ...

  8. webstrom 编码

    设置文件保存格式: webstrom的右下角选择你需要的编码

  9. js获取前之前或之后的日期

    function fun_date(aa){ var date1 = new Date(), time1=date1.getFullYear()+"-"+(date1.getMon ...

  10. php包管理工具最基本的一些问题

    windows下的 1.先安装windows下的set-up程序 点击一步步的, cmd进入,输入composer能成功显示一幅图说明安装成功 2.在下载,https://getcomposer.or ...