让ffmpeg支持10bit编码
文章版权由作者柯O德尔和博客园共有,请尊重并支持原创,若转载请于明显处标明出处:http://www.cnblogs.com/koder/
最近因为工作需要,要进行265 10bit编码,于是从ffmpeg官网下载了最新版的32位的ffmpeg可执行程序,使用如下命令进行编码:
ffmpeg.exe -i input.ts -vcodec libx265 -pix_fmt yuv420p10le -acodec copy output.ts
得到了一个很蒙蔽的结果:

注意看黄色这一行,说的是ffmpeg不支持yuv420p10le像素格式,自动切换为yuv420p进行编码,但是yuv420p编出来位深度只有8bit,我去,难道最新版本的ffmpeg不支持10bit编码?
于是不死心啊,然后各种百度谷歌,最后从国外的一个问答网址上看到有个国外友人说那是因为你用的ffmpeg自带的x265编码器不支持10bit编码,恍然大悟,从上面x265编码器输出的信息中也能看出来是只支持8bit编码的,那么解决办法就是自己编译一个支持10bit的x265库,然后再集成到ffmepg里面去,等于说要自己重新编译ffmpeg哦,编译过的同学应该都知道这是极其痛苦的事情,但是为了革命,没办法啊,那么就来吧,这里介绍linux下面的操作:
1. 编译支持10bit的x265库:
从官网下载源码包:https://bitbucket.org/multicoreware/x265/wiki/Home;
要让x265支持10bit编码,只需要修改CMake的一个编译选项即可:
tar -zxvf x265_2..tar.gz
cd x265_2./source
vim CMakeLists.txt
把option(HIGH_BIT_DEPTH "Store pixel samples as 16bit values (Main10/Main12)" OFF)修改为option(HIGH_BIT_DEPTH "Store pixel samples as 16bit values (Main10/Main12)" ON)即可;
最后执行CMake编译即可:
cd x265_2.3/build/linux
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/usr/local/x265_10bit -DENABLE_SHARED=OFF ../../source
make -j4
make install
检验是否是真的支持10bit:
cd /usr/local/x265_10bit/bin
./x265 --help
输出信息如下:
x265 [info]: HEVC encoder version 2.3
x265 [info]: build info [Linux][GCC 4.4.7][64 bit] 10bit
说明支持10bit编码了。
2. 把新编译的支持10bit编码的x265库集成到ffmpeg中:
这就是自己编译ffmpeg的过程,可以参考网上的例子,这里重点是介绍编译支持10bit编码的x265,就不再说明了。
注意事项:
1. 在修改x265的CMakeList时,发现了这么一行说明:
# NOTE: We only officially support high-bit-depth compiles of x265
# on 64bit architectures. Main10 plus large resolution plus slow
# preset plus 32bit address space usually means malloc failure. You
# can disable this if(X64) check if you desparately need a 32bit
# build with 10bit/12bit support, but this violates the "shrink wrap
# license" so to speak. If it breaks you get to keep both halves.
# You will need to disable assembly manually.
说明要使用x265进行10bit编码需要在64位的机子上运行,32位的不行哦;
2. ffmpeg官网上的windows编译好的版本,不管是最新的32位还是64位版本,默认只支持8bit编码,所以要进行10bit编码只能按照上面的方法对x265重新编译,然后再集成到ffmpeg里面。
让ffmpeg支持10bit编码的更多相关文章
- ubuntu系统下安装gstreamer的ffmpeg支持
当您在安装gstreamer到您的ubuntu系统中时,为了更好地进行流媒体开发,需要安装ffmpeg支持,但一般情况下,直接使用 sudo apt-get install gstreamer0.10 ...
- CodePage------Encoding 类支持的编码以及与这些编码关联的代码页(CodePage)
Encoding 类 .NET Framework 4 表示字符编码. 继承层次结构 System.Object System.Text.Encoding System.Text.ASCII ...
- ubuntu中eclipse 不支持gbk编码问题解决办法
今天在ubuntu 下, 把Windows下工程导入Linux下Eclipse中,由于工程代码,是GBK编码,而Ubuntu默认不支持GBK编码,所以,要让Ubuntu支持GBK. 方法如下: 1.修 ...
- FFmpeg源代码结构图 - 编码
===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...
- 让ubuntu下的eclipse支持GBK编码
把Windows下工程导入Linux下Eclipse中,由于以前的工程代码,都是GBK编码,而Ubuntu默认不支持GBK编码,所以,我们要让Ubuntu支持GBK,方法如下: 1.修改/var/li ...
- 获取jdk支持的编码类型
//获取jdk支持的编码类型 Map<String,Charset> maps = Charset.availableCharsets(); for(Map.Entry<String ...
- php开启mbstring扩展并设置支持utf-8编码
前一段时间使用一个服务的接口,因为调用接口时使用的参数里面有中文,调用接口会出现异常问题,后来才明白是编码不一致的问题.然而,我本地项目开发使用的是utf-8,接口那边也是需要utf-8的,那么问题来 ...
- FFmpeg的H264编码有内存泄漏吗??!!!
靠,内存泄漏好严重.开始怀疑是自己代码问题,调试了半天,又反复改写和优化代码,还是泄漏严重. 拿网上现成的FFMPEG H264编码的范例来测试,同样泄漏很严重. 百度了一下,有很多人遇到同样的问题, ...
- freeswitch 音 视频 支持的编码
FreeSWITCH 支持很多的语音编解码:[13] PCMU – G.711 µ-law PCMA – G.711 A-law G.722 G.722.1 G.722.1c G.726 G.726 ...
随机推荐
- 苹果手机使用替代onkeyup的方法
今天项目有这个问题,苹果手机就不行 使用keyup事件检测文本框内容: $('#keyup_i').bind('keyup', function(){ $('#keyup_s') ...
- HDU1081 最大字段和 压缩数组
最大字段和题型,推荐做题顺序: HDU1003 HDU1024 HDU1081 zoj2975 zoj2067 #include<cstdio> #include< ...
- KMP算法的细节问题
preface: 想必,很多人都知道D.E.Knuth与V.R.Pratt和J.H.Morris同时提出所谓的狂拽酷炫屌炸天的KMP算法,在对字符串的匹配(或是字符串的查找)方面表现出比较好的效率,该 ...
- Hexo+Github搭建博客
要使用Hexo,需要在你的系统中支持Nodejs以及Git,如果还没有,那就开始安装吧! 安装Node.js 下载Node.js 参考地址:安装Node.js 安装Git 下载地址:http://gi ...
- 从零开始教你封装自己的vue组件
组件(component)是vue.js最强大的功能之一,它可以实现功能的复用,以及对其他逻辑的解耦.但经过一段时间的使用,我发现自己并没有在业务中发挥出组件的最大价值.相信很多刚开始使用vue的朋友 ...
- viewpager的滑动
在一个已经是月黑风高快下班的时刻了,我们产品突然通知我们开会,要添加一个功能,他闲来无聊随便戳了戳facebook,说点开联系人的那个横向滑动的卡片式的效果不错,让我们在我们的app里添加这个效果,我 ...
- eclipse创建一个文件夹
如何给eclipse创建一个文件夹,便于项目的管理:有时我们的eclipse中会有很多项目的,有的是公司的如Project1,Project2,Project3....还有的呢, 也可能是自己平时做的 ...
- Promise对象解读
首先强调的是"Promise"是对象,也就是说与其他JavaScript对象的用法,没有什么两样:其次,它起到代理作用(proxy),充当异步操作与回调函数之间的中介.它使得异步操 ...
- LeetCode 39. Combination Sum (组合的和)
Given a set of candidate numbers (C) (without duplicates) and a target number (T), find all unique c ...
- angular-utils-ui-breadcrumbs使用心得
angular-utils-ui-breadcrumbs是一个用来自动生成面包屑导航栏的一个插件,需要依赖angular.UIRouter和bootstrap3.css.生成的界面截图如下,点击相应的 ...