需求源于手机拍摄的视频,默认参数码率较大,拍摄的文件体积较大,不便于保存和转发。
手机默认拍照的720P视频,默认码率达到4M,实际上转成1M就差不多了。
FFmpeg默认的转码是使用软件解码,然后软件编码,速度慢,CPU使用率太高(基于100%)。

本次测试
硬件环境:

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

软件环境:

Windows  SP1 64bit
FFmpeg version N--g64ea4d1 Copyright (c) - the FFmpeg developers

1. 默认参数

ffmpeg.exe -i .mp4 -f mp4 -.mp4

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

Stream mapping:
Stream #: -> #: (h264 (native) -> h264 (libx264)) # 这里看到编码都是使用libx264
------
frame= fps= q=29.0 size= 5368kB time=::27.56 bitrate=.6kbits/s speed=.97x

2. 编码使用硬件

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

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

Stream mapping:
Stream #: -> #: (h264 (native) -> h264 (h264_qsv)) # 这里看到编码都是使用h264_qsv
------
frame= fps= q=-0.0 size= 2909kB time=::25.10 bitrate= .4kbits/s speed=.34x

3. 解码也指定硬件解码

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

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

Stream mapping:
Stream #: -> #: (h264 (h264_qsv) -> h264 (h264_qsv)) # 这里看到编码都是使用h264_qsv,但是没有完全使用硬件加速
------
frame= fps= q=-0.0 size= 7869kB time=::03.57 bitrate=.9kbits/s speed=.45x

4. 指定硬件加速qsv

ffmpeg.exe -hwaccel qsv -c:v h264_qsv -i .mp4 -vcodec h264_qsv -f mp4 -.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 #:
[aac @ 000000000234a940] Qavg: 2433.237
[aac @ 000000000234a940] frames left in the queue on closing
Conversion failed!

后来经过大师兄FFmpeg微信群 李忠@Intel的提示,视频带有旋转信息,才发现手机拍摄的视频自带90°旋转。
添加输入参数-noautorotate后为:

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

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

Stream mapping:
Stream #: -> #: (h264 (h264_qsv) -> h264 (h264_qsv)) # 这里看到解码和编码都是使用h264_qsv
------
frame= fps= q=-0.0 size= 24773kB time=::12.77 bitrate=.8kbits/s speed=.7x

尝试过其他的软件,比如:
HandBrake-1.0.7-x86_64-Win_GUI
MediaCoder-x64-0.8.52.5920
通过设置能达到编码使用Intel QSV,但是解码依然是CPU,并且使用率依然很高。

尝试过Linux平台,发现硬件加速还提示缺失文件。下次再研究。

最新文章

  1. Git小技巧 - 指令别名及使用Beyond Compare作为差异比较工具
  2. WebRTC的一个例子
  3. javascript面向对象系列第一篇——构造函数和原型对象
  4. linux socket
  5. JqueryDemoTools-用于整理jQueryDemo 分类: C# 公共资源 2014-12-02 16:50 224人阅读 评论(1) 收藏
  6. hdu-4452-Running Rabbits
  7. Swift语言简介+快速上手
  8. POJ2570 Fiber Network(Floyd)
  9. java中的Integer的toBinaryString()方法
  10. linux tail命令的使用方法详解 (转载)
  11. scanf(),fscanf的详解
  12. 线程:Java主线程等待子线程结束
  13. Xcode 静态库调试策略
  14. PHP环境部署问题集合
  15. 苹果手表的真实触感信息(Real Touch Messaging)
  16. nginx 504 Gateway Time-out 解决办法
  17. Hybrid容器设计之第三方网站
  18. FasfDFS整合Java实现文件上传下载
  19. Vue2.0结合webuploader实现文件分片上传
  20. 用tornado实现图片标记

热门文章

  1. AspectCore动态代理中的拦截器详解(一)
  2. python写一个DDos脚本(DOS)
  3. Linux下安装PostgreSQL 转载linux社区
  4. MLlib--PIC算法
  5. memcached集群和一致性哈希算法
  6. 一个php技术栈后端猿的知识储备大纲
  7. sql子查询
  8. Android-第三天
  9. echarts使用总结
  10. angular 4 http 之web api 服务