static void Main(string[] args) { if (args.Length == 0) { Console.WriteLine("请输入要转换的 srt 文件."); return; } var fileName = args[0]; if (!File.Exists(fileName)) { Console.WriteLine("文件不存在"); return; } var vtt = VTTHelper.GetVTTFromFile(fileName); var bilibili = new BilibiliSrtFile(); bilibili.font_size = 0.4; bilibili.font_color = "#FFFFFF"; bilibili.background_alpha = 0.5; bilibili.background_color = "#9C27B0"; bilibili.Stroke = "none"; bilibili.body = new List <BilibiliSrtFile.Battuta>(); foreach (var item in vtt.Lines) { bilibili.body.Add(new BilibiliSrtFile.Battuta { from = item.FromSec, to = item.ToSec, content = item.Text, location = 2, }); } var fi = new FileInfo(fileName); var ex = fi.Extension; var writeFileName = fileName.Replace(ex, ".bcc"); var json = JsonConvert.SerializeObject(bilibili, Formatting.Indented); var bytes = Encoding.UTF8.GetBytes(json); File.WriteAllBytes(writeFileName, bytes); }
/// <summary> /// youtube字幕重建功能 /// 会按照行文的段落,重新对字幕做重组 /// </summary> /// <param name="args"></param> private static void Main(string[] args) { var path = @"W:\zb\t16"; var file = @"So you want to be a Code Reviewer #3 - Code Review-5D6IAKebZSQ.en.vtt"; // DoFile(Path.Combine(path, file)); //foreach (var fileName in Directory.GetFiles(path, "*.vvt")) //{ //} var fileName = Path.Combine(path, file); if (args.Length > 0) { fileName = args[0]; } Vtt vtt = VTTHelper.GetVTTFromFile(fileName); // 将 vtt 合并到一个厂的列表里,再逐个拆开 vtt = VvtRebuild.Rebuild(vtt); int id = 1; StringBuilder writer = new StringBuilder(); foreach (var item in vtt.Lines) { var srtItem = new Dogvane.Srt.Battuta() { Id = id++, From = item.From, Text = item.Text, To = item.To, }; writer.AppendLine(srtItem.GetData()); writer.AppendLine(); } Console.WriteLine($"id: {id}"); var newFileName = fileName.Replace(".vvt", "") + ".srt"; File.WriteAllText(newFileName, writer.ToString(), Encoding.UTF8); }
/// <summary> /// 上传一个vtt文件 /// </summary> /// <param name="userId"></param> /// <param name="fileName"></param> /// <param name="context"></param> /// <param name="ismerge">是否合并弹幕</param> /// <returns></returns> public SrtFile UploadVttFile(int userId, string fileName, byte[] context, bool ismerge = true) { var saveFile = Path.Combine("upfiles/", userId + "_" + fileName); File.WriteAllBytes(saveFile, context); // 加载vtt文件 var vtt = VTTHelper.GetVTTFromFile(saveFile); var jsonObj = new SrtJsonFile(); if (ismerge) { vtt = VvtRebuild.Rebuild(vtt); } jsonObj.Battutas = ConverVttToSubtitles(vtt.Lines); jsonObj.FileName = fileName; jsonObj.Version = 1; var jsonSaveFile = Path.Combine("jsonfiles/", userId + "_" + fileName + ".json"); File.WriteAllText(jsonSaveFile, JsonConvert.SerializeObject(jsonObj, Formatting.Indented)); var srtItem = new SrtFile() { UserId = userId, LastUpdate = DateTime.Now, UploadTime = DateTime.Now, SourceLocalFileName = saveFile, SrtFileName = fileName, JsonSrtFileName = jsonSaveFile }; using (var db = DbSet.GetDb()) { db.Insert(srtItem); } return(srtItem); }
static void Main(string[] args) { if (args.Length == 0) { Console.WriteLine("请输入要转换的 srt 文件."); return; } var fileName = args[0]; if (!File.Exists(fileName)) { Console.WriteLine("文件不存在"); return; } var vtt = VTTHelper.GetVTTFromFile(fileName); int id = 1; StringBuilder writer = new StringBuilder(); foreach (var item in vtt.Lines) { var srtItem = new Dogvane.Srt.Battuta() { Id = id++, From = item.From, Text = item.Text, To = item.To, }; writer.AppendLine(srtItem.GetData()); writer.AppendLine(); } var newFileName = fileName.Replace(".vvt", "") + ".srt"; File.WriteAllText(newFileName, writer.ToString(), Encoding.UTF8); }