Tuesday, April 25, 2006

(XBMC) 大字幕掉字的看法

前言:大字幕掉字的問題現已解決。雖然我對這個問題並不算太熱衷(畢竟非切身之痛啊!),但在這期間也做了不少次測試,想過不少後來證明為是「餿主意」的解決方案。關於這問題我有一些可能不盡正確的心得,以下就是我的見解。

首先,這個問題只在大級數字幕發生,而繁中字幕出錯的機率又比較高。英文字幕很少聽過有反映這問題,而簡體中文好像也不怎麼常見。

又參照了我個人觀察記憶體的消耗情形,我認為,這和可用記憶的大小並無絕對的關係,有關的應該是系統留存給ttf字幕快取記憶的大小。

就如同我先前確定的,掉字發生的時間,和字幕檔有關;事實上,是指和字幕檔的字數有關。或許我們可以更精確地算出,在某特定級數時,到第幾個字時才會掉 字。原因可能在於XBMC每出一個字時,該字的……呃,可能是取樣後的圖像,會留存在暫存記憶體裡,留待下一次同樣一個字出現時取用,如此可減少每次出字 時從ttf字型檔裡去取字的麻煩,增加播放字幕時的流暢性。常常可以發現,當一部影片剛發始時,字幕的播出比較容易出現小小的停頓,而後來就幾乎不會了, 這就是因為到後來許多字都可直接從暫存記憶裡取得,不需要回字型檔取樣。

而字幕的級數小,相對的,留存在記憶裡的暫存圖檔就小,因此記憶不夠的情形就延緩發生,甚至到了影片結束時都還不會。而英文字幕的話,這問題也不易發生, 因為英文字就這麼幾個字母,算上大、小寫和數字、符號,也不過七、八十個字吧,播出沒多久之後,所有的字就差不多取樣完畢,自然不會再去消耗記憶容量,更 不會掉字。

而中文的話比較麻煩,我們不是拼音字,字元數本來就是英文字的好幾十倍,而單一字元筆畫又複雜,需要比較大的級數才能看清楚,所以系統留給字幕的記憶容量 比較容易爆掉。簡中應該也會有同樣的問題,但簡中畢竟筆畫比繁中少,又有許多共用字(干、乾、幹……),所以又比繁中撐得久一點。

這個問題很討厭的地方,在於若定期清掉記憶中的暫存資料,那重新取樣的機會就增加,那遇到多字的字幕時,停頓的機率也跟著增加。而若是把暫存區的容量,增 大到滿足繁體中文字幕的需求,以現在74級的字,大約6、7分鐘就不夠用來推估,差不多要比現在多上二十倍。或者聽說中文常用字約一千多字,可從最大字每 一字佔的容量大小來推估,但總之不會太小,xbox有沒有那麼多資源可利用,也還未知。

或許像圖型字幕一樣,在播出影片前事先取樣,之後就不必邊播邊取樣,但還是有系統資源夠不夠用的問題,而且xbmc願不願意為了「少數人」的需求,而做那麼大的改變呢?

最後XBMC採用的解決方法,好像是清空快取的字型,那停頓現象會不會因此而變得比較嚴重?值得繼續觀察。

0 comments: