此篇為軟體說明文件

教學文件請移駕至 ∮Ω奧米加空間∮»技術文件區»【原創】DVD 字幕轉 srt
https://omega.idv.tw/kdb120/viewthread.php?threadid=4806

IdxSubOcr: An application to OCR Vobsub (idx/sub) files in Chines, Japenese and English.

作者:馬健
郵箱:stronghorse_mj@hotmail.com
主頁:老馬的原創空間

FAQ
使用說明
    一、軟件安裝/刪除
    二、軟件使用
附錄A 關於OCR
附錄B 鳴謝
附錄C 版本更新記錄

FAQ

Q:IdxSubOcr是什麼?
A:這是一個專門用來OCR(光學字符識別)圖像格式字幕的軟件,能夠將idx/sub(DVD)、sup(藍光DVD)格式的字幕轉成utf-8編碼的srt格式,並提供srt格式校對 、字幕翻譯、字幕合併等輔助功能。OCR引擎為微軟Office 2003/2007所帶的Microsoft Office Document Imaging (MODI),支持英文、簡體中文、繁體中文、日文 等21種語言。

Q:為什麼要開發IdxSubOcr?
A:目前已經有一些免費的字幕OCR軟件,英文的可以用Subresync,中文的可以用SubOCR。但是在使用了這些軟件後,我還是決定開發IdxSubOcr,理由如下:

  1. 希望能夠使用方便性方面有所改善。Subresync自帶的OCR引擎的識別率很棒,但是每次都要敲幾十個字母實在太麻煩;而且還不支持中文、日文字符。
  2. SubOCR實在太龐大,而且在某些機器上運行出錯。

Q:IdxSubOcr的識別效果如何?
A:目前能夠比較的相似軟件是Subresync和SubOCR,分別能識別英文和中文:

  1. Subresync有兩種識別方式:使用ocrdll的自動方式和缺省的手工方式。Subresync的識別率明顯優於使用ocrdll的自動方式,與缺省的手工方式大致相同,但是擊鍵次數大大減少,只有在碰到粘連在一起的字符才需要用戶手工辨識,而Subresync需要對每個字母先進行人工辨識。
  2. SubOCR目前支持簡體和繁體中文,繁體中文引擎的識別率優於簡體中文引擎。IdxSubOcr除中文外,還支持日文等21種語言的識別,識別率相當於SubOCR繁體中文引擎的識別率。

Q:IdxSubOcr在使用上有什麼要求?
A:IdxSubOcr的運行環境存在下列限制:

  1. 只能從硬盤上運行,不能從光盤等只讀設備上運行。
  2. 生成的srt文件採用utf-8編碼,某些太過古老的軟件可能不支持。
  3. 使用前需要安裝MODI OCR引擎,該引擎的獨立安裝包可以從我的網盤下載。 網盤地址在主頁的置頂帖中定期更新。

Q:IdxSubOcr收費嗎?
A:IdxSubOcr是一個「友情軟件」(Friendware),用戶在承諾不用於商業目的,也不對文件及其附件進行任何更改的條件下,不需要為使用該軟件負任何費用,最多是在某個討論區看到我發帖子灌水時(我的ID一般是strnghrs),進去捧個人場,作為友情回報;或者在年節時發個email問聲好(所以叫「友情軟件」)。我承諾絕不在程序中暗藏任何商業廣告、木馬,但不承諾為使用IdxSubOcr的後果承擔任何責任。如果您需要將它用於商業目的,或加入您的網站,請與我聯繫,否則保留追究一切責任的權利。

Q:「OCR前先加粗圖像」有什麼用?
A:有些字幕在文字周圍有其他顏色的邊框,在去掉邊框後,文字筆畫會變得太細,影響OCR質量。這時就可以選擇此選項,通過加粗文字筆畫,提高OCR識別率。但如果文字筆畫本來就不細,選擇此選項後可能會造成筆畫粘連,反而降低OCR識別率。
所以此選項沒有記憶功能,您如果覺得正常情況下OCR後的字幕錯別字太多,可以勾選「黑白圖像」功能,實際看一下黑白處理後字幕文字的筆畫是否過細,如果是就勾選此選項重新OCR一遍。

