ffmpeg轉碼使用硬件加速

需求源於手機拍攝的視頻,默認參數碼率較大,拍攝的文件體積較大,不便於保存和轉發。
手機默認拍照的720P視頻,默認碼率達到4M,實際上轉成1M就差不多了。
FFmpeg默認的轉碼是使用軟件解碼,然後軟件編碼,速度慢,CPU使用率太高(基於100%)。

本次測試
硬件環境:

CPU: Intel i5-6400 4核2.7GHz
RAM: 8GB 
SSD: Reeinno ST120GB
GPU: Intel HD Graphics 530 芯片集成顯卡

軟件環境:

Windows 7 SP1 64bit
FFmpeg version N-86175-g64ea4d1 Copyright (c) 2000-2017 the FFmpeg developers

1. 默認參數

ffmpeg.exe -i 20180206210632.mp4 -f mp4 20180206210632-1.mp4

得到 fps 57, speed 1.97x, CPU 95+%

Stream mapping:
Stream #0:1 -> #0:0 (h264 (native) -> h264 (libx264)) # 這裏看到編碼都是使用libx264
------
frame= 794 fps= 57 q=29.0 size= 5368kB time=00:00:27.56 bitrate=1595.6kbits/s speed=1.97x

2. 編碼使用硬件

ffmpeg.exe -i 20180206210632.mp4 -vcodec h264_qsv -f mp4 20180206210632-2.mp4

得到 fps 239, speed 8.34x, CPU 85+%

Stream mapping:
Stream #0:1 -> #0:0 (h264 (native) -> h264 (h264_qsv)) # 這裏看到編碼都是使用h264_qsv
------
frame= 720 fps=239 q=-0.0 size= 2909kB time=00:00:25.10 bitrate= 949.4kbits/s speed=8.34x

3. 解碼也指定硬件解碼

ffmpeg.exe -c:v h264_qsv -i 20180206210632.mp4 -vcodec h264_qsv -f mp4 20180206210632-3.mp4

得到 fps 219, speed 7.45x, CPU 60+%

Stream mapping:
Stream #0:1 -> #0:0 (h264 (h264_qsv) -> h264 (h264_qsv)) # 這裏看到編碼都是使用h264_qsv,但是沒有完全使用硬件加速
------
frame= 1867 fps=219 q=-0.0 size= 7869kB time=00:01:03.57 bitrate=1013.9kbits/s speed=7.45x

4. 指定硬件加速qsv

ffmpeg.exe -hwaccel qsv -c:v h264_qsv -i 20180206210632.mp4 -vcodec h264_qsv -f mp4 20180206210632-4.mp4

運行這個報錯

Impossible to convert between the formats supported by the filter 'graph 0 input from stream 0:1' and the filter 'auto_scaler_0'
Error reinitializing filters!
Failed to inject frame into filter network: Function not implemented
Error while processing the decoded data for stream #0:1
[aac @ 000000000234a940] Qavg: 2433.237
[aac @ 000000000234a940] 2 frames left in the queue on closing
Conversion failed!

後來經過大師兄FFmpeg微信羣 李忠@Intel的提示,視頻帶有旋轉信息,才發現手機拍攝的視頻自帶90°旋轉。
添加輸入參數-noautorotate後爲:

ffmpeg.exe -hwaccel qsv -c:v h264_qsv -noautorotate -i 20180206210632.mp4 -vcodec h264_qsv -f mp4 20180206210632-5.mp4

得到 fps 347, speed 11.7x, CPU 30+% 目前最好的效果了

Stream mapping:
Stream #0:1 -> #0:0 (h264 (h264_qsv) -> h264 (h264_qsv)) # 這裏看到解碼和編碼都是使用h264_qsv
------
frame= 5740 fps=347 q=-0.0 size= 24773kB time=00:03:12.77 bitrate=1052.8kbits/s speed=11.7x

嘗試過其他的軟件,比如:
HandBrake-1.0.7-x86_64-Win_GUI
MediaCoder-x64-0.8.52.5920
通過設置能達到編碼使用Intel QSV,但是解碼依然是CPU,並且使用率依然很高。

嘗試過Linux平臺,發現硬件加速還提示確實文件。下次再研究。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章