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由快到慢可以分為:ultrafastsuperfastveryfastfasterfastmediumslowslowerveryslowplacebo這9個等級,原則上愈慢則會有更好的壓縮效果或是畫質。但x264的9種preset到底快是能多快,慢是能多快?快的時候壓縮效果有多差?而慢的時候壓縮效果有多好呢?



本篇文章將會使用一個解析度為1920x1080、FPS為24、像素格式為yuv420p、長度為30秒的無損壓縮的片源,來實際使用x264編碼器進行轉檔測試。

測試用的影片檔

這個測試用的影片檔案來自於這個網站提供的Big Buck Bunny未壓縮影片檔。筆者擷取了其中的4:30~5:00的片段,其平均位元率為597197Kbps。

接著使用FFmpeg,以x265將其無損壓製成MP4檔案,使用的指令如下:

ffmpeg -i 'Big Buck Bunny.y4m' -vcodec libx265 -x265-params lossless=1 -preset veryslow 'Big Buck Bunny.mp4'

可以透過以下連結下載壓製好的檔案:

https://file.magiclen.org/index.php?file=426967204275636b2042756e6e792e726172

編碼器

透過FFmpeg 4.2.1來操作x264編碼器,x264的版本為snapshot-20191028-2245-stable

畫質差異分析工具

為了比較影片檔案之間的畫質差異,筆者使用了FFmpeg來計算SSIM,作法可參考這篇文章

測試結果數據

根據這篇文章所抓出的常用CRF(Constant Rate Factor),來針對CRF 18、23和30來進行所有x264 preset的轉檔測試,結果如下面三個表格:

x264-preset

x264-preset

x264-preset

測試結論

觀察結果數據,可以發現到以下幾點:

  • ultrafastmedium所需的編碼時間差異並不大。換句話說,當我們使用到slow或是比其更慢的preset時,編碼時間會比預設的medium還要大幅度地有感上升。
  • CRF愈高編碼時間會愈短。
  • CRF愈高,faster或是比其更快的preset的畫質愈會大幅下降,可見它們無法保證CRF的正常畫質。
  • fastplacebo的畫質相當接近,CRF愈高,愈慢的preset的壓縮效果愈不明顯。
  • placebo的編碼時間是veryslow3.2倍左右,然而placebo的畫質和位元率並沒有明顯比veryslow來得好,究竟該不該用placebo就見仁見智囉!
  • medium確實是編碼速度、畫質、影片壓縮率都兼具的最佳preset。如果想要省位元率並稍微提升畫質的話,使用slow犧牲一點點的編碼速度也是不錯的選擇。如果要以節省位元率為最優先考量,用以收藏影片的話,就用veryslow吧!