Q:影響OCR識別率的因素有哪些?
A:包括但不限於:

  1. OCR語言選擇錯誤。如字幕明明是繁體中文,選擇OCR語言時卻選擇簡體中文,能出來好的質量才真是有鬼。就我在網上看到的情況,很多抱怨本軟件OCR質量差的人犯的都是這個錯誤,因為不是人人都知道怎麼安裝繁體中文語言包的。
  2. 字幕圖像質量太爛。如果是筆畫太細,可以試試看勾選「OCR前先加粗圖像」。
  3. 中英文混雜,這個沒有辦法,是MODI OCR引擎(底層調用的是清華同方DLL)的事情。
  4. 文字出現斜體或其他花狸狐哨的變體,這個也沒有辦法,同樣是MODI OCR引擎的事情。

使用說明

一、軟件安裝/刪除

本軟件安裝非常簡單:創建一個目錄,用WinZip將下載下來的ZIP包解壓縮到該目錄即可。

本軟件的刪除也很簡單:直接刪除從ZIP包中解壓縮出來的所有文件及運行過程中生成的文件即可。

ZIP包中包括下列文件:

  1. IdxSubOcr.exe。這是軟件的主程序。
  2. IdxSubOcr.htm。本幫助文件。

如果您下載到的ZIP包中還包括其它文件,毫無疑問不是我放進去的,有廣告之嫌疑,請立即刪除。

另外程序運行過程中還會生成以下文件:

  1. IdxSubOcr.ini。這個是參數保存文件,第一次更改參數後生成。退出IdxSubOcr,刪除此文件,再重啟IdxSubOcr,即可恢復缺省參數。

二、軟件使用

(一)OCR字幕、校對

軟件的使用比較簡單:

  1. 點擊「打開字幕文件」按鈕,選擇需要OCR/校對的idx、sup文件。 或直接從資源管理器拖拽idx、sup文件打開。
  2. 在「操作選項」裡,選擇需要OCR/校對的字幕(只有idx/sub才需要選,sup沒得選), 以及究竟是要OCR還是要校對。
    如果是OCR,需要選擇OCR語言及字幕文字顏色。注意這兩個選項直接關係到OCR效果,所以必須認真選擇:語言好說,顏色必須保證文字為實心字,空心字沒法識別。 如果字幕第一行為空,則文字顏色可能不能選擇,可以選擇字幕其他行,直到能夠選擇顏色。如果字幕不同行的顏色不一樣,可以選擇「自動選擇」。OCR識別結束後,自動進入校對模式。
    如果是校對,界面上方顯示字幕圖像,下方顯示文字,用戶可以直接對文字進行編輯。在編輯框中可以使用上下箭頭、PgDn、PgUp滾動。校對完成後,點擊「保存srt文件」按鈕存盤。
  3. 如果有必要,設置「毫秒分隔符」選項,即毫秒用小數點還是句號分隔。
  4. 如果有必要,勾選「OCR前先加粗圖像」,避免因為筆畫過細影響OCR質量。但如果文字筆畫本來就不細,勾選此選項後可能造成筆畫粘連,反而影響質量。

校對過程通常就是眼睛看著中部編輯框中顯示的文字,與上面的字幕圖像做對比,有錯別字就修改,沒錯別字或修改完成就按下箭頭鍵轉到下一條字幕。 按Ctrl+S可以保存字幕。

在校對過程中,可以用「輔助功能」進行輔助,包括:

  • 文本替換。通常用來替換OCR中的一些習慣性錯誤。
  • 英文句首字母大寫。某些英文字幕全是大寫,看起來比較費勁,用這個可以轉成小寫。
  • 繁體轉簡體。繁體中文字幕OCR後的結果是GBK編碼的繁體字,如果覺得麻煩,可以用這個功能轉換成GB編碼的簡體字。
  • 選擇文字顏色。如果選擇「黑白圖像」後顯示出來的字幕圖像是白板一塊,可以用這個重新選擇字幕文字顏色,實在攪不清就選擇「自動選擇」,慢點就慢點。

另外如果想改變已有srt文件中的毫秒分隔符,可以選擇「校對」,然後更改「毫秒分隔符」選項,再存盤即可。

如果字幕較長,一次校對不完,可以點擊「保存工程」(Ctrl+P)存盤,生成一個在srt文件之後加了擴展名.iop的工程文件(ini文件格式),存儲當前字幕編輯信息。下次再進來點擊「調入字幕」按鈕,選擇打開所保存的工程文件,即可自動打開字幕並定位到上次退出時正在編輯的條目。

(二)多語言字幕

