VB.NET如何转换SRT字幕格式、识别换行并写入文本文件
VB.NET 实现SRT字幕格式转换方案
实现逻辑说明
SRT字幕的标准结构为空行分隔每个独立字幕块,每个字幕块内固定结构为:序号行、时间轴行、1~N行字幕内容。核心处理逻辑就是先按空行拆分所有字幕块,再逐个块处理内部内容,多行文直接用<br />拼接即可。
完整实现代码
Imports System.IO Imports System.Text Public Class SrtProcessor Public Sub ConvertSrtToCustomFormat(inputPath As String, outputPath As String) ' 读取原始SRT文件内容,可根据实际情况调整编码 Dim srtContent As String = File.ReadAllText(inputPath, Encoding.UTF8) ' 统一换行符格式,避免不同系统换行符差异导致分割错误 srtContent = srtContent.Replace(vbCrLf, vbLf).Replace(vbCr, vbLf) ' 按两个连续换行分割所有独立字幕块,过滤空块 Dim subtitleBlocks As String() = srtContent.Split({vbLf & vbLf}, StringSplitOptions.RemoveEmptyEntries) Dim outputLines As New List(Of String) For Each block In subtitleBlocks ' 拆分单个字幕块内的所有行,过滤无效空行 Dim lines As String() = block.Split({vbLf}, StringSplitOptions.RemoveEmptyEntries) ' 过滤格式错误的无效字幕块 If lines.Length < 3 Then Continue For ' 提取序号 Dim index As String = lines(0).Trim() ' 拆分时间轴为开始、结束时间 Dim timeParts As String() = lines(1).Split({" --> "}, StringSplitOptions.None) If timeParts.Length < 2 Then Continue For Dim startTime As String = timeParts(0).Trim() Dim endTime As String = timeParts(1).Trim() ' 处理多行字幕:取第三行及以后的所有内容,用 <br /> 拼接 Dim contentLines As IEnumerable(Of String) = lines.Skip(2).Select(Function(l) l.Trim()) Dim mergedContent As String = String.Join(" <br /> ", contentLines) ' 拼接为目标格式行 Dim outputLine As String = $"{index} # {startTime} # {endTime} # {mergedContent}" outputLines.Add(outputLine) Next ' 写入输出文件 File.WriteAllLines(outputPath, outputLines, Encoding.UTF8) End Sub End Class
调用示例
Dim processor As New SrtProcessor() ' 替换为你自己的输入、输出文件路径 processor.ConvertSrtToCustomFormat("D:\test\input.srt", "D:\test\output.txt")
内容的提问来源于stack exchange,提问作者vahid Araghi
相关产品推荐
相关产品推荐

