用Python處理字幕文件


下了部老電影,找到了相關的中英文字幕,奇怪的是,英文字幕能正常現實,中文字幕卻不可以,我一度以為是Linux下播放器編碼的問題,但是怎么更改設置都無效,而我以前在看其他電影時,中文字幕是正常的。所以,懷疑是字幕文件的問題,打開中英文字幕文件對比:

  • 英文
5
00:02:53,500 --> 00:02:54,700
Police. Hello?

6
00:03:03,800 --> 00:03:08,000
EVERYONE IS THE MOON

7
00:03:10,100 --> 00:03:13,700
I CAN'T HANG ON ANYMORE
  • 中文

5

00:02:53,500 - - > 00:02:54,700

警察。喂?

6

00:03:03,800 - - > 00:03:08,000

每個人都是月亮

7

00:03:10,100 - - > 00:03:13,700

我不能堅持下去了

可以看出,中文字幕的格式有問題,所以我決定用Python的正則表達式修改一下。

代碼

import re

with open('./Minazuki 1999.srt', encoding='utf-8') as file:
    srt = file.read()

# 第一步多余換行
srt = srt.replace('\n\n', '\n')
# 需要在序號前面補上換行
srt = re.sub(r'\n(\d{1,3})\n', r'\n\n\1\n', srt)
# 修正其他字符錯誤
srt = srt.replace('- - ', '--')

with open('./Minazuki 1999_new.srt', 'w', encoding='utf-8') as file:
    file.write(srt)
  • 輸出的字幕文件:
5
00:02:53,500 --> 00:02:54,700
警察。喂?

6
00:03:03,800 --> 00:03:08,000
每個人都是月亮

7
00:03:10,100 --> 00:03:13,700
我不能堅持下去了

已經可以正常顯示了。

學到的知識點記錄

參考了這篇博客, 正則表達式30分鍾入門教程
可是使用()來對正則模式匹配的內容進行編號,在后續中用數字來\數字使用對應的內容,如

srt = re.sub(r'\n(\d{1,3})\n', r'\n\n\1\n', srt)

其中,(\d{1,3})表示的內容,在后面用\1來訪問,\0表示整個正則表達式。除了編號,也可以命名,例如(?<Numers>\d{1,3}),在后面可以用\k<Numbers>來訪問,不過該方法在我在Python中未成功使用,有待進一步調查。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM