ffmpeg转码使用硬件加速
需求源于手机拍摄的视频,默认参数码率较大,拍摄的文件体积较大,不便于保存和转发。
手机默认拍照的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平台,发现硬件加速还提示缺失文件。下次再研究。
ffmpeg转码使用硬件加速的更多相关文章
- 【视频开发】【CUDA开发】FFMPEG硬件加速-nvidia方案
1.目标 <1>显卡性能参数: <2>方案可行性: 2.平台信息 2.1.查看当前显卡信息 命令: lspci |grep VGA 信息: 01:00.0 VGA com ...
- NVIDIA FFmpeg 转码技术分析
NVIDIA FFmpeg 转码技术分析 所有从 Kepler 一代开始的 NVIDIA GPUs 都支持完全加速的硬件视频编码,而从费米一代开始的所有 GPUs 都支持完全加速的硬件视频解码.截至 ...
- ffmpeg实现dxva2硬件加速
这几天在做dxva2硬件加速,找不到什么资料,翻译了一下微软的两篇相关文档.这是第二篇,记录用ffmpeg实现dxva2. 第一篇翻译的Direct3D device manager,链接:http: ...
- FFmpeg再学习 -- 硬件加速编解码
为了搞硬件加速编解码,用了一周时间来看 CUDA,接下来开始加以总结. 一.什么是 CUDA (1)首先需要了解一下,什么是 CUDA. 参看:百度百科 -- CUDA 参看:CUDA基础介绍 参看: ...
- 【并行计算-CUDA开发】【视频开发】ffmpeg Nvidia硬件加速总结
2017年5月25日 0. 概述 FFmpeg可通过Nvidia的GPU进行加速,其中高层接口是通过Video Codec SDK来实现GPU资源的调用.Video Codec SDK包含完整的的高性 ...
- 【视频开发】ffmpeg实现dxva2硬件加速
这几天在做dxva2硬件加速,找不到什么资料,翻译了一下微软的两篇相关文档.这是第二篇,记录用ffmpeg实现dxva2. 第一篇翻译的Direct3D device manager,链接:http: ...
- 【ARM-Linux开发】【CUDA开发】【视频开发】关于Linux下利用GPU对视频进行硬件加速转码的方案
最近一直在研究Linux下利用GPU进行硬件加速转码的方案,折腾了很久,至今没有找到比较理想的硬加速转码方案.似乎网上讨论这一方案的文章也特别少,这个过程中也进行了各种尝试,遇到很多具体问题,以下便对 ...
- 【并行计算与CUDA开发】英伟达硬件加速解码器在 FFMPEG 中的使用
目录(?)[-] 私有驱动 编译 FFMPEG 使用 nvenc 这篇文档介绍如何在 ffmpeg 中使用 nvenc 硬件编码器. 私有驱动 nvenc 本身是依赖于 nvidia 底层的私有驱动的 ...
- Chrome/Chromium HTML5 video 视频播放硬件加速
Chromium站点上有个大致的框图.描写叙述了Chromium的video在各个平台 - 包含Android - 上是怎样使用硬件资源来做视频编解码加速的: 而依据Android Kitkat上的C ...
随机推荐
- 【Java学习笔记之八】JavaBean中布尔类型使用注意事项
JavaBean是一个标准,遵循标准的Bean是一个带有属性和getters/setters方法的Java类. JavaBean的定义很简单,但是还有有一些地方需要注意,例如Bean中含有boolea ...
- POJ 1655 Balancing Act【树的重心】
Balancing Act Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14251 Accepted: 6027 De ...
- 关于int *a[常量]与int (*a)[常量]的分析与区分(详解)
前言: 小伙伴私信我说,int *a[常量]与int (*a)[常量]这个区分不开,C指针,确实是C中最难的部分,也是学C++,JAVA,包括你以后上岗用的非常频繁的东西,在这里我就简单论述一下吧,具 ...
- poj_2528Mayor's posters(线段树)
poj_2528Mayor's posters(线段树) 标签: 线段树 题目连接 Mayor's posters Time Limit: 1000MS Memory Limit: 65536K To ...
- html5 文本格式化
通常标签 <strong> 替换加粗标签 <b> 来使用, <em> 替换 <i>标签使用.然而,这些标签的含义是不同的:<b> 与< ...
- Entity framework 中Where、First、Count等查询函数使用时要注意
在.Net开发中,Entity framework是微软ORM架构的最佳官方工具.我们可以使用Lambda表达式在Entity framework中DbSet<T>类上直接做查询(比如使用 ...
- spring boot容器启动详解
目录 一.前言 二.容器启动 三.总结 =======正文分割线====== 一.前言 spring cloud大行其道的当下,如果不了解基本原理那么是很纠结的(看见的都是约定大于配置,但是原理呢?为 ...
- css样式小记
溢出文字展现为... .over-hidd { white-space: nowrap; text-overflow: ellipsis; overflow: hidden; }
- 什么是MVC ?
记得第一次面试phper(php是对我来说可以快速上手的另一web开发语言),人家问我MVC,我只知道m就是model,v就是view,c就是Controller,具体把其它的认识我是一无所知,结果我 ...
- Linux怎么查看软件安装路径 查看mysql安装在哪
https://jingyan.baidu.com/article/86112f1378bf282737978730.html Linux系统一般都是命令行界面,对于安装的软件也是通过命令安装的.对于 ...