根據統計,Google每分鐘會接收由使用者上傳、總長度超過400小時的影片,這些影片有著不同格式,需要經過處理、轉檔之後才能在YouTube或其他服務中播放,然而要如何在有限的資料流量中達到最佳畫質,就成了需要考慮的重要課題。為此Google提出以深度學習讓影片轉檔最佳化的解決方案。
影片轉檔會造成畫質耗損
由於YouTube等串流影片服務需要考慮到網路頻寬、資料流量、播放裝置相容性等因素,因此會對上傳的影片進行處理、轉檔。不過由於轉檔時會採用破壞性壓縮(意指會犧牲部分資訊,以求進一步降低壓縮後檔案容量),所以會讓轉檔後的影片畫質比原始影片差。
另一方面,Google為了提高影片處理的速度,會將原始影片拆分為許多長度只有數秒、稱為chunk的片段,如此一來就能讓伺服器中的多個處理器同時處理多個chunk,以提升整體處理效率。不過這個方式的副作用,就是各chunk會被視為獨立的資料,並各自進行處理,由於處理時缺乏時間軸上臨近chunk的資訊,不利於控制整體影片的畫質表現。
Google對此也自嘲,表示大家可以說他們是起跑前就先把自己的腳打斷,但是不可否認的,這是個妥協的結果。如果在處理影片時,讓各chunk彼此互通資訊的話,又會大幅提高運算複雜度,甚至有部分chunk需要多次重覆處理,就失去了將影片切割為小片段處理的初衷。
▲圖表橫軸代表影片時間,縱軸則為影片品質(PSNR)。可以看到在各chunk的頭尾處,品質會變得不穩定。
透過深度學習強化處理品質
為了要解決處理各chunk會產生品質不一的情況,最直接的想法就是盡量在切割chunk時,讓各區塊的內容趨於一致,比方說依各場景的切換來切割chunk,但是在實務上,這種方式並不如我們所想像的理想。
解決這個問題的關鍵,在於透過深度學習的方式,讓電腦自動多次處理每個chunk,在迭代的過程中調整編碼參數,並分析對整體影片產生的改變,這不但讓每個chunk的開頭與結尾能維持更接近的品質,也因每個chunk本身很短的關係,讓各chunk之間的品質差異得以降低。有趣的是,研究人員發現,迭代的所需的總次數受第一次迭代時所使用的CRF參數(影片品質指標)影響很大,而且每個chunk的最佳CRF參數都不一樣,因此如果用最快的方式找到最佳CRF參數就是解決問題的核心關鍵。
尋找最佳CRF參數的方式,主要是透過先用極快的速度「預覽」影片,並取得幾組運算複雜度低的指標數據,然後再根據這些數據來推斷適合的CRF參數。但是由於要找出指標數據與最佳CRF參數間的關係並不容易,尤其是要找出解析解更是困難,因此研發團隊改應用數值解的概念,讓電腦透過深度學習的方式,自動學習搜尋技巧,增加尋找最佳CRF參數的效率與準確性。
首先研發團隊準備了10,000部影片,嘗試所有轉檔參數設定,並記錄輸出影片的流量,接著讓深度學習系統分析指標數據與參數設定的關連,讓系統找出適當的預測方式,最終讓轉檔前只需用很快的速度求出指標數據,就能準確最佳CRF參數。
研發團隊表示這項技術已經實際應用在影片服務長達1年之久,並確實能夠提升影片播放品質,研發團隊接著也會持續努力來提供更優異的服務。
▲CRF參數與影片流量的關係圖。CRF參數越小,代表壓縮出來的影片畫質越好,但是流量卻會比較高。
▲此圖為影片最佳CRF參數對照圖,藍色曲線為使用窮舉法所找出的最佳參數,其他曲線越接近則代表成果越好。綠色曲線為最傳統的處理方式,可以看到離藍色曲線比較遠,紅色曲線則為使用使用者上傳的參數進行分析,虛線曲線則為使用「預覽」影片取得的指標數據進行預測,效果很好。
▲在未使用此項技術前,影片的品質不太穩定,尤其在chunk的頭尾處情況更是明顯。
▲採用新技術後,可以在維持相同資料流量的情況下,大幅提升畫質表現。
延伸閱讀:
???
> 「適當的預預測測方式」
> ???
感謝提醒,已修正