在主界面上點擊「多語言」按鈕即可進入多語言界面。主要有以下功能:

  • 字幕翻譯:有些老電影找不到中文字幕,甚至連英文字幕也沒有,只能是先找一個能找到的語言字幕文件,然後用Google翻譯轉成英文,再用百度翻譯轉成中文。這裡面有一個問題:SRT文件不能直接提交給翻譯軟件,因為SRT裡有序號、時間等,不僅佔用翻譯的字符數,而且序號後面容易被翻譯軟件加尾巴。所以做了這麼一個功能,可以按照下列步驟實現字幕翻譯:
  1. 先把需要翻譯的SRT文件從資源管理器拖拽到多語言界面,點擊「導出」按鈕,把SRT文件導出成一個不含序號、時間的文本文件,字幕之間用空行分隔。
  2. 如果是用Google翻譯,可以先建一個空白文本文件,然後同時打開導出的文本文件、空白文本文件,從需要翻譯的文本文件中剪切一段(不超過5000字)貼到Google翻譯網頁,再把翻譯結果貼到新建的空白文件。重複這個過程直到翻譯完整個字幕文件。
  3. 如果是用百度進行英漢互譯,可以把文本文件轉成WORD文件,然後上傳到百度網站進行翻譯,翻譯結果再另存為utf-8編碼的文本文件。
  4. 如果有能力,就人工校對一遍機器翻譯結果,這個過程仍然可以借助百度翻譯等工具。百度翻譯對換行比較敏感,所以有時候把被斷行的句子合併成一行後再提交給百度翻譯,得到的結果可能就會大不一樣。
  5. 搞定譯文的文本文件後,再把原文的SRT文件拖拽到「多語言」主界面,勾選「導入覆蓋」,再把文本文件拖拽到「文本文件」框,點擊「導入」按鈕,這時可以看到時間軸不變,但文字都被替換成了文本文件中的。
  • 字幕合併。有些人比較喜歡中、英文字幕同時顯示,可以顯示成中上英下,也可以是英上中下。但一般的SRT文件都只有一種語言,如果要把兩種語言的SRT合併在一起,例如要把中、英兩種SRT合併成中上英下的SRT,可以按照下列步驟進行操作:
  1. 先把英文SRT拖拽到「多語言」界面,點擊「導出」按鈕,導出成文本文件。
  2. 把中文SRT拖拽到「多語言」界面。
  3. 不要勾選「導入覆蓋」選項。
  4. 把步驟1中導出的英文文本文件拖拽到「文本文件」框,然後點擊「導入」按鈕,把字幕合併到一起。
  5. 點擊「保存」按鈕保存合併後的字幕。

注意:

  1. 在導入時,是按照空行來切分文本文件中的字幕,所以請注意不要隨便更改導出的文本文件中的空行。
  2. 在字幕編輯框中,按PgDn、PgUp鍵可以翻到下一條、前一條字幕。
  3. 點擊「刷新」按鈕,相當於用當前SRT文件內容刷新列表(包括時間軸和文字),然後點擊了「導入」按鈕。

附錄A 關於OCR

OCR一直是我感興趣的一個問題,但是大多數成功的OCR產品都對自己的技術細節秘而不宣。我接觸的第一個開源OCR是gocr,一個在linux下大名鼎鼎的開源項目。從源代碼本身看,這個項目是真正按照OCR引擎的要求開發的,層次分解得很好,OCR該有的操作也都基本具備。但是在真正編譯、運行成功後,我也發現了一些問題:

  1. 源代碼的鏈表操作有問題,會產生內存洩露。一個如此有名的軟件會出現這樣的錯誤,多少有些出乎我的預料。雖然我嘗試著堵上了我能夠找到的漏洞,但是我絕對不敢保證我已經堵上了所有的漏洞。我發現的問題和我的解決方案都已經發給了gocr的作者,希望後續的版本能夠徹底解決這個問題。
  2. gocr原先的識別引擎是基於規則的,沒有任何訓練、學習能力。新的基於特徵數據庫的引擎似乎還不是很成熟,但是值得期待。
  3. 對斜體字的識別率實在令人掃興,但是偏偏現在很多字幕在顯示歌詞的時候喜歡用斜體字。不過這個問題可以通過增加糾偏過濾器來解決。

