H.264是由多個組織組成的JVT(Joint Video Team)在2000年代所制定的標準,也被分類在MPEG-4之下(MPEG-4 Part 10),也稱為MPEG-4 AVC,可以寫成H.264/AVC。H.264可在相同畫質下提供比過去MPEG-4標準更低的位元率。代表的編碼器為x264。x264有個很方便的編碼參數─preset,它可以幫助我們快速設定x264編碼時所用的眾多參數。依照編碼速度的不同,preset由快到慢可以分為:ultrafast
、superfast
、veryfast
、faster
、fast
、medium
、slow
、slower
、veryslow
、placebo
這9個等級,原則上愈慢則會有更好的壓縮效果或是畫質。但x264的9種preset到底快是能多快,慢是能多快?快的時候壓縮效果有多差?而慢的時候壓縮效果有多好呢?
本篇文章將會使用一個解析度為1920x1080、FPS為24、像素格式為yuv420p、長度為30秒的無損壓縮的片源,來實際使用x264編碼器進行轉檔測試。
測試用的影片檔
這個測試用的影片檔案來自於這個網站提供的Big Buck Bunny未壓縮影片檔。筆者擷取了其中的4:30~5:00的片段,其平均位元率為597197Kbps。
接著使用FFmpeg,以x265將其無損壓製成MP4檔案,使用的指令如下:
可以點我下載壓製好的檔案。
編碼器
透過FFmpeg 4.2.1來操作x264編碼器,x264的版本為snapshot-20191028-2245-stable
。
畫質差異分析工具
為了比較影片檔案之間的畫質差異,筆者使用了FFmpeg來計算SSIM,作法可參考這篇文章。
測試結果數據
根據這篇文章所抓出的常用CRF(Constant Rate Factor),來針對CRF 18、23和30來進行所有x264 preset的轉檔測試,結果如下面三個表格:
測試結論
觀察結果數據,可以發現到以下幾點:
ultrafast
到medium
所需的編碼時間差異並不大。換句話說,當我們使用到slow
或是比其更慢的preset時,編碼時間會比預設的medium
還要大幅度地有感上升。- CRF愈高編碼時間會愈短。
- CRF愈高,
faster
或是比其更快的preset的畫質愈會大幅下降,可見它們無法保證CRF的正常畫質。 fast
到placebo
的畫質相當接近,CRF愈高,愈慢的preset的壓縮效果愈不明顯。placebo
的編碼時間是veryslow
的3.2倍左右,然而placebo
的畫質和位元率並沒有明顯比veryslow
來得好,究竟該不該用placebo
就見仁見智囉!medium
確實是編碼速度、畫質、影片壓縮率都兼具的最佳preset。如果想要省位元率並稍微提升畫質的話,使用slow
犧牲一點點的編碼速度也是不錯的選擇。如果要以節省位元率為最優先考量,用以收藏影片的話,就用veryslow
吧!