【Python 軍火庫🧨 - PySubs2】 字幕檔提取工具的好幫手(ass、ssa、srt、vtt…)

2023/08/20閱讀時間約 5 分鐘
圖片來源

圖片來源

關於字幕檔我們常常會看到「.srt」、「.ass」、「.vtt」…等影片的字幕格式, 但你知道嗎? 這些字幕檔是很重要的一個寶貴資訊, 可以從中對段落的長度、文字進行提取, 此時就需要一個強大的工具來幫我們解析一下字幕檔, 就讓我們來看看怎麼用吧!

安裝

pip install pysubs2

基礎用法

他的用法除了可以直接用終端命令之外, 也可以在Python開發時進行引入並操作相關的API進行更細緻的處理。

終端命令的用法:

# 轉換.ass檔至.srt檔
pysubs2 --to srt *.ass

引入Python的用法

import pysubs2

# 載入字幕
subs = pysubs2.load("my_subtitles.ass", encoding="utf-8")

# 處理字幕
subs.shift(s=2.5)

for line in subs:
# 對每一行的文字內容進行加工
line.text = "{\\\\be1}" + line.text

# 將處理結果儲存成新的檔案
subs.save("my_subtitles_edited.ass")

鳥瞰一下字幕與段落結構

為什麼只介紹這兩個部份呢? 因為基本上我們較常從這兩個類別進行異動, 無非就是更改整個字幕檔的樣式或者是對每一句進行裁切之類的加工程序。

這一個步驟可以幫我們了解一下套件的設計, 透過結構上的了解, 清楚的拆解字幕與片段的部份, 我們只要對於這兩個結構, 就能夠很容易的處理各種字幕內容。

結構上我們大致上拆成兩塊來看, 一塊是整個字幕結構, 另一塊是每個段落結構。

圖片來源

圖片來源


SSAFile

class SSAFile {
- events: List[SSAEvent] = [] #: :class:`SSAEvent` 實例的列表,即單獨的字幕。
- styles: Dict[str, SSAStyle] = {"Default": SSAStyle.DEFAULT_STYLE.copy()} #: :class:`SSAStyle` 實例的字典。
- info: Dict[str, str] = self.DEFAULT_INFO.copy() #: 包含腳本元數據的字典,即 ``[Script Info]``
- aegisub_project: Dict[str, str] = {} #: 包含 Aegisub 專案的字典,即 ``[Aegisub Project Garbage]``
- fonts_opaque: Dict[str, Any] = {} #: 包含嵌入字體的字典,即 ``[Fonts]``
- graphics_opaque: Dict[str, Any] = {} #: 包含嵌入圖像的字典,即 ``[Graphics]``
- fps: Optional[float] = None #: 讀取文件時使用的幀率(如適用)。
- format: Optional[str] = None #: 原始字幕文件的格式(如適用),例如 ``"srt"``
}

SSAEvent

class SSAEvent {
- start: int = 0 #: 字幕的開始時間(毫秒)
- end: int = 10000 #: 字幕的結束時間(毫秒)
- text: str = "" #: 字幕的文本(包含 SubStation 格式標記)
- marked: bool = False #: (僅限 SSA 格式)
- layer: int = 0 #: 層級編號,0 為最低層級(僅限 ASS 格式)
- style: str = "Default" #: 樣式名稱
- name: str = "" #: 演員名稱
- marginl: int = 0 #: 左邊距
- marginr: int = 0 #: 右邊距
- marginv: int = 0 #: 垂直邊距
- effect: str = "" #: 行效果
- type: str = "Dialogue" #: 行類型(對話/註釋)
}

實際使用並說明如下:

# SSAFile
subs = pysubs2.load("my_subtitles.ass", encoding="utf-8")

# event: SSAEvent
for event in subs:
# 每個段落的內容
print(event.start)
print(event.end)
print(event.text)
print(event...)

我們可以用來做什麼?

圖片來源

圖片來源


結語

這次就針對Python的字幕處理套件做一個簡單的介紹,其實要如何使用工具是其次,重點是我們可以用它來做什麼? 這提供了幾個方向給你啟發,如果你有任何不一樣的想法,歡迎下方留言互相交流與討論。

喜歡撰寫文章的你,不妨來了解一下:

Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 — 為什麼要加入?

歡迎加入一起練習寫作,賺取知識!

91會員
260內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
留言0
查看全部
發表第一個留言支持創作者!