胡中毓 寧波市肯特學(xué)校
隨著網(wǎng)絡(luò)科技的發(fā)展,人人都有機會在網(wǎng)絡(luò)上發(fā)布自己的原創(chuàng)視頻。字幕的存在可以讓觀眾更輕松地獲取視頻的信息。兩種字幕形式較為常見:直接集成在視頻圖像中的內(nèi)嵌型,和以srt 文本文件為格式臨時導(dǎo)入視頻的外掛型。視頻字幕的制作通常比較繁瑣,現(xiàn)有的一些方法需要使用者進行較為復(fù)雜的操作:創(chuàng)作者可以通過專業(yè)軟件,在與視頻內(nèi)容進行對比的同時將字幕同步時間軸內(nèi)嵌;或者在任意文本編輯器中分別輸入每一段字幕的起始時間,結(jié)束時間以及字幕文字,然后直接改后綴名使其成為srt 外掛字幕文件。
為了簡化字幕制作的過程,筆者對現(xiàn)有的語音識別和音頻分割技術(shù)進行整合,在調(diào)取語音識別庫對視頻語音進行轉(zhuǎn)換以及運用k-means 聚類算法來進行較為精準(zhǔn)的語音片段分割之后,整合生成srt 格式外掛字幕文件,可以直接在視頻文件中加載,方便使用。
Ffmpeg 是一個可以通過命令行即可運行的免費音視頻處理工具。筆者用Python 的subprocess 庫調(diào)用ffmpeg,將待處理視頻(如mp4)轉(zhuǎn)換成合適的音頻格式(wav)。
自動字幕生成方案很重要的一點就是對語句的精確分割。成功分割后可以用現(xiàn)成的語音識別技術(shù)將每句話單獨識別即可。語句的分割,一般可用靜音間斷來作為分割依據(jù),但有一段較為低分貝的音頻時,可以認(rèn)為是一句話與另一句話的分割處。
從上圖可以看出,靜音段可能是句與句之間的間斷,但也可能只是兩個詞之間的間斷。將靜音段長度設(shè)為L 秒,將該段是句與句之間分割段的概率設(shè)為α,則兩者有以下關(guān)系:
也就是說,一個靜音段越長,越可能是兩句話之間的分割。
由于計算機中音量概念與物理學(xué)概念不同,默認(rèn)當(dāng)音量低于-16分貝時,此音頻段為靜音段。
初步設(shè)定當(dāng)靜音片段長度達到700 毫秒時,程序?qū)σ纛l語句作出分割。介于人與人的說話方式都有不同,用戶能夠自行對此數(shù)值進行修改。
通過k-means 聚類算法來分析音頻中靜音段的平均時長從而來確定分割的基本標(biāo)準(zhǔn)。
上圖展示了一段音頻中靜音片段的長度。我們可以發(fā)現(xiàn)靜音片段的長度大概聚集在0.5 秒~1.0 秒之間,只有部分處于10 秒左右。使用k-means 算法,排除特例之后,將主要的靜音片段判斷標(biāo)準(zhǔn)定為0.6秒左右
使用百度、訊飛等開源語音識別庫將語音轉(zhuǎn)化為文字
語音文字識別技術(shù)在當(dāng)下已經(jīng)非常成熟,故而本方案直接采用了百度和訊飛的雙重語音文字識別引擎,雙引擎增加可靠性,同時互相對比可以增加識別準(zhǔn)確率。
將分割后的音頻逐個上傳到百度和訊飛的服務(wù)器[6],并將返回的結(jié)果比對,如有不同,則可以標(biāo)注該段,讓用戶自行選擇。
設(shè)l 為最適合一段字幕的字符數(shù)(l=20)。當(dāng)一段字幕大于l,通過分割來讓其接近l。我們通過python 中的jieba 庫進行中文分詞使單獨的詞語不作為分割點,從而保證語意不變。對于一段字幕,從長度l 的地方開始向前進行索引直到j(luò)ieba 分詞的分詞點并在此處進行分割。
將語音識別后的字幕段落與時間軸合并,輸出成srt 文件。
選取語句較為清晰,背景聲音不嘈雜的視頻測試。將運行后得到的字幕結(jié)果與工聽寫所得的字幕進行對比。
通過對吐字清晰的視頻進行測試,結(jié)果令人滿意。語音分割準(zhǔn)確率較高,平均值約85%;單個片段的字符數(shù)穩(wěn)定在20 字以內(nèi),使每段文字不過長也不過短;但是受制于現(xiàn)有語音識別技術(shù),字幕正確率僅有半成。
字幕制作有許多方式,但使用起來大多費時費力。本人通過整合現(xiàn)有語音識別和音
分割技術(shù)制作的自動字幕工具在分割方面有較好的效果,但是語音識別正確率不是很高。不過由于能夠自動劃分時間片段并生成srt 文件,使用者可以在生成之后進行手動的簡單修改即可達到較好的效果。