這篇博客主要講有關於視頻壓縮的問題,解決視頻文件太大,不便於下載,佔用存儲空間過大等問題,在縮小視頻大小的同時,保證視頻的觀看質量。主要講如下幾點:ide
一、壓縮視頻工具ffmpeg工具
二、壓縮視頻的技術參數測試
三、視頻如何壓縮ui
1、壓縮視頻工具ffmpeg編碼
下載ffmpeg連接:https://ffmpeg.zeranoe.com/builds/;spa
安裝步驟一: 能夠根據你的電腦選擇64位或者32位,下載下來的是個壓縮文件,用解壓文件解壓就能夠了,我是安裝在C盤,如圖:設計
步驟二:配置環境,右擊「個人電腦」----->屬性,而後如圖所示:3d
步驟三:在cmd下,查看是否安裝成功視頻
2、壓縮視頻的技術參數blog
一、咱們先來了解下壓縮視頻參數(查看這些壓縮視頻參數,能夠用mediainfo軟件打開視頻文件,就能夠看到各類參數如截圖所示,以視頻3.mp4爲例):
二、在上述截圖中能夠看到3.mp4視頻音頻部分的位深度沒有顯示,這裏我用軟件Adobe Audition打開3.mp4視頻,能夠看到音頻部分的位深度是16bit
二、技術參數解釋
視頻尺寸:指的就是視頻的分辨率,常見的分辨率有4096*2304,1920*1080,720*576等。
視頻編碼:視頻編碼方式就是指經過特定的壓縮技術,將某個視頻格式的文件轉換成另外一種視頻格式文件的方式。視頻編碼格式常見到的有:MPEG-2 TS、Divx、Xvid、H.26四、WMV-HD和VC-1。
音頻編碼:音頻編碼方式指經過特定的壓縮技術對音頻數據進行處理的方法。
幀率:幀率(即視頻更新率)是用於測量顯示幀數的量度。測量單位爲「每秒顯示幀數」(Frame Per Second,FPS,幀率)或「赫茲」,單位用FPS用來描述視頻每秒播放多少幀,而單位用赫茲用來描述顯示器的畫面每秒更新多少次。 通常幀率越高,視頻畫面越流暢。
比特率:指每秒傳送的比特(bit)數,即每秒傳輸的文件大小。比特率規定使用「比特每秒」(bit/s 或 bps)爲單位。比特率越高,每秒傳送的數據越大。
採樣率:採樣率的單位是Hz,表示每秒採樣的次數。單位時間內取樣率越大,精度就越高,處理過的視頻文件就越接近沒有處理過的視頻文件。
碼率:碼率就是數據傳輸時單位時間傳送的數據位數,通常咱們用的單位是kbps即千位每秒。碼率與體積成正比:碼率越大,體積越大;碼率越小,體積越小。因爲文件體積與取樣率是成正比的,因此幾乎全部的編碼格式都想用最低的碼率達到最少的失真,「碼率」就是失真度,碼率越高越清晰,反之則畫面粗糙並且馬賽克多。
視頻部分的位深度:用於指定圖像中的每一個像素能夠使用的顏色信息數量,用「位即bit」爲單位。
音頻部分的位深度:單個聲道的採樣數據大小
Audio部分聲道:指聲音在錄製或着播放的時候在不一樣空間位置採集或回放的相互獨立的音頻信號,因此聲道數量也就是聲音錄製時的音源數量或回放時相應的揚聲器數量。
(1)關於Audio部分碼率的計算公式:
碼率(位/秒)=採樣率(HZ)* 採樣位深度(bit)* 聲道數量
論證"碼率(位/秒)=採樣率(HZ)* 採樣位深度(bit)* 聲道數量"公式的正確性:
1)量綱分析來看:
HZ * bit=bit/s,驗證公式不是錯的
2)從理論上看:
碼率是每秒傳輸的信息大小;
採樣率是每秒採樣的次數;採樣位深度是單個聲道的每次採樣數據大小;
(採樣率*位深度)指的就是音頻部分單個聲道每秒傳輸的數據大小;
而後兩個聲道傳輸的信息大小=單個聲道傳輸的數據大小 * 聲道數 ;
由此得出:Audio部分碼率=採樣率(HZ)* 採樣位深度(bit)* 聲道數量。
3)以一個未被壓縮的音頻文件爲例,驗證公式是否正確。
Audio部分碼率碼率=採樣率* 採樣位深度* 聲道數量=44.1KHZ * 16bit * 32= 1411.2 Kbps,與圖中碼率結果相符合,驗證公式正確 。
(2)Video部分碼率的計算公式
碼率(位/秒)= 屏幕顯示分辨率(無單位) * 彩色位數(位)* 幀率(幀數/秒等同於HZ)
1)量綱分析來看:
位/秒 = 位 * HZ ,驗證公式不是錯的。
2)從理論上看:
幀是指視頻中的圖像;
幀率是指每秒顯示的圖像數;
視頻部分的位深度是用於指定圖像中的每一個像素能夠使用的顏色信息數量;
一張圖像的像素總數等於畫面寬度像素數乘以畫面高度像素數的乘積;
像素是圖像信息大小的最小單位;
因此,一張圖片的信息大小=屏幕顯示分辨率(畫面寬度像素數*畫面高度像素數)* 位深度;每秒顯示的圖像信息量大小即碼=一張圖片的信息大小 * 幀率。從而驗證了公式「Video部分碼率= 屏幕顯示分辨率 * 彩色位數* 幀率」是正確的。
(3)關於視頻大小的計算公式:
Audio部分文件大小=Audio部分碼率* 視頻播放的總時間
Video部分文件大小=Video部分碼率* 視頻播放的總時間
整個視頻 文件大小=(Audio部分碼率+Video部分碼率)* 視頻播放的總時間
(注意:上述(1)(2)公式適用於不被壓縮的視頻文件。(3)公式都適用未被壓縮和壓縮過的視頻文件)
3、視頻如何壓縮
一、對於壓縮.mp4視頻體積,壓縮之後視頻的效果:在不改變視頻尺寸(分辨率不變)、視頻和音頻編碼不變(視頻格式不變,因此這兩個編碼不變)、幀率不變(保證畫面連貫度,因此幀率不變)的狀況下,經過改變比特率,使得視頻文件體積變小,不影響畫面和聲音質量,保證眼睛和耳朵感覺不到很大差異。
三、如何設置參數呢?
通常, 在壓縮視頻的時候,幀率參數都不改變,原視頻幀率是多少就是多少。碼率影響體積,與體積成正比:碼率越大,體積越大;碼率越小,體積越小。
如何設置壓縮的比特率呢?
壓縮視頻的音頻部分的碼率和視頻部分的碼率大小相比較來講,音頻部分的碼率能夠忽略不計,因此視頻的比特率數值能夠等同於視頻部分的碼率數值。讓視頻無卡頓的播放,設置的比特率要高於文件的讀入速度,此處以個人聯想電腦F盤爲例,下載一個Parkdale軟件測試F盤test.mp4讀入速度,如圖所示:
四、設計實驗計算:以視頻源test.mp4爲例,設置的比特率高於(磁盤讀寫速度平均值*8約等於500K,單位kbps),這裏設置比特率數值爲600K
一、壓縮的ffmpeg命令
參數解釋:
-i 輸入文件,後面跟的是文件的地址,若是test.mp4文件路徑和ffmpeg是在同一根目錄下,則直接輸入-i test.mp4。
-b 數據比特率,每秒傳輸的數據流量大小(kb/s),這個命令裏設置的比特率是600k,用於指定視頻的壓縮程度,後面跟的是壓縮原視頻後的視頻存儲路徑。
二、原視頻和壓縮後視頻參數,截圖以下:
1是視頻體積大小,2是視頻的比特率,3是視頻的尺寸,4是幀率,從這兩個圖中咱們能夠看到視頻壓縮的參數比特率發生了變化,視頻體積變小了,壓縮後的視頻體積由碼率能夠算出:約等於(時間*碼率/8=49*600/8=3.58MB),與實際壓縮後視頻大小有必定的偏差,由於audio的比特率忽略不計了。壓縮後的視頻比原視頻確定有點區別,不過不影響觀看質量。