前言
直播流程模型如下圖

1.采集
采集是整個(gè)直播過(guò)程中的第一個(gè)環(huán)節(jié),負(fù)責(zé)從采集設(shè)備中采集原始數(shù)據(jù)傳遞到下一個(gè)環(huán)節(jié),采集設(shè)備可以是手機(jī)也可以是攝像機(jī)等設(shè)備,原始數(shù)據(jù)的采集涉及兩方面數(shù)據(jù)的采集:音頻采集和圖像采集。
音頻數(shù)據(jù)采集
數(shù)字化的聲音數(shù)據(jù)就是音頻數(shù)據(jù)。數(shù)字化聲音的過(guò)程實(shí)際上就是以一定的頻率對(duì)來(lái)自microphone 等設(shè)備的連續(xù)的模擬音頻信號(hào)進(jìn)行模數(shù)轉(zhuǎn)換(ADC)得到音頻數(shù)據(jù)的過(guò)程;數(shù)字化聲音的播放就是將音頻數(shù)據(jù)進(jìn)行數(shù)模轉(zhuǎn)換(DAC)變成模擬音頻信號(hào)輸出。在數(shù)字化聲音時(shí)有兩個(gè)重要的指標(biāo),即采樣頻率(Sampling Rate)和采樣大小(SamplingSize)。
采樣
聲音是由物體振動(dòng)產(chǎn)生的聲波。而波是無(wú)限光滑的,采樣的過(guò)程就是從波中抽取某些點(diǎn)的值。
數(shù)碼音頻系統(tǒng)是通過(guò)將聲波波形轉(zhuǎn)換成一連串的二進(jìn)制數(shù)據(jù)來(lái)再現(xiàn)原始聲音的,實(shí)現(xiàn)這個(gè)步驟使用的設(shè)備是模/數(shù)轉(zhuǎn)換器(A/D)它以每秒上萬(wàn)次的速率對(duì)聲波進(jìn)行采樣,每一次采樣都記錄下了原始模擬聲波在某一時(shí)刻的狀態(tài),稱之為樣本。將一串的樣本連接起來(lái),就可以描述一段聲波了,把每一秒鐘所采樣的數(shù)目稱為采樣頻率或采率,單位為HZ(赫茲)。采樣頻率越高所能描述的聲波頻率就越高。

采樣頻率
音頻的采樣頻率是指一秒鐘內(nèi)對(duì)聲音信號(hào)的采樣次數(shù),單位為Hz,采樣頻率越高聲音的還原就越真實(shí)越自然。
常用的采樣頻率:8,000 Hz - 電話所用采樣率, 對(duì)于人的說(shuō)話已經(jīng)足夠,11,025 Hz-AM調(diào)幅廣播所用采樣率,44,100 Hz- 音頻 CD所用采樣率,48000Hz則更加精確一些。
采樣位數(shù)
每個(gè)采樣點(diǎn)能夠表示的數(shù)據(jù)范圍。采樣位數(shù)通常有8bits或16bits兩種,采樣位數(shù)越大,所能記錄聲音的變化度就越細(xì)膩,相應(yīng)的數(shù)據(jù)量就越大。8位字長(zhǎng)量化(低品質(zhì))和16位字長(zhǎng)量化(高品質(zhì)),16 bit 是最常見的采樣精度。
聲道
是指聲音在錄制或播放時(shí)在不同空間位置采集或回放的相互獨(dú)立的音頻信號(hào),所以聲道數(shù)也就是聲音錄制時(shí)的音源數(shù)量或回放時(shí)相應(yīng)的揚(yáng)聲器數(shù)量。
PCM數(shù)據(jù)
PCM(Pulse Code Modulation,脈沖編碼調(diào)制)音頻數(shù)據(jù)是未經(jīng)壓縮的音頻采樣數(shù)據(jù)裸流,它是由模擬信號(hào)經(jīng)過(guò)采樣、量化、編碼轉(zhuǎn)換成的標(biāo)準(zhǔn)數(shù)字音頻數(shù)據(jù)。PCM數(shù)據(jù)是經(jīng)過(guò)采樣后最原始的數(shù)據(jù),未經(jīng)過(guò)壓縮,完全無(wú)損,但體積比較大,為了解決這個(gè)問(wèn)題先后誕生了一系列的音頻格式,這些音頻格式運(yùn)用不同的方法對(duì)音頻數(shù)據(jù)進(jìn)行壓縮,其中有無(wú)損壓縮(ALAC、APE、FLAC)和有損壓縮(MP3、AAC、OGG、WMA)兩種。

