需求源於手機拍攝的視頻,默認參數碼率較大,拍攝的文件體積較大,不便於保存和轉發。
手機默認拍照的720P視頻,默認碼率達到4M,實際上轉成1M就差很少了。
FFmpeg默認的轉碼是使用軟件解碼,而後軟件編碼,速度慢,CPU使用率過高(基於100%)。微信
本次測試
硬件環境:app
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+%spa
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. 編碼使用硬件code
ffmpeg.exe -i 20180206210632.mp4 -vcodec h264_qsv -f mp4 20180206210632-2.mp4
獲得 fps 239, speed 8.34x, CPU 85+%orm
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+%blog
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. 指定硬件加速qsvinput
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平臺,發現硬件加速還提示確實文件。下次再研究。