轉自:https://www.chinaz.com/news/2017/0921/806647.shtml
我們早已經進入了數字多媒體時代,相信每天都會有數不清的男男女女,在PC手機上播放一部部令人熱血賁張的小電影。沒錯,視頻播放早已是信息時代的日常,花樣迭出的視頻播放器成為了手機電腦中不可或缺的軟件。不過,你可知道這些名目繁多的視頻播放器要運作起來,往往都離不開神級播片軟件FFmpeg?今天,就一起來談談視頻播放和FFmpeg的那點事吧。
很多朋友都喜歡看電影,但可知到底是什么技術幫你把片子播出來呢?
一部小電影到底是如何播放出來的?
盡管我們每天都在看小電影之類的視頻,不過對視頻播放背后的機理,恐怕並不是每個朋友都會去作了解。我們平時看到的小電影有着各種各樣的格式,例如AVI、RMVB、MKV等等,但是這些格式並非是視頻之間的本質區別——不同的格式往往只代表着不同的容器,容器內封裝的具體視頻流、音頻流等內容,才是一個視頻的本質所在。
例如,AVI中可以封裝H. 264 編碼的視頻流,MKV也可以封裝H.264,但同時MKV還能夠封裝HEVC、VP9 等視頻流。因此,MKV和MKV之間的區別,可能要比某個AVI和某個MKV之間的區別大得多。當然,不同的容器也是有功能和性能上的區別的,例如MKV對各種編碼的兼容性就非常好,而AVI則有所局限,且不支持流媒體播放等。
不同的容器可以封裝各種視頻編碼
要播放某段視頻,播放軟件所需要做的,首先要支持某種容器,然后把視頻流、音頻流等內容從容器中分離出來,接而解碼,然后渲染,用戶就可以播放出視頻、音頻乃至字幕等內容了。這個過程是比較繁瑣而且頗有技術含量的,世界上有着茫茫多規格的編碼格式,做一個播放器就意味着需要對這些東西吃得比較透,這無疑是相當費時費力的。因此,為數龐大的視頻播放器實際上都使用了統一的解決方案——FFmpeg。
神級播放軟件FFmpeg:萬能播放器的根基
FFmepg是一套視頻音頻的完整解決方案,它提供了視頻解碼、編碼、后期處理等一系列功能,對世界上千奇百怪的視頻音頻編碼有着完善的支持。FFmpeg是在Linux平台下開發的,完全開源,也可以在其他平台編譯運行。FFmpeg的名稱顯然是來自“MPEG”,而MPEG則是視頻編碼標准的制定者,從名字就可以看出,FFmpeg旨在研究和MPEG相關的一系列技術。
FFmpeg提供了一整套視頻音頻解決方案,其中也包括了視頻解碼
FFmpeg的功能非常強大,雖然前文和標題都說它是播片神器,但它的功能絕不僅僅限於播片。FFmpeg自然可以解碼諸多的視頻音頻編碼,而且它同時也提供了視頻音頻轉換、編碼、封裝的功能,還可以進行視頻裁剪、縮放、色域轉換等一系列后期處理。不僅如此,FFmpeg還支持HTTP、FTP、SMB等協議。可以說,無論你想要本地播片,還是轉換視頻格式,亦或是利用網絡看視頻,FFmpeg都可以勝任。
使用FFmpeg作為解碼器是萬能播放器們的主流之選
FFmpeg項目起源於 2000 年,多年來,FFmpeg一直在進化。FFmpeg項目在 2011 年分裂出了Libav項目,該項目誕生出了現今最強力的視頻解碼器LAV。無論對於軟硬件,LAV解碼器都有着頗為完善的支持,大量播放軟件都可以調用LAV解碼,而LAV本身也可以利用各種顯卡進行視頻硬解。想要用PC播放難搞的4K HDR藍光?LAV絕對是最好的解決方案。
基於FFmpeg的LAV是目前最強的視頻解碼器
FFmpeg之所以是神,不僅僅是由於自身的強大,還在於對業界的影響力。很多播放器都宣稱自己多么多么萬能,支持先進的4K乃至8K視頻播放,乍看這播放器搞定了世界上如此繁雜的視頻容器、視頻音頻編碼,太了不起了!然而實際上,真正的原因往往是因為這播放器自帶了FFmpeg/LAV解碼器,真正神的不是播放器,而是背后的FFmpeg/LAV,你能用播放器順利放出小電影,可別忘記感謝FFmpeg。因此,把FFmpeg稱作為神級軟件,完全實至名歸。
FFmpeg:可能是被抄襲得最嚴重的開源軟件
FFmpeg是如此強大,但一般人是難以駕馭的。和很多開源軟件一樣,FFmpeg並沒有圖形界面,原始版本的Fmpeg只能怪通過命令行操縱,不是高玩的話一般是不會去碰原始版本的FFmpeg的。不過,由於FFmpeg是一個開源軟件,因此諸多我們日常接觸的軟件,都會使用其技術來實現視頻播放功能。這其中,既包括常見的播放軟件,也包括瀏覽器之類的能播放視頻的產品。
FFmpeg的原版是命令行,一般用戶玩不轉
例如,三大視頻播放流派MPC、MPlayer和VLC都和FFmpeg脫不開關系,而Chrome這樣的能播放網頁視頻的瀏覽器,也使用了FFmpeg代碼。FFmpeg開源,加上易於編譯到多個平台的特點,廣受各大播放器開發商的歡迎是情理之中的事情。如果你看到某款播放器支持N多視頻格式、N多功能,十有八九它就使用了FFmpeg的相關代碼。
不過,FFmpeg是按照GPL/LGPL協議開源的,這意味着如果某軟件使用了FFmpeg的代碼,那么這個軟件涉及這些代碼的部分,也必須開源。但是業界的風氣嘛……你懂的。我用了就是用了,開源什么的誰管你,有本事你來打我呀?因此,FFmpeg也成為了代碼被盜用得最嚴重的開源軟件之一,不少著名的播放軟件都是FFmpeg代碼的偷竊者。
KMP等著名播放器都是FFmpeg的抄襲者
無論是國內外,都有大量播放軟件非法使用了FFmpeg的代碼。例如國內耳熟能詳的暴風影音、QQ影音,以及國外著名的KMPlayer、PotPlayer,都采用了FFmpeg的代碼但卻不按規矩開源,被放入了FFmpeg的恥辱名單當中。當然,守規矩的軟件也是有的,例如前面提到的MPC、MPlayer、VLC都按照FFmpeg的規矩開了源。如果你想要支持開源事業,不妨優先使用這些守規矩的軟件。
后話
盡管人們日常接觸的多是金玉其外的商業軟件,但是軟件界今時今日的繁榮,離不開FFmpeg這樣的開源軟件們的默默奉獻。在享受一部部小電影、大片的同時,請不要忘記是FFmpeg把撥人心弦的影音帶到了你的面前。當然,如果你有心有財力,也可以通過捐贈的方式支持FFmpeg(點此進入捐贈頁面),希望FFmpeg能繼續發展得越來越好吧!