順著gocr網頁中的鏈接,我還找到了另外一個開源OCR項目——ocrchie。這個項目看起來最有吸引力的地方就是它的引擎具有學習能力,能夠在使用過程中不斷擴充特徵庫。不過在編譯、運行成功後,我也發現了一些問題:

  1. 內存洩露問題比gocr還嚴重,而且幾個鏈表交叉成網狀,想改都不知道從哪改起。
  2. 特徵定義是針對大字號的,小字號時字體變形嚴重,識別率很低,偏偏字幕文件全是小字。這個看一下源代碼中附帶的train.tif其實就該知道了,我居然在花了兩天時間改程序後才發現,有夠笨。

另外在研究Vobsub解碼idx/sub格式的同時,我也順便看了一下Vobsub的OCR部分。從源代碼看,Vobsub支持兩套OCR引擎:一個是Vobsub自帶的,一個是使用ocrdll。我自己的猜測:Vobsub一開始的時候可能用的是ocrdll,後來因為ocrdll開始收費,才開發了自己的OCR引擎。當然這個僅僅是我的猜測,實際情況我也不知道。

國內某些論壇上有帖子說:到SimpleOCR網站下載一個免費版SimpleOCR,安裝後將安裝目錄下的OCRDLL.DLL、DLLTWAIN.DLL、ENGLISH.WDC複製到subresync所在目錄,即可讓Vobsub自動識別,不再需要每次識別時敲字母。我自己的經驗是:

  1. 按照我google的結果,上述說法是從國外一個論壇帖子上翻譯過來的,有點老了。
  2. 以前可能確實可以在SimpleOCR網站上下載到帶OCRDLL.DLL的免費版SimpleOCR,但是如今已經沒有這樣的好事了,就算安裝了SimpleOCR,裡面也不會有OCRDLL.DLL。估計是從商業角度考慮,其作者更改了軟件接口。而且在他的努力下,現在網上已經找不到以前版本的SimpleOCR了,至少我沒找到。
  3. SimpleOCR的前身是wocr,這個是真正的免費軟件,接口也是公開的(Vobsub用的就是這個接口),現在在某些地方還能下載到。我比較過wocr 2.5和SimpleOCR 3.1所帶的ENGLISH.WDC文件,一個字節都不差。
  4. ocrdll不是Vobsub的缺省選項,因此即使將上述3個文件複製到subresync,在使用時還要勾選「Use ocrdll.dll」選項,才能自動識別。至於識別的效果……誰用誰知道!至少我自己不會在這個軟件的自動識別的基礎上進行校對,最多只是在校準idx/sub的時候作為選擇試聽點的參考。

至於Vobsub自帶的OCR引擎,這個可能是最精確的引擎:將需要識別的字符與學習樣本逐「像素」比較,因此識別率不是其它正常OCR可以比的。但是正因為它不是基於特徵的,因此學習的結果沒有辦法保存,只能每次開始識別前先學習一遍,好在英文字母數量有限,但是中文就絕對不能這麼玩 ,所以也不會有誰真的用Vobsub自帶的OCR引擎去識別中文。

由於目的比較明確,因此Vobsub自帶的OCR引擎實現比較簡單,不僅沒有其它引擎的特徵抽取過程,常見的去噪聲點、傾斜校正等功能也沒有,不過這些功能對字幕識別本來也沒有多大用處。

真正讓我對OCR重燃信念,是在我接觸到微軟Office 2003所帶的Microsoft Office Document Imaging (MODI),這大概是目前唯一公開接口、支持多語言的商業級OCR引擎。奇怪的是,這麼好的東西在Office 2007的缺省安裝裡居然沒有,需要手工選擇安裝。

在用MODI開發了幾個OCR相關軟件(Pdg2Pic、TextForever、DjVuToy等)後,我開始嘗試用它來OCR字幕,因為字幕OCR有其特殊性:

  • 字幕中的文字通常都很小,其實Vobsub顯示的時候都是放大顯示,所以才會看到鋸齒。
  • 目前商用的OCR引擎,主要針對的是掃瞄文字,字體尺寸要比字幕的字體尺寸大很多,如果直接使用這樣的OCR引擎,識別率很難提升。

在經過大量的測試、改進後,目前IdxSubOcr在識別中文、日文方面效果不錯(可能與中文、日文的字體變化不大有關),但是識別英文的效果差了點。

由於在OCR引擎方面有一個漫長的摸索過程,因此IdxSubOcr的開發時間也較長:2005年底就開始,直到2008年初才完成。當時因為是年底,所以選了一個聖誕風格的icon,後來為了紀念,也就一直沒換。

附錄B 鳴謝

