胡中毓 寧波市肯特學校
隨著網絡科技的發展,人人都有機會在網絡上發布自己的原創視頻。字幕的存在可以讓觀眾更輕松地獲取視頻的信息。兩種字幕形式較為常見:直接集成在視頻圖像中的內嵌型,和以srt 文本文件為格式臨時導入視頻的外掛型。視頻字幕的制作通常比較繁瑣,現有的一些方法需要使用者進行較為復雜的操作:創作者可以通過專業軟件,在與視頻內容進行對比的同時將字幕同步時間軸內嵌;或者在任意文本編輯器中分別輸入每一段字幕的起始時間,結束時間以及字幕文字,然后直接改后綴名使其成為srt 外掛字幕文件。
為了簡化字幕制作的過程,筆者對現有的語音識別和音頻分割技術進行整合,在調取語音識別庫對視頻語音進行轉換以及運用k-means 聚類算法來進行較為精準的語音片段分割之后,整合生成srt 格式外掛字幕文件,可以直接在視頻文件中加載,方便使用。
Ffmpeg 是一個可以通過命令行即可運行的免費音視頻處理工具。筆者用Python 的subprocess 庫調用ffmpeg,將待處理視頻(如mp4)轉換成合適的音頻格式(wav)。
自動字幕生成方案很重要的一點就是對語句的精確分割。成功分割后可以用現成的語音識別技術將每句話單獨識別即可。語句的分割,一般可用靜音間斷來作為分割依據,但有一段較為低分貝的音頻時,可以認為是一句話與另一句話的分割處。

從上圖可以看出,靜音段可能是句與句之間的間斷,但也可能只是兩個詞之間的間斷。將靜音段長度設為L 秒,將該段是句與句之間分割段的概率設為α,則兩者有以下關系:

也就是說,一個靜音段越長,越可能是兩句話之間的分割。
由于計算機中音量概念與物理學概念不同,默認當音量低于-16分貝時,此音頻段為靜音段。
初步設定當靜音片段長度達到700 毫秒時,程序將對音頻語句作出分割。介于人與人的說話方式都有不同,用戶能夠自行對此數值進行修改。
通過k-means 聚類算法來分析音頻中靜音段的平均時長從而來確定分割的基本標準。

上圖展示了一段音頻中靜音片段的長度。我們可以發現靜音片段的長度大概聚集在0.5 秒~1.0 秒之間,只有部分處于10 秒左右。使用k-means 算法,排除特例之后,將主要的靜音片段判斷標準定為0.6秒左右
使用百度、訊飛等開源語音識別庫將語音轉化為文字
語音文字識別技術在當下已經非常成熟,故而本方案直接采用了百度和訊飛的雙重語音文字識別引擎,雙引擎增加可靠性,同時互相對比可以增加識別準確率。
將分割后的音頻逐個上傳到百度和訊飛的服務器[6],并將返回的結果比對,如有不同,則可以標注該段,讓用戶自行選擇。
設l 為最適合一段字幕的字符數(l=20)。當一段字幕大于l,通過分割來讓其接近l。我們通過python 中的jieba 庫進行中文分詞使單獨的詞語不作為分割點,從而保證語意不變。對于一段字幕,從長度l 的地方開始向前進行索引直到jieba 分詞的分詞點并在此處進行分割。
將語音識別后的字幕段落與時間軸合并,輸出成srt 文件。
選取語句較為清晰,背景聲音不嘈雜的視頻測試。將運行后得到的字幕結果與工聽寫所得的字幕進行對比。

通過對吐字清晰的視頻進行測試,結果令人滿意。語音分割準確率較高,平均值約85%;單個片段的字符數穩定在20 字以內,使每段文字不過長也不過短;但是受制于現有語音識別技術,字幕正確率僅有半成。
字幕制作有許多方式,但使用起來大多費時費力。本人通過整合現有語音識別和音
分割技術制作的自動字幕工具在分割方面有較好的效果,但是語音識別正確率不是很高。不過由于能夠自動劃分時間片段并生成srt 文件,使用者可以在生成之后進行手動的簡單修改即可達到較好的效果。