短視訊APP是如何開啟你的美好生活的?

騰訊雲加社群發表於2018-09-18

歡迎大家前往騰訊雲+社群,獲取更多騰訊海量技術實踐乾貨哦~

本文由騰訊視訊雲終端團隊發表於雲+社群專欄

常青, 2008 年畢業加入騰訊,一直從事客戶端研發相關工作,先後參與過 PC QQ、手機QQ、QQ物聯 等產品專案,目前在騰訊視訊雲團隊負責音視訊終端解決方案的優化和落地工作,幫助客戶在可控的研發成本投入之下,獲得業內一流的音視訊解決方案,目前我們的產品線包括:互動直播、點播、短視訊、實時視訊通話,影像處理,AI 等等。

前言

在 AlphaGo 名聲大噪之前,圍棋是一項少有人問津的娛樂專案,不信你可以在記憶裡細數一下,當時身邊有多少個朋友會下圍棋(AlphaGo 出名後一時興起下兩把的我們們就不算數了)。相比之下,德州撲克的普及程度就要好的多,以至於我們團隊有一次年會就放棄傳統抽獎方式,而是靠德州撲克決定獎品名單的。

為什麼高大上的圍棋比不上德州撲克受歡迎呢?規則太複雜嗎?

真正的原因是圍棋的門檻太高了。在圍棋裡,水平的高低說帶來勝率差異是碾壓式的。對於兩個圍棋選手而言,如果棋藝差一級,那麼對弈時弱者幾乎沒有贏的可能。這就讓圍棋變成了一群高智商玩家的小圈子游戲,剛入門的進來感覺就是找虐。而德州撲克則不是,不管你是不是行家,運氣的成分總還是起了很大的作用,這就讓它本身適合成為一款所有人都容易接受的遊戲。

視訊編輯也是如此,在電腦能夠處理多媒體工作之後不久,就出現了很多的視訊編輯軟體。比如我過年回家,就能在長輩的書架上看到一本《會聲會影 從入門到精通》。長輩退休了在家搞搞攝影,想要給自己拍的照片和視訊加點特效或者做個剪輯,就會用到這類專業軟體。我隨手翻了幾頁,很快就沒興趣了,裡面太多流程化的操作,需要我花不少的時間去研究和練習,而我缺乏學習這款軟體的動力。

由此可見,入門門檻的高低,決定了一項活動或是一款產品,是被大眾所普遍接受,還是停留在一個很小的專業圈子裡。

就在不久之前,視訊編輯還是一個小圈子的活動,縱使很多人有興趣創作自己的小視訊,在專業工具的入門門檻面前,也就選擇洗洗睡了。直到快手和抖音的出現,讓大家的入門門檻一下子變低了,你只要會用手機,就能快速的給自己拍的視訊加一些特效,做一些個性化的編輯,進而引爆了“北快手,南抖音”這兩款現象級的 APP。

但我想告訴您的是,從會聲會影式的專業軟體到普羅大眾的快手抖音,絕不是互動層面的一個簡單調整,而是一個複雜的故事。今天,我就帶您一起來看一看,這背後的技術故事。

編輯的原理

下圖簡單的展示了視訊編輯的一個大體流程,這在所有的視訊編輯軟體裡都是類似的:

img

第一個需要了解的細節是,手機上的影片(比如 mp4 或者 mov) 都是不能直接拿來做特效編輯的,因為裡面的資料都是經過壓縮的。直接編輯這些編碼後的影片是很困難的,我們在不解碼影片檔案的情況下,最多也就是做一下簡單的裁剪和拼接。

舉個現實生活中的例子,比如說你剛搬了新家,帶著你的愛人去宜家挑選傢俱,宜家的服務很人性化,他們會在你進門的時候會給你一張卡片和一支鉛筆,這樣你就可以把想買的傢俱或則配件的編號記錄下來,之後你可以去倉庫一件件的取貨,或者去辦理送貨上門服務。這一切都很方便,直到買單時你發現預算超了,於是決定要把一些比較貴的型號換成比較便宜的型號。但這個時候困難也出現了,因為只有編號你是做不到的,你得回到展示區按商品編號對號入座,然後才能知道有沒有心儀的便宜款商品可選。否則你能做的也就只有從商品列表裡把一些型號劃掉。