本軟件開發過程中引用了下列軟件的源代碼,在此對作者表示誠摯的謝意:

附錄C 版本更新記錄

Version 2.06
新增功能:「多語言」界面增加「刷新」按鈕。

Version 2.05
新增功能:多語言,可用於字幕翻譯、字幕合併(中上英下、英上中下)。

Version 2.04
新增功能:保存工程、調入工程,一次校對不完的字幕可以先保存,下次接著校對。
新增功能:按快捷鍵Ctrl+S可以保存字幕。
錯誤修正:在「操作選項」界面中,改變「手工選擇」的顏色,字幕顯示不會發生變化。

Version 2.03
功能增強:加大字幕編輯框的字號,免得看起來太累。

Version 2.02
錯誤修正:如果單條字幕字數太少,可能會造成OCR出錯中斷。

Version 2.01
功能增強:對於日語字幕中的豎排情況進行特殊處理,增強OCR識別能力。
功能增強:對於中日韓(CJK)語言中因為某條字幕字數太少導致識別為空的情況進行特殊處理。
功能修正:某些sup的相同字幕被合併,減少字幕條數。
功能修正:新增的除CJK和英文外的語言OCR準確性略有提高。
功能修正:拉高字幕顯示區域,以免某些豎排的字幕顯示不下。
錯誤修正:校對字幕時,某些字幕編號可能會出現跳躍。
錯誤修正:某些sup文件的時間軸不准。

Version 2.00
新增功能:能夠OCR藍光DVD的sup字幕,又稱HDMV Presentation Graphic Stream subtitles。
功能增強:發行版改為Unicode版,打不開外文文件名的idx、sup情況不會再出現。
功能增強:OCR支持21種語言,同時srt文件編碼從ANSI變成utf-8,以支持多語言OCR結果。
功能增強:在選擇字幕文字顏色時新增「自動選擇」選型,以對付那些顏色變來變去的字幕。
功能增強:對打開文件後的界面進行合併,減少界面切換的麻煩。
功能增強:增強OCR的容錯能力。
功能增強:放大界面字號,適應高分辨率屏幕;放大字幕圖像顯示區域,適應sup高分辨率圖像。
功能增強:在任務欄上顯示OCR進度。
新發行英文版本。

Version 1.15
錯誤修正:在Win 10下以管理員權限運行後,從資源管理器不能拖拽打開文件。而不以管理員權限運行,則在Win 10下OCR內容為空。

Version 1.14
功能增強:支持從資源管理器拖拽打開idx文件,便於使用。

Version 1.13
新增功能:增加「OCR前先加粗處理」選項。此選項使用得當可以提高OCR識別率,使用不當則會降低識別率,請仔細閱讀FAQ部分的相關說明。
功能增強:提高英文OCR的識別準確率。
錯誤修正:遇到某些格式錯誤的字幕文件,會報告「內存不足」。

Version 1.12
錯誤修正:某些中文標點前後會加入空格。

Version 1.11
新增功能:在列表中增加「序號」列。
功能增強:在OCR簡、繁、日字幕時,如果字符間距大於字高的一半,則在字間插入空格。

Version 1.10
新增功能:增加「毫秒分隔符」,允許選擇毫秒分隔符是小數點還是逗號。

Version 1.09
錯誤修正:OCR某些字幕時會中斷退出。

Version 1.08
功能增強:對含無效字符的文件路徑能夠給出提示。

Version 1.07
錯誤修正:如果原始字幕文件有錯,會中斷退出。
錯誤修正:如果原始字幕文件信息有錯,OCR後出現無時間軸的空白行,導致結果文件被截斷。

Version 1.06
功能增強:加強繁簡轉換時的糾錯能力。

Version 1.05
重寫OCR後處理部分,減小文字錯位、錯行的概率。

Version 1.04
錯誤修正:如果字幕編號不是從0開始,則不能正常OCR。

Version 1.03
功能修正:對於Unknown的字幕語言,在提醒後允許繼續OCR。

Version 1.02
功能修正:考慮到寬屏逐漸普及,初始界面不再最大化。
錯誤修正:界面縮小到正常大小時,「黑白圖像」選項會被遮擋。

Version 1.01
錯誤修正:如果字幕第一行為空,則在「OCR選項」中,不能再選擇文字顏色。

Version 1.00
提供字幕OCR、校對功能。
OCR採用MODI引擎,支持英文、簡體中文、繁體中文、日文。