圖像數(shù)據(jù)采集
將圖像采集到的圖片一幀幀組成連續(xù)播放的動(dòng)畫即構(gòu)成視頻中可視的部分。數(shù)字圖像是連續(xù)的光信號(hào)經(jīng)過(guò)傳感器的采樣在空間域上的表達(dá)。一張圖像是由一個(gè)包含若干個(gè)像素點(diǎn)的矩形框組成的.
把圖片放大可以看到圖像是由很多個(gè)小格子組成的,每個(gè)小格子都只有一種顏色,這是構(gòu)成圖像的最小單元——像素(pixel)。不同的像素值代表了不同的顏色,像素值的值域一般在0到255(包括)之間,也就是256個(gè)整數(shù)。但0-255并不能映射到像上圖所示的彩色,而只是對(duì)應(yīng)黑色到白色之間的灰度值
顏色
顏色或色彩是通過(guò)眼、腦和我們的生活經(jīng)驗(yàn)所產(chǎn)生的一種對(duì)光的視覺效應(yīng)。簡(jiǎn)單點(diǎn)說(shuō),顏色就是人對(duì)光的一種感覺,由大腦產(chǎn)生的一種感覺
人的視網(wǎng)膜上布滿了感光細(xì)胞,當(dāng)有光線傳入人眼時(shí),這些細(xì)胞就會(huì)將刺激轉(zhuǎn)化為視神經(jīng)的電信號(hào),最終在大腦得到解釋。視網(wǎng)膜上有兩類感光細(xì)胞:視錐細(xì)胞和視桿細(xì)胞。
視錐細(xì)胞大都集中在視網(wǎng)膜的中央,每個(gè)視網(wǎng)膜大概有700萬(wàn)個(gè)左右。每個(gè)視錐細(xì)胞包含有一種感光色素,分別對(duì)紅、綠、藍(lán)三種光敏感。這類細(xì)胞能在較明亮的環(huán)境中提供辨別顏色和形成精細(xì)視覺的功能。
視桿細(xì)胞分散分布在視網(wǎng)膜上,每個(gè)視網(wǎng)膜大概有1億個(gè)以上。這類細(xì)胞對(duì)光線更為敏感(敏感程度是視錐細(xì)胞的100多倍),一個(gè)光子就足以激發(fā)它的活動(dòng)。視桿細(xì)胞不能感受顏色、分辨精細(xì)的空間,但在較弱的光線下可以提供對(duì)環(huán)境的分辨能力(比如夜里看到物體的黑白輪廓)。
當(dāng)一束光線進(jìn)入人眼后,視細(xì)胞會(huì)產(chǎn)生4個(gè)不同強(qiáng)度的信號(hào):三種視錐細(xì)胞的信號(hào)(紅綠藍(lán))和視感細(xì)胞的信號(hào)。這其中,只有視錐細(xì)胞產(chǎn)生的信號(hào)能轉(zhuǎn)化為顏色的感覺。三種視錐細(xì)胞(S、M和L類型)對(duì)波長(zhǎng)長(zhǎng)度不同的光線會(huì)有不同的反應(yīng),每種細(xì)胞對(duì)某一段波長(zhǎng)的光會(huì)更加敏感,如下圖。這些信號(hào)的組合就是人眼能分辨的顏色總和。

三種視錐細(xì)胞(S、M和L類型)對(duì)單色光譜刺激的反應(yīng)( 橫坐標(biāo)為光的波長(zhǎng),縱坐標(biāo)為產(chǎn)生信號(hào)的強(qiáng)度)

能夠引起視錐細(xì)胞活動(dòng)的光波長(zhǎng)范圍 :312.3nm至745.4mn(可見光)
這里有一個(gè)重要的理論:我們可以用3種精心選擇的單色光來(lái)刺激視錐細(xì)胞,模擬出人眼所能感知的幾乎所有的顏色(例如紅綠光的混合光,和單色黃光,刺激視錐細(xì)胞產(chǎn)生的視神經(jīng)信號(hào)是等效的),這就是三色加法模型。所以說(shuō)"三原色"的原理是由生理因素造成的。
RGB色彩空間
要展示彩色像素可以通過(guò)三原色來(lái)表示,即我們常用的R(Red)、G(Green)、B(Blue)顏色編碼方式,
android中的顏色就是通過(guò)RGB形式展現(xiàn)的,一個(gè)字節(jié)代表一個(gè)顏色,共需要三個(gè)字節(jié),例如#FF0000代表紅色,#00FF00代表綠色,#0000FF代表藍(lán)色。
RGB顏色的幾何立體模型如下:任何一個(gè)顏色在該立體模型中都能找到其對(duì)應(yīng)的點(diǎn)