視訊編輯也是一樣,已經經過編碼的影片,再不經過解碼的情況下,即使計算機也無法解讀檔案裡蘊含的畫面和聲音,我們所能做得事情就很有限。這也就解釋了上圖複雜性的由來:

要做音視訊的特效編輯,原始的影片(比如 mp4 或者 mov)必須先被拆解成獨立視訊流和音訊流。以視訊流為例,我們要先對視訊流進行逐幀逐畫面的視訊解碼,這樣解碼出來的內容才是一副計算機可以顯示的畫面。在這幅畫面的基礎上,計算機才可以理解每一個畫素點對應的色彩數值和亮度大小。進一步地,計算機才可以在畫面上新增字幕,做動態特效,或者疊加掛件。聲音也是一樣,編碼後的 AAC 檔案只適合傳輸和儲存,計算機也是需要先將其解碼成 PCM 格式的波形檔案,才能知道每一個點的音調高低,進而能夠編輯。

視訊特效和聲音特效都加完之後,還不算結束,因為使用者真正想要的是編輯後的視訊影片,而不是一幅幅的畫面和一段段的聲音,所以解碼出的畫面在經過特效疊加和處理之後,還要再一次地送給視訊編碼器進行編碼,進而跟音訊流一起,組合成新的視訊影片。

預覽功能

上述的流程看似複雜,但它只是視訊編輯的最後一步,也就是編輯器的“最終生成”的這一步,在這一步之前,必須要有人通過編輯器決定在哪一段時間加什麼型別的特效。

但沒有人可以憑空知道在影片的第幾秒把一個什麼特效恰到好處的放置進去,使用者需要根據影片的具體內容進行即興的創作和發揮,所以,我們需要把預覽功能作為 P0 特性加入進去。

img

如上圖所示,簡單的預覽在原理上是一個完全沒有技術難度的工作,我們只需要將經過特效處理的畫面和聲音播放出來即可。這裡真正的難點是要優化好畫面特效的效能,同時做好音畫同步的校對。

因為影片的預覽跟單張圖片的預覽不同,預覽過程必須是一個很流暢的體驗,否則使用者在編輯影片時就會有很明顯的卡頓感,導致使用者在使用時如骨鯁在喉,難以有好的產品體驗。

而效能優化和音畫同步也都很好解決,真正困難的是逐幀的畫面預覽,也就是使用者想要看哪一幀的效果,就能立刻如願,也就是標題裡所謂的“心隨手動”。

這裡,我們將面對一個在技術原理上就很難逾越的困難:

逐幀預覽

雖然手機晶片的進步這兩年可謂神速,但是功耗的限制決定了 PC 機的效能依然可以碾壓手機。但不知你有沒有發現,即使在效能這麼好的 PC 電腦上,看電影時也會遭遇“拖拽卡頓”現象,也就是當你用滑鼠拖拽進度時,能明顯感覺卡頓感。

這是因為簡單的視訊卡頓背後,有一個巨大的效能陷阱,也即是解碼器的解碼規則,我通過下圖來解釋一下:

img

假設你將滑鼠從第3幅畫面拖拽到第13幅畫面,按照表面上的理解,計算機只需要讀取第13幅畫面的內容,把畫面顯示出來就行了,這並沒有什麼難度。

但實際上,編碼器在處理第13幅畫面的時候,為了減少這幅畫面的儲存空間,只會保留第13幅和第12幅畫面的差異部分。這也就意味著,要想看到第13幅畫面,計算機需要先把第12幅畫面解碼出來。照此類推,要想看到第12幅畫面,計算機就需要先把第11幅畫面解碼出來...

最終,計算機需要解碼出第7幅畫面,才能將上述這個迴圈打破,因為第7幅畫面比較特殊,編碼器在處理這一副畫面的時候,並沒有參考其它畫面,所以這幅畫面的內容在還原時,不需要依賴其它畫面的內容(也正是因為如此,這幅畫面在硬碟上的儲存空間比其他畫面都要大)。

