在数字化内容出海的浪潮下,处理双语视频字幕成了很多技术人和创作者的日常。在此之前,我通常使用一套处理中文文本的脚本来做字幕排版。但当业务线扩展,需要大批量处理纯英文长文本(如 40-80 分钟的长篇叙事视频)时,原有的中文逻辑直接“水土不服”了。
英文文本有着截然不同的排版规则:不仅要考虑单词不能被生硬截断,还要根据逗号、句号等标点符号进行优雅的逻辑断句。今天,分享一段我最近改造并真正在生产环境中使用的 PowerShell 自动化排版脚本。
一、核心痛点:为什么不用现成的软件?
市面上确实有很多字幕软件,但面对长达几万字的原始英文文案时,大部分软件的“自动换行”都极其僵硬,往往会在一个长单词的中间直接劈开,或者忽略了语意停顿(比如在一个从句的逗号前换行),导致最终呈现的视觉效果非常糟糕,严重影响观看体验。
我们需要的是一个能**“像人类一样理解标点符号”**的断句工具。
二、PowerShell 脚本重构思路
原始的中文脚本可能只需要按照固定字数(比如每行 20 个汉字)进行切分。但对于英文,我们的逻辑必须升级为:
- 优先级断句:优先识别
., ?, ! 结尾的完整句子并强制换行。
- 次级断句:识别
,(逗号)等从句停顿,如果当前行字符数超过某个阈值,则在逗号后换行。
- 按词断行 (Word-wrapping):如果一句话极长且没有标点,必须以“空格”为界限进行换行,绝对不能切碎单词。
三、核心代码实战
以下是经过修改和优化的 PowerShell 核心逻辑片段。这段代码能够精准读取原始文本,处理英文标点,并输出符合要求的标准化字幕格式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| $inputFile = "C:\SubtitleProcess\raw_english_script.txt" $outputFile = "C:\SubtitleProcess\formatted_subtitles.txt"
$text = Get-Content -Path $inputFile -Encoding UTF8
$formattedText = "" $lineLengthLimit = 45
foreach ($line in $text) { $line = $line -replace '([.?!])\s+', "`$1`n" $splitLines = $line -split "`n" foreach ($subLine in $splitLines) { $words = $subLine -split ' ' $currentLine = "" foreach ($word in $words) { if (($currentLine.Length + $word.Length + 1) -le $lineLengthLimit) { if ($currentLine -eq "") { $currentLine = $word } else { $currentLine += " " + $word } } else { $formattedText += $currentLine + "`n" $currentLine = $word } if ($word -match ',$' -and $currentLine.Length -gt 25) { $formattedText += $currentLine + "`n" $currentLine = "" } } if ($currentLine -ne "") { $formattedText += $currentLine + "`n" } } }
$formattedText | Out-File -FilePath $outputFile -Encoding UTF8
Write-Host "✅ 英文字幕智能断句与排版已完成!" -ForegroundColor Green
|
总结
对于技术人员来说,面对业务逻辑的变化(从中文文本处理转向英文逻辑),迅速用代码实现工具的迭代,是一种刻在骨子里的本能。借助这几十行 PowerShell 脚本,曾经需要人工校对几个小时的字幕排版工作,现在只需不到一秒钟即可完美生成。