YUV色彩空間
YUV中的Y代表亮度信息(只靠Y亮度數(shù)據(jù)就可展現(xiàn)黑白圖像),U和V代表色度。早期技術(shù)不發(fā)達(dá)的時(shí)候,照片打印和電視播放都只能實(shí)現(xiàn)黑白的灰度顯示,所以Y數(shù)據(jù)就成了標(biāo)準(zhǔn)。之后才有了彩色打印和彩色電視,為了兼容之前的黑白數(shù)據(jù),廠商發(fā)明了UV數(shù)據(jù)。YUV一起就可以實(shí)現(xiàn)彩色,單獨(dú)使用Y可以實(shí)現(xiàn)黑白,這樣一套數(shù)據(jù)格式就同時(shí)兼容了黑白設(shè)備和彩色設(shè)備。
采用YUV色彩空間的特點(diǎn)是它的亮度信號(hào)Y和色度信號(hào)U、V是分離的。如果只有 Y信號(hào)分量而沒有U、V信號(hào)分量,那么這樣表示的圖像就是黑白灰度圖像。Y'CbCr也稱為YUV,是YUV的壓縮版本,不同之處在于Y'CbCr用于數(shù)字圖像領(lǐng)域,YUV用于模擬信號(hào)領(lǐng)域。Y'為亮度,Cb、Cr分量代表當(dāng)前顏色對(duì)藍(lán)色和紅色的偏移程度。

Y'=0.5時(shí),Cb、Cr構(gòu)成的顏色平面
由于人眼對(duì)色度的敏感度不及對(duì)亮度的敏感度,圖像的色度分量不需要有和亮度分量相同的清晰度,所以可以拋棄部分色度數(shù)據(jù),進(jìn)行色度抽樣,從而達(dá)到壓縮圖像數(shù)據(jù)降低帶寬的效果。
YUV色彩抽樣方式主流的有三種YUV4:4:4,YUV4:2:2,YUV4:2:0,用三個(gè)圖來(lái)直觀地表示采集的方式,以黑點(diǎn)表示采樣該像素點(diǎn)的Y分量,以空心圓圈表示采用該像素點(diǎn)的UV分量。

