1. 程式人生 > >短視頻APP是如何開啟你的美好生活的?

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

中心 思維 聲音 發現 高級 course 亮度 容易 實時

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

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

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

前言

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

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

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

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

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

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

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

編輯的原理

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

技術分享圖片

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

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

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

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

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

預覽功能

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

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

技術分享圖片

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

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

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

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

逐幀預覽

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

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

技術分享圖片

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

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

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

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

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

視頻預處理

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

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

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

技術分享圖片

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

技術分享圖片

特效的制作

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

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

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

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

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

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

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

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

技術分享圖片

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

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

更多視頻請點擊—>這裏

問答
如何搭建小程序音視頻?
相關閱讀
教你1天搭建自己的“微視”
教你從0到1搭建小程序音視頻
教你快速搭建一場發布會直播方案
【每日課程推薦】機器學習實戰!快速入門在線廣告業務及CTR相應知識

此文已由作者授權騰訊雲+社區發布,更多原文請點擊

搜索關註公眾號「雲加社區」,第一時間獲取技術幹貨,關註後回復1024 送你一份技術課程大禮包!

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

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