技術文件‎ > ‎

字幕檔案規則

為令人員易於除錯以及利於理解方便,廣論App使用SRT(SubRip)檔案格式作為字幕格式,此格式可以簡單的使用文字編輯器開啟、編輯與除錯,時間解析度可達千分之一秒,此字幕檔案可相容於其他支援SRT格式的播放器。

字幕檔案位於[廣論App資源中心 -> subtitle],在廣論App下載字幕時,會從該位置下載到手機/平板中。字幕在手機/平板中存放的位置為[Android -> data -> eyes.blue -> lamrimreader -> files -> lamrimreader -> Subtitle],您或許需要先取得最高使用者權限(Root)才能存取該位置,請注意字幕檔案在廣論App的命名規則為:

001A.SRT
002A.SRT
....
160B.SRT

大小寫必須吻合廣論App才能正確使用該檔案。


字幕編碼規則
        廣論App的字幕檔案由字幕編輯器所輸出,字幕文字為最簡單的文字輸出,不包含字形標籤(如<i>Elephant's Dream</i>, <font color="cyan">Some text</font>等),以001A.SRT為例,開頭內容如下:


1
00:00:00,217 --> 00:00:08,162
南無本師釋迦牟尼佛;

2
00:00:08,163 --> 00:00:16,053
南無本師釋迦牟尼佛;

3
00:00:16,054 --> 00:00:24,216
南無本師釋迦牟尼佛;

4
00:00:24,217 --> 00:00:30,547
無上甚深微妙法,

5
00:00:30,548 --> 00:00:36,642
百千萬劫難遭遇,

6
00:00:36,643 --> 00:00:42,701
我今見聞得受持,

7
00:00:42,702 --> 00:00:48,597
願解如來真實義。

8
00:00:48,598 --> 00:00:57,976
今天我們開始修習《菩提道次第廣論》,

9
00:00:57,977 --> 00:01:03,237
這是宗喀巴大師所造的。


字幕編輯器的輸出規則如下所列,請注意下列每一筆資訊皆以換行結尾。
  1. 輸出數字序列:由1~n的數字序列,除第一筆固定為1外,其餘為上一筆數字+1。
  2. 輸出時間資訊:[該字幕開始時間]+" --> "+[下一筆字幕開始時間-0.001]
  3. 輸出字幕文字:此文字僅單行輸出。
  4. 輸出空白行:即每一筆字幕資訊的間格記號。
        字幕的文字編碼格式為UTF-8,若使用不支援Unicode Code的文字編輯器開啟會變成亂碼,若將此字幕檔案應用於其他播放器中,必須先檢查該播放器所支援的字幕編碼是否為UTF-8,已知如KMPlayer不支援UTF-8格式字幕編碼,要在這類的播放器使用必須先將編碼重新輸出為Big5或GB編碼。

字幕解碼規則
        由上述編碼規則可瞭解,除(1)數字序列外,有用的資訊為字幕開始時間、結束時間與字幕文字三項,廣論App在解碼字幕檔案時,不使用數字序列,僅取字幕開始時間結束時間字幕文字三項資訊,儲存於資料結構SubtitleElement中,依序將整個檔案的資料取出後取出後存入陣列中(SubtitleElement的陣列),字幕在陣列中的位置即為數字序列相關的資訊。

        在程式中,字幕檔案的解讀由 eyes.blue.Util.loadSubtitle 所處理,有興趣可研讀該程式碼以瞭解詳細執行過程。

        使用者與廣論App的互動過程中,或許會拉動進度條或點選上一句/下一句的按鈕,當發生這類的事件時,廣論App必須根據進度條上面的時間去SubtitleElement陣列中查找相對應的字幕來顯示,這類以時間去查找相對應的字幕的方法,末學使用二元搜尋法(Binary Search)來降低搜尋時間,該函式位於eyes.blue.Util.subtitleBSearch中,研讀前您可能需要先了解Divide and Conquer演算法。