字幕整理脚本

从看过的电影、美剧里学英语是一件很棒的事。因为你曾经被带入过那个场景,曾经和主角一同喜怒哀乐。如果能将电影里的中英文对白整理出来,对做笔记和搜索回顾将大有帮助。

我们可以从网上(例如射手网)下载视频的中英文字幕,需要是 .srt 格式的。它实际上是一个文本文件,内容类似如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
13
00:04:42,050 --> 00:04:45,010
{\an2}{\pos(212,240)}第三季 第一集

14
00:01:56,000 --> 00:01:56,990

Hey, Pop.

15
00:01:56,880 --> 00:02:04,020
{\an8}凯文·安德伍德

16
00:01:59,750 --> 00:02:01,510
好久不见啊
Been a while, hasn't it?

我们希望将它整理成这样的格式:

1
2
3
4
5
6
7
8
9
第三季  第一集


Hey, Pop.

凯文·安德伍德

好久不见啊
Been a while, hasn't it?

这个任务可以用 PowerShell + 正则表达式轻松搞定。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if (!(Test-Path dst)) {
md dst | Out-Null
}

Get-ChildItem src\*.srt | ForEach-Object {
$srcFile = $_
Write-Output "Processing $($srcFile.Name)"
$dstFile = (Join-Path 'dst' $srcFile.BaseName) + '.txt'
Get-Content $srcFile | ForEach-Object {
$line = $_
if ($line -cmatch '\A\d+\z') { return }
if ($line -cmatch '\d\d:\d\d:\d\d,\d\d\d --> \d\d:\d\d:\d\d,\d\d\d') { return }
$line = $line -creplace '\s*\{\\.*?\}\s*', ''
return $line
} | Out-File $dstFile
}

只需要将字幕源文件放在src目录下,运行脚本,就可以在dst目录下得到期望的文本文件。执行效果如下:

文件目录如下:

您也可以在这里下载完整的脚本。

评论