大家好,我是布萊克。在拍攝影片的時候,時常會看到 100Mbps 這類的選項,你知道這是什麼意思嗎?不知道沒關係,這裡面有一些很有用的知識,布萊克也會用這篇文章告訴你應該怎麼提升影片品質。有幫助到你的話也歡迎幫我分享出去喔!
Bitrate 是什麼?
前面提到的 bps 是 bits per second 的縮寫,中文名稱為位元速率 (Bitrate),也就是每秒鐘可以傳遞多少位元 (Bit) 的意思,是用來計算頻寬最常見的單位。這樣的概念在電信和網路的領域稱為傳輸頻寬,而在多媒體稱為影像流量,同一件事情只是說法不同。
在位元速率中是以 bps 為單位,那麼
- 1kbps 就是每秒有 1,000 bits 的意思
- 1Mbps 就是每秒有 1,000,000 bits 的意思
Mbps 與 MB/s 差異
以下這段是寫給不懂位元組 (byte) 和位元 (bit) 關係的朋友看的,如果你已經理解,可以跳過喔!
看完 Mbps
之後,那還要再來看一個 MB/s
,它又是什麼?你可能會說「這不就是每秒幾 MB 的意思嗎?那與 Mbps 應該是同一個意思」。
這想法當然是錯的!
Mbps
與 MB/s
雖然都是講每秒鐘傳輸多少流量的意思,但差異就是在一個是小寫 b
,一個是大寫 B
。小寫 b
表示是 bit
的意思,也就是位元;大寫 B
表示是 byte
的意思,也就是位元組。
1 byte (位元組) = 8 bits (位元)。
也就是說,Mbps
要除以 8 才會是 MB/s
。
看到這裡覺得內容不錯的話,敬請按下方的 Liker 按鈕拍滿吧!這樣布萊克就會更有動力去分享更多優質的內容,或者也可以分享這篇文章。
內容經過精心整理,文章更新後將會自動收到通知!想知道更多資訊嗎?那就趕快訂閱!
->> 想要出國嗎?到這邊找尋便宜機票吧! <<-
影像流量 vs. 影片容量
講到網路速度「每秒的流量」的意思,你可能懂得是什麼意思,畢竟現在很多人都是吃到飽的網速。那同樣的概念搬到多媒體領域,「影像流量」又是什麼意思呢?
講簡單一點就是影片每秒包含的數據量,當需要記錄的訊息越多,影片容量就越大。
一般人拍影片的目的大多數是為了記錄生活,所以並不會太在意影片的細節。但如果今天換作是一個創作者可就不同了,影視作品相當注重畫面的細節,否則可能就會引來網友的抱怨。
看到這邊,你應該對於影像流量 (位元速率) 有點基本的認識了,但可能還不是那麼有 FU...
先讓你看兩張圖,這是我從一段影片擷取下來靜態圖,同樣都是 1080p 60fps 的影片。怎麼樣?是不是與你映像中 1080p 就應該要有優異的畫質有衝突呢?這就是位元速率的威力。
明明都是同樣的解析度,低位元速率的截圖會有類似馬賽克的效果,而高位元速率的截圖則相當清晰。光是截圖就有那麼大的區別了,如果換作是整部影片都這樣呢?那觀眾作何感想。
而影片的解析度越高,那就會需要更高的位元速率來紀錄畫面中的細節,但並不是越高越好,超過一定的門檻之後,肉眼就無法辨識出差異了。
目前多數的影片平台如 YouTube 或 Vimeo 都有限制影像流量,例如在 YouTube 內就有限制 4K 影片最多只有 45Mbps,以節省平台的硬碟空間與觀眾的網路流量。
很多相機可以拍到 4K 100Mbps 的影片,但要上傳到網路上只剩下 45Mbps,等於是要犧牲掉 55% 的細節呀!因此,要在這些限制下做到最好的影片品質是不容易的事情。
那麼應該怎樣在硬碟空間與影片質量上取得一個平衡呢?那你應該考量壓縮影片,或是調整影像流量至最佳化。
布萊克之前已經有寫過一篇文章介紹影片壓縮的概念了,快看看這篇文章解惑一下吧!
調整影像流量 (位元速率) 方法
看完上面的基礎介紹,那麼可以來談談怎麼在有限的影像流量達到最佳的品質了。因為網路上找得到的轉檔工具都有點複雜,布萊克也不確定影片中的解析度、音質、畫質、色彩深度...等有沒有被調整到。
因此,為了確保以下的內容不被其他的設定給動到,我用 ffmpeg
這個開放原始碼的自由軟體,但缺點是沒有任何 UI 介面,只有指令才能操作,因此我會在下方提供一些指令給你參考。
固定位元速率 CBR
CBR = Constant Bitrate
既然影像流量是有限制的,那最簡單且粗暴的方式就是固定成一個定值,讓每幀影格都用相同的空間,那就可以精準掌握影片的檔案大小了。
聰明如你,你一定也知道這不是一個好的調整方式,畢竟每個影片甚至每個畫面都不相同,這不可能會是最佳的影片品質。
如果不是硬碟空間考量,那布萊克建議你不要使用這個模式。
以下是 ffmpeg
的指令,因沒有原生的 CBR 模式,因此經由限制最大與最小的位元速率來模擬 CBR 模式。
ffmpeg -i 原始檔名.mp4 -c:v libx264 -x264-params "nal-hrd=cbr" -b:v 800k -minrate 800k -maxrate 800k -bufsize 3000k 新檔名.mp4 -benchmark
-c:v libx264
表示指定的編碼-x264-params "nal-hrd=cbr"
指定 CBR 模式-b:v
設定新影片的平均位元速率-minrate
設定最小的位元速率-maxrate
設定最大的位元速率-bufsize
控制緩衝區大小-benchmark
顯示轉換時間
可變式位元速率 VBR
VBR = Variable Bitrate
依照使用者自行設置的目標位元速率、最高與最低的位元速率,用以配置影格的空間。畫面比較簡單的影格就用低位元速率,複雜的畫面就用高位元速率。
如果想要讓更精確的運用位元速率,那還可以設置 2 個以上的階段 (稱為 Pass)。第 1 次事先分析影片,並且標註出幾個關鍵影格,讓那幾幀影格配置較多的空間給它們記錄資訊量,其他比較靜態的影格就配置較少的空間即可。
分析完後就知道整部影片的重要資訊在哪裡了,接著第 2 次就從頭開始限制位元速率。但也因為需要多一次的分析時間,所以輸出影片時需要多一些時間,這就看你是要時間還是要質量了。
ffmpeg -i 原始檔名.mp4 -c:v libx264 -b:v 2000k -pass 1 -f mp4 NULL -benchmark
ffmpeg -i 原始檔名.mp4 -c:v libx264 -b:v 2000k -pass 2 新檔名.mp4 -benchmark
-c:v libx264
表示指定的編碼-b:v
設定新影片的平均位元速率-pass
設定階段-f mp4
設定封裝格式-benchmark
顯示轉換時間
平均位元速率 ABR
ABR = Average Bitrate
這種模式與 VBR 相似,都要使用者自行設置的目標位元速率。不同的是,VBR 可能要經過兩次或多次的階段,但 ABR 只需要一次就能限制位元速率了,所以壓制的時間比較短。
不過,沒有事先分析影片要怎麼配置位元速率?
其實這個模式會預先讀取未來的幾個影格做為參考,如此就可以計算現在的影格要配置多少空間給它,但並不精準。
如果更後面的影格是比較有動感或說較豐富的畫面,如跑步之類的。前面的影格可能已經用完大量的空間了,那就只能犧牲後面的影格了。因此,這個模式可能會在影片前、後都有較差的畫質。
ffmpeg -i 原始檔名.mp4 -c:v libx264 -b:v 2000k 新檔名.mp4 -benchmark
-c:v libx264
表示指定的編碼-b:v
設定新影片的平均位元速率-benchmark
顯示轉換時間
恆定品質因子 CRF
CRF = Constant Rate Factor
當影片不知道要給多少位元速率時,或是沒有壓制經驗的朋友,要設置前面幾項參數真的很困難。這時使用 CRF 模式可能比較簡單,而且僅需要預先給定一個品質指標數值就好。
在這個模式下會自動分配位元速率來達到一定品質,每個影格都會配置適當的空間,藉此保持影片品質。
設定上並不需要指定目標位元速率,因此無法預測壓制之後的影片容量。CRF 僅需要設定一個數字,可以說是品質指標,它的範圍介於 0~51 之間,預設值是 23,0 是最高品質,但需要等待最久的壓制時間。
你可以自行調整品質參數,但數字小到一定的程度之後,肉眼也幾乎無法辨識出差異,可以斟酌一下。
ffmpeg -i 原始檔名.mp4 -c:v libx264 -crf 23 新檔名.mp4 -benchmark
-c:v libx264
表示指定的編碼-crf
設定 CRF 模式,數字越低,品質越高-benchmark
顯示轉換時間
做個小結論
上面講了很多位元速率的設定方式,每種都有其優劣之處。如果時間很多就使用 CRF 模式,有硬碟空間考量就用 CBF 模式,要兼顧硬碟與時間就選擇 VBR 或 ABR 模式。這樣的說法可能較為粗糙,可以都試看看自行比較一下各種模式之間的差異。
限制位元速率的方法還有很多,文章中討論的是壓縮影片的冰山一角而已。更何況這次討論的只有畫面而已,聲音的部分都沒有深入探討,但這不是本篇文章的重點。
而 ffmpeg
還有提供 x.264
的預設集 (Preset),x.264
是一種基於 MPEG-4 AVC/H.264 標準寫出來的工具。
經由設定預設集 (Preset),可以快速設定 x.264
編碼時所用的各種參數,總共有 10 種樣板。至於怎麼選就跟你電腦的 CPU 有關係,有興趣的可以自行摸索看看。
看到這裡覺得內容不錯的話,敬請按下方的 Liker 按鈕拍滿吧!這樣布萊克就會更有動力去分享更多優質的內容,或者也可以分享這篇文章。
內容經過精心整理,文章更新後將會自動收到通知!想知道更多資訊嗎?那就趕快訂閱!
->> 想要出國嗎?到這邊找尋便宜機票吧! <<-
做個實驗比較一下
以下的實驗都是拿旅遊時拍的同一段影片來壓制,解析度是 Full HD 1080p (1920x1080),位元速率是 50Mbps 60fps。影片原檔有 17 秒,總共 117MB。
相同位元速率,高畫質會很模糊
本次是採用 CBR 模式限制位元速率在 800kbps,分別壓制出 1080p 與 360p 影片。
從下方的截圖中應該不難發現高畫質的 1080p 影片,有很明顯的馬賽克,而且顏色有斷層,人臉也是模糊不清的。而 360p 的影片雖然也看不清人臉,但至少輪廓是相當清晰的,也沒有明顯的馬賽克。
相同解析度,高位元速率較清晰
本次是採用 CBR 模式,將同一個 1080p 影片分別限制位元速率 2000kbps 與 800kbps。
前面的介紹就有強調位元速率會影響影片品質,高位元速率能容納較多的細節,品質就會出來了。因此,2000kbps 的影片品質明顯比較優異。
雖然高位元速率很重要,但高到一定的程度之後,肉眼也會無法辨識出差異。舉個例子來說,下面就是 50Mbps 與 10Mbps 的差異,這兩者差距 5 倍的位元速率,但細緻程度似乎不到 5 倍。
n-Pass VBR 模式比較
本次是採用 VBR 模式,將同一個 1080p 影片限制平均的位元速率為 2000kbps 並分別以 1 次與 2 次階段 (Pass) 壓制。
在硬碟容量有限制的時候,經常會使用 VBR 模式來壓制影片,畢竟可以預測出影片容量。但如果位元速率過低,低到像是現在的 2000kbps,經過兩次的階段 (Pass) 可能會有反效果,馬賽克的感覺更明顯了。
建議要使用多次階段 (Pass) 壓制時,請先提高平均的位元速率,如提高至 10Mbps 之類的,以影片品質為優先。
原檔與 CRF 模式比較
本次是採用 CRF 模式,並且設定數值至預設的 23。
前面講了那麼多設定位元速率的方法,但詳細要設定多少倒是要按情況來判斷,無法有個統一的原則。這時使用 CRF 模式就比較簡單了,而且壓制的品質還不錯。
從下方的原始影片與 CRF 模式壓制的結果,應該不容易看出差異。即便布萊克將這兩張截圖疊在一起快速切換,也僅存在一點點差異而已。這也就是我們壓縮影片想要得到的效果,既節省硬碟空間,也不會讓影片品質損失太多。
結論
壓縮影片是一門很深的學問,寫了這篇文章才知道這裡面水有多深。如果文章上有遺漏一些重要的資訊也請見諒,或是可以在下方留言跟我討論你的看法。
經過前面的介紹,你應該知道影像流量 (位元速率) 的重要性了,這並不是數字越大越好,也要為了你的硬碟著想。
文章中也有介紹到如何壓制影片,布萊克是採用 ffmpeg
這個軟體,也可以使用你慣用的軟體來壓縮影片。除此之外還有介紹一些壓制的模式,每種都有適用的場合,沒有對錯。
以我個人來說,我會採用 VBR 或是 CRF 這兩種模式,畢竟對我來說壓制的時間可以在晚上睡覺的時候來做,時間上不會是問題,保留優良的品質比較重要。
如果覺得內容有幫助,麻煩幫我分享出去給更多人知道,或者留下你的評論,這樣會讓 Google 搜尋知道我的內容是有幫助的。或者也可以按下方的 Liker 鼓勵我。麻煩你囉!
by 工程師布萊克
留言