YUV 4:4:4采樣,每一個(gè)Y對(duì)應(yīng)一組UV分量。
YUV 4:2:2采樣,每?jī)蓚€(gè)Y共用一組UV分量。
YUV 4:2:0采樣,每四個(gè)Y共用一組UV分量。
在渲染時(shí),不管是OpenGL還是iOS,都不支持直接渲染YUV數(shù)據(jù),底層都是轉(zhuǎn)為RGB。
2.編碼
視頻編碼
視頻編碼是指連續(xù)圖像的編碼,與靜態(tài)圖像編碼著眼于消除圖像內(nèi)的冗余信息相對(duì),視頻編碼主要通過(guò)消除連續(xù)圖像之間的時(shí)域冗余信息來(lái)壓縮視頻。
視頻編碼是壓縮和可能改變視頻內(nèi)容格式的過(guò)程,有時(shí)甚至將模擬源更改為數(shù)字源。在壓縮方面,目標(biāo)是減少占用空間。這是因?yàn)樗且粋€(gè)有損的過(guò)程,會(huì)拋棄與視頻相關(guān)的信息。在解壓縮以進(jìn)行回放時(shí),創(chuàng)建原始的近似值。應(yīng)用的壓縮越多,拋出的數(shù)據(jù)越多,近似值與原始數(shù)據(jù)相比越差。
為什么可以壓縮?(本質(zhì)為去除冗余信息)
1)空間冗余:圖像相鄰像素之間有較強(qiáng)的相關(guān)性 2)時(shí)間冗余:視頻序列的相鄰圖像之間內(nèi)容相似 3)編碼冗余:不同像素值出現(xiàn)的概率不同 4)視覺冗余:人的視覺系統(tǒng)對(duì)某些細(xì)節(jié)不敏感 5)知識(shí)冗余:規(guī)律性的結(jié)構(gòu)可由先驗(yàn)知識(shí)和背景知識(shí)得到
常用名詞簡(jiǎn)介
分辨率:幀寬度(Width) x 幀高度(Height)
幀率/幀速率:?jiǎn)挝唬篎rame per Second,(FPS)。即這個(gè)視頻每秒鐘播放多少幀圖像,如果幀率為30fps,則說(shuō)明這個(gè)視頻每秒鐘播放30幀圖像。
視頻碼率:視頻碼率就是數(shù)據(jù)傳輸時(shí)單位時(shí)間傳送的數(shù)據(jù)位數(shù),一般我們用的單位是kbps即千位每秒。通俗一點(diǎn)的理解就是取樣率,單位時(shí)間內(nèi)取樣率越大,精度就越高,處理出來(lái)的文件就越接近原始文件。
I幀、B幀、P幀
I幀表示關(guān)鍵幀。你可以理解為這一幀畫面的完整保留;解碼時(shí)只需要本幀數(shù)據(jù)就可以完成。(因?yàn)榘暾嬅妫㏄幀表示這一幀跟之前的一個(gè)關(guān)鍵幀(或P幀)的差別。解碼時(shí)需要用之前緩存的畫面疊加上本幀定義的差別,生成最終畫面。(也就是差別幀,P幀沒有完整畫面數(shù)據(jù),只有與前一幀的畫面差別的數(shù)據(jù))B幀是雙向差別幀。B幀記錄的是本幀與前后幀的差別(具體比較復(fù)雜,有4種情況)。換言之,要解碼B幀,不僅要取得之前的緩存畫面,還要解碼之后的畫面,通過(guò)前后畫面的與本幀數(shù)據(jù)的疊加取得最終的畫面。B幀壓縮率高,但是編解碼時(shí)會(huì)比較耗費(fèi)CPU,而且在直播中可能會(huì)增加直播延時(shí),因此在移動(dòng)端上一般不使用B幀。

3.傳輸
傳輸?shù)碾A段包括主播端推流到服務(wù)端,服務(wù)端的流分發(fā),觀眾端的拉流幾部分。
下圖介紹了項(xiàng)目中主播推流和觀眾端拉流的大體流程。

直播協(xié)議的選擇
國(guó)內(nèi)常見公開的直播協(xié)議有幾個(gè):RTMP、HLS、HDL(HTTP-FLV)、RTP
RTMP協(xié)議:
是Adobe的專利協(xié)議,現(xiàn)在大部分國(guó)外的CDN已不支持。在國(guó)內(nèi)流行度很高。原因有幾個(gè)方面:1、 開源軟件和開源庫(kù)的支持穩(wěn)定完整。? ? ? 如斗魚主播常用的OBS軟件,開源的librtmp庫(kù),服務(wù)端有nginx-rtmp插件。2、 播放端安裝率高。只要瀏覽器支持FlashPlayer就能非常簡(jiǎn)易的播放RTMP的直播,相對(duì)其他協(xié)議而言,RTMP協(xié)議初次建立連接的時(shí)候握手過(guò)程過(guò)于復(fù)雜(底層基于TCP,這里說(shuō)的是RTMP協(xié)議本身的交互),視不同的網(wǎng)絡(luò)狀況會(huì)帶來(lái)給首開帶來(lái)100ms以上的延遲?;赗TMP的直播一般內(nèi)容延遲在2~5秒。