當然,這裡說的都是最簡單的情況,由於技術的進步,現在普遍使用的編碼器都已經在用 main profile 和 high profile 這種高階的編碼模式,畫面與畫面之間的參考關係更加複雜,不僅僅參考前面的畫面,也會參考後續的畫面,進一步提升了複雜度和計算量。

這就解釋了為什麼拖拽本身的等待時間不確定,有時候你可能運氣好,正好拖到了上圖中的第7幅畫面,那麼如你所願,畫面立刻就切到第7幅;但也有可能,你拖拽到了第14幅畫面,那麼計算機只能認倒黴,它要把前面的7幅畫面全都解碼完成,才能切到你想要的那一幅畫面上。

視訊預處理

為了解決這個問題,我們只有兩條路可以走:

一條路是等待摩爾定律進步到處理十幾幅畫面也只需彈指一揮間的事情,但安迪比爾定理也告訴你,摩爾定律所帶來的那點進步會瞬間被 4K、8K 給吃掉。

另一條路就是工程思維解決問題了,我們的做法是:如果是編輯一個已經生成好的 MP4 或者 MOV 影片,我們會先對影片進行一輪預處理,也就是影片在送給編輯器之前,先要經過一輪提前的加工處理,把視訊處理的更加易於編輯。

img

當然,如果你認為僅僅是為了提升逐幀預覽的效能就要耗費這麼大的精力是不值得的,那其實是多慮了。因為我們的工程師團隊會充分利用這段新引入的時間,把很多耗時但又必須要做的事情在這個階段也完成了,比如,下面圖中的預覽工具條,就是在預處理過程中每隔一段時間截圖拼接實現的。

img

特效的製作

我們都知道動畫的原理本身就是一幅畫面到另一幅畫面的快速變化,畫面之間的微小差異經過累加,使人產生畫面運動的錯覺。畫面變化的越快,人越不容易察覺,因為畫面的流暢性也就越好。

我們在短視訊編輯器上說新增的各種特效也是遵循這兩個原則:

  • 特效本身是逐幀變化的,每一幅特效跟上一幅特效均有細微的差別。
  • 特效的變化跟影片原來的畫面變化進行疊加,這樣能夠確保特效的流暢性自然而不生硬。

以我們在Demo中提供的第三個視訊特效為例,它是這樣實現的:

(1)取原始畫面第一幅影像,對其做1.1倍的影像放大,之後擷取中心的部分,然後去掉 50% 的透明度,這樣就能得到一張新的半透明圖片,這張新的半透明圖片是用來形成虛影效果的。它會被疊加在原始影像上,這樣一來,我們就得到了處理後的第一幅影像(帶虛影特效)。

(2)照此步驟,我們對第二幅影像也做同樣的處理,但這次稍有不同的是,不再做 1.1 倍放大,這次我們把放大倍數改成1.2倍,這樣疊加出來的影像,50%透明度所形成的虛化部分,就相比於上一幅就要擴大了一圈。這擴大出來的一圈如果疊加起來,就可以製造出一種畫面向外放射的錯覺。

(3)對第三幅畫面也是類似的操作,這次我們將放大倍數改為 1.3 倍,因此虛影部分又擴大了一圈...

(4)如此逐步做下去,處理後的影像就會形成一組新的連續動畫,而這組新的動畫已經包含了我們所期望的視訊特效。

img

相比於其他的部分,特效本身的技術難度是比較簡單的,尤其是視訊特效的實現。

真正的困難則是來自於定製上的靈活性,由於抽象能力比價若,我們目前還沒有把視訊特效的製作能力開放出來供開發者自行設計,而是隻能用更直接的辦法,想到一個做一個。真正要做到客戶隨意定製,還需要一段時間的努力。

更多視訊請點選—>這裡

問答

如何搭建小程式音視訊?

相關閱讀

教你1天搭建自己的“微視”

教你從0到1搭建小程式音視訊

教你快速搭建一場釋出會直播方案

【每日課程推薦】機器學習實戰!快速入門線上廣告業務及CTR相應知識

此文已由作者授權騰訊雲+社群釋出,更多原文請點選

搜尋關注公眾號「雲加社群」,第一時間獲取技術乾貨,關注後回覆1024 送你一份技術課程大禮包!

海量技術實踐經驗,盡在雲加社群

相關文章