FFmpeg版本:20171204
顯卡:GTX 965M
最近按壓需求很多,用libx265軟按壓速度難以承受,所以還是希望用顯卡硬按壓至少快壹點。之前有人跟我說硬壓的質量好像不如軟壓,但是我還是決定試壹試。在ffmpeg官網找到關於硬按的資料。
因為我用的是windows,所以驅動基本沒有特別配置。而且windows版的ffmpeg也是有參數配置的,這方面就不考慮太多了。Linux平臺可能需要配置參數什麽的。
按分為兩步,先解碼視頻,再編碼。Ffmpeg在這兩步中都提供了硬件加速方案。
官網給出的例子是基於h264的,可以使用h265的硬件參數:
Ffmpeg -codecs | sls cuvid(註意:sls是powershell的壹個命令,類似於linux下的grep命令)
妳可以看到這個:
DEV.L. hevc H.265 / HEVC(高效視頻編碼)(解碼器:hevc hevc_qsv hevc_cuvid)(編碼器:libx 265 nvenc _ hevc hevc _ nvenc hevc _ qsv)
解碼器提供hevc,hevc_qsv,hevc _ cuvid編碼器提供了libx265,nvenc_hevc,hevc_nvenc和hevc _ qsv,但是這個nvenc _ hevc實際上已經失效了。如果妳用了,他會提示妳自動轉到hevc _ nvenc。
我不太了解解碼器三種用法的區別,也沒怎麽研究過,因為在實際操作中,如果使用硬件解碼,是不能同時強制字幕的,會報錯。況且硬件解碼對整體壓制速度的提升並不大,所以他放棄了硬件解碼。
至於編碼器,libx265是軟壓縮,hevc_qsv好像是Intel的硬壓縮。詳情見此。那麽n卡只能用hevc_nvenc。
使用此命令查看此方法的參數:
ffmpeg -h編碼器=hevc_nvenc
可以獲得可用的參數。我們在這裏探索的是-cq參數,給出的描述是:
-CQ & lt;float & gtE..V....在VBR速率控制(從0到51)(默認為0)中,為恒定質量模式設置目標質量水平(0到51,0表示自動)
之所以感興趣,是因為它和libx265很像,也就是軟壓的-crf參數。所以下壹步就是在不考慮其他參數的情況下比較不同的cq。
我用的是《諜影重重5》的預告片抑制測試。原始視頻數據如下:
在命令的使用中
ffmpeg-I original . mov-c:v hevc _ nvenc-CQ X cqx.mp4
測試結束後。結果如下:
Libx265(軟壓力)
-cq 0(默認)
-cq 1
-cq 10
-cq 20
-cq 30
-cq 35
-cq 38
-cq 41
-cq 51
對比視頻在這裏。
可以看出,cq從1到30的變化並不大,41以上的圖基本看不下去。在與libx265的默認軟壓力進行比較後,選擇-cq值在35到40之間是壹個更好的選擇。
在後續的實際應用中,當我抑制運動較少的視頻,比如交響樂視頻時,-cq 37是我更好的選擇。