HTTP-FLV協(xié)議:
即使用HTTP協(xié)議流式的傳輸媒體內(nèi)容。相對(duì)于RTMP,HTTP更簡(jiǎn)單和廣為人知,而且不擔(dān)心被Adobe的專利綁架。內(nèi)容延遲同樣可以做到2~5秒,打開速度更快,因?yàn)镠TTP本身沒有復(fù)雜的狀態(tài)交互。所以從延遲角度來(lái)看,HTTP-FLV要優(yōu)于RTMP。
HLS 協(xié)議:
即Http Live Streaming,是由蘋果提出基于HTTP的流媒體傳輸協(xié)議。HLS有一個(gè)非常大的優(yōu)點(diǎn):HTML5可以直接打開播放;這個(gè)意味著可以把一個(gè)直播鏈接通過(guò)微信等轉(zhuǎn)發(fā)分享,不需要安裝任何獨(dú)立的APP,有瀏覽器即可,所以流行度很高。社交直播APP,HLS可以說(shuō)是剛需。基于HLS的直播流URL是一個(gè)m3u8的文件,里面包含了最近若干個(gè)小視頻TS文件,假設(shè)列表里面的包含5個(gè)TS文件,每個(gè)TS文件包含5秒的視頻內(nèi)容,那么整體的延遲就是25秒。當(dāng)然可以縮短列表的長(zhǎng)度和單個(gè)TS文件的大小來(lái)降低延遲,極致來(lái)說(shuō)可以縮減列表長(zhǎng)度為1,1秒內(nèi)容的m3u8文件,但是極易受網(wǎng)絡(luò)波動(dòng)影響造成卡頓。通過(guò)公網(wǎng)的驗(yàn)證,目前按同城網(wǎng)絡(luò)可以做到比較好的效果是5~7秒的延遲,也是綜合流暢度和內(nèi)容延遲的結(jié)果。
RTP協(xié)議:
即Real-time Transport Protocol,用于Internet上針對(duì)多媒體數(shù)據(jù)流的一種傳輸層協(xié)議。實(shí)際應(yīng)用場(chǎng)景下經(jīng)常需要RTCP(RTP Control Protocol)配合來(lái)使用,可以簡(jiǎn)單理解為RTCP傳輸交互控制的信令,RTP傳輸實(shí)際的媒體數(shù)據(jù)。RTP在視頻監(jiān)控、視頻會(huì)議、IP電話上有廣泛的應(yīng)用,因?yàn)橐曨l會(huì)議、IP電話的一個(gè)重要的使用體驗(yàn):內(nèi)容實(shí)時(shí)性強(qiáng)。對(duì)比與上述3種或?qū)嶋H是2種協(xié)議,RTP和它們有一個(gè)重要的區(qū)別就是默認(rèn)是使用UDP協(xié)議來(lái)傳輸數(shù)據(jù),而RTMP和HTTP是基于TCP協(xié)議傳輸。
為什么UDP 能做到如此實(shí)時(shí)的效果呢?
關(guān)于TCP和UDP差別的分析文章一搜一大把,這里不在贅述,簡(jiǎn)單概括:UDP:?jiǎn)蝹€(gè)數(shù)據(jù)報(bào),不用建立連接,簡(jiǎn)單,不可靠,會(huì)丟包,會(huì)亂序;TCP:流式,需要建立連接,復(fù)雜,可靠 ,有序。實(shí)時(shí)音視頻流的場(chǎng)景不需要可靠保障,因此也不需要有重傳的機(jī)制,實(shí)時(shí)的看到圖像聲音,網(wǎng)絡(luò)抖動(dòng)時(shí)丟了一些內(nèi)容,畫面模糊和花屏,完全不重要。TCP為了重傳會(huì)造成延遲與不同步,如某一截內(nèi)容因?yàn)橹貍鳎瑢?dǎo)致1秒以后才到,那么整個(gè)對(duì)話就延遲了1秒,隨著網(wǎng)絡(luò)抖動(dòng),延遲還會(huì)增加成2秒、3秒,如果客戶端播放是不加以處理將嚴(yán)重影響直播的體驗(yàn)。
WebRTC協(xié)議
WebRTC 是一個(gè)由Google開源的實(shí)時(shí)通信項(xiàng)目, 主要目標(biāo)是對(duì)Web/原生App平臺(tái)上的語(yǔ)音、視頻、以及數(shù)據(jù)傳輸?shù)葘?shí)時(shí)通訊提供支持,底層也是基于UDP。
總結(jié):
以延時(shí)從低到高來(lái)看,協(xié)議上方案選擇為:RTP/UDP: 可以做到秒內(nèi)延時(shí),目前國(guó)內(nèi)的CDN都不支持,但有些公司開發(fā)了私有協(xié)議實(shí)現(xiàn)了基于它們的直播,而且它們的延時(shí)都小于1秒,甚至小于500ms, 像YY, 映客直播采用的第三方技術(shù)等;webRTC: 可以做到秒內(nèi)延時(shí),實(shí)際上它也是使用的RTP,是Google開源出來(lái)的,目前社區(qū)也開始活躍,做的人也多了;依據(jù)它出服務(wù)的公司國(guó)內(nèi)有聲網(wǎng),中國(guó)電信研究院等;HTTP-FLV: 內(nèi)容延遲可以做到2~5秒,打開快;RTMP: 內(nèi)容延遲可以做2~5秒,當(dāng)網(wǎng)絡(luò)不好造成重傳時(shí),延時(shí)會(huì)大量增加;HTML5 WebSocket: 方案還不成熟,延時(shí)可能也會(huì)在2~5秒;HLS:? 有5~7秒的內(nèi)容延遲
4.FFmpeg簡(jiǎn)單介紹
FFmpeg是一套可以用來(lái)記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開源計(jì)算機(jī)程序。采用LGPL或GPL許可證。它提供了錄制、轉(zhuǎn)換以及流化音視頻的完整解決方案。它包含了非常先進(jìn)的音頻/視頻編解碼庫(kù)libavcodec,為了保證高可移植性和編解碼質(zhì)量,libavcodec里很多code都是從頭開發(fā)的。
FFmpeg在Linux平臺(tái)下開發(fā),但它同樣也可以在其它操作系統(tǒng)環(huán)境中編譯運(yùn)行,包括Windows、Mac OS X等。這個(gè)項(xiàng)目最早由Fabrice Bellard發(fā)起,2004年至2015年間由Michael Niedermayer主要負(fù)責(zé)維護(hù)。許多FFmpeg的開發(fā)人員都來(lái)自MPlayer項(xiàng)目,而且當(dāng)前FFmpeg也是放在MPlayer項(xiàng)目組的服務(wù)器上。項(xiàng)目的名稱來(lái)自MPEG視頻編碼標(biāo)準(zhǔn),前面的"FF"代表"Fast Forward"。
Mac安裝FFmpeg
如果你的本本應(yīng)裝上XCode最新的版本那就最好不過(guò)的了,如果不是最新的版本,得先上App Store更新(安裝一系列的操作需要用到,可減少耗時(shí)),如果沒有安裝XCode的話,建議還是別玩MAC系統(tǒng)了
先安裝HomeBrew(官網(wǎng):https://brew.sh/)
?執(zhí)行命令/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
開始安裝FFmpeg,運(yùn)行命令:
brew install ffmpeg
查看mp3信息
ffprobe xxx.mp3
ffprobe高級(jí)用法
ffprobe -show_format? pm.mp4? //輸出格式化信息
ffprobe -print_format json? -show_streams pm.mp4? // 輸出每個(gè)流的具體信息(以JSON格式)
ffprobe -show_frames pm.mp4? //顯示幀信息
ffprobe -show_packets pm.mp4? //查看包信息
ffprobe -show_streams pm.mp4? //查看流信息
參照 http://www.itdecent.cn/p/e14bc2551cfd
將Mp3轉(zhuǎn)為pcm數(shù)據(jù)
```ffmpeg -i 餓狼傳說(shuō).mp3 -f s16le audio1.pcm```
(PS:s16le 指定pcm的音頻格式為(signed 16 bits little endian, 有符號(hào) 16 位小端))
播放pcm
ffplay -ar 48000 -channels 2 -f s16le audio1.pcm
播放的時(shí)候顯示音頻波形
ffplay -showmode 1 -ar 48000 -channels 2 -f s16le audio1.pcm
將pcm轉(zhuǎn)為mp3
ffmpeg -f s16le -ar 44100 -ac 2 -acodec pcm_s16le -i audio1.pcm audio1.mp3
給mp3加封面等信息
ffmpeg -i audio1.mp3 -i guazi.png -map 0:0 -map 1:0 -codec copy -id3v2_version 3? out.mp3
添加圖片水印到視頻上
ffmpeg -i out.mp4 -i iQIYI_logo.png -filter_complex overlay output.mp4
添加到右上方
ffmpeg -i out.mp4 -vf "movie=guazi.png[watermark];[in][watermark] overlay=700:10[out]" out_logo_r.mp4
去除水印
ffmpeg -i out.mp4 -vf delogo=x=768:y=20:w=78:h=60:show=1 out_delogo.mp4
抓取視頻的一些幀,存為jpeg圖片
ffmpeg -i out.mp4 -r 1 -q:v 2 -f image2 pic-%03d.jpeg
-r 表示每一秒幾幀
-q:v表示存儲(chǔ)jpeg的圖像質(zhì)量,一般2是高質(zhì)量。
ffmpeg -i out.mp4 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg
-ss 表示開始時(shí)間
-t表示共要多少時(shí)間。
轉(zhuǎn)換為Yuv
ffmpeg -i out.mp4 out.yuv
播放yuv
ffplay -video_size 848x478 out.yuv?
知識(shí)圖譜