用HEVC码流生成HEIF图像
前边两篇博客简单分析了HEIF格式和HEIF的参考代码如何下载、编译。本文记录从HEVC裸流生成HEIF图片的方法。
下载HEIF 2.0参考代码
按照前面一篇博客的方法下载和编译了最新的代码之后发现并没有直接从HEVC码流生成HEIF图片的代码,而是几个example工程代码(包括从HEIF转HEIF等)示例API如何使用。由于时间关系不太能细致地研究这些API的用法。
后来在网上看到Nokia的HEIF参考代码2.0版本有一个writerapp.exe是支持将HEVC裸流写成HEIF图片的。
编译得到writerapp.exe
HEIF 参考代码2.0版本的git链接在此https://github.com/nokiatech/heif/tree/v2.0 用SVN或者git都可以下载。按照前面一篇博客的方法下载和编译后可以得到writerapp.exe。运行–help命令可以看到writerapp.exe的输入是一个“configuration-file”,但是在代码中并没有找到这个configure file的示例。后来还是求助于Github才找到解决办法。
.\writerapp.exe --help
Usage: .\writerapp.exe [options] configuration-file
Supported options:
--help Print this help
--verbose, -v Print debug information
--version Print build version
--no-warnings Print errors only
获得和配置json文件
HEIF的参考代码更新到3.0版本后,可执行文件writerapp.exe和输入的json配置文件都不再适用,因此在github的wiki上显示“Deprecated”,但是我理解旧版代码也是符合HEIF标准的,毕竟标准并没有改动,后来验证也证实如此。
Nokia的git wiki上找到如下示例(页面上的json排列有些乱),分别以带缩略图的单图、带多个略缩图的图像集合、带缩略图的图像序列、派生的网格图等列举了json应当如何配置。
这里就以最简单的单图带缩略图的json进行整理和简单注释(json格式实际上是没有注释语法的,要用这个json的话请把注释删掉)。使用场景相同(即生成带缩略图的单图HEIF文件)时,只需要修改file_path、disp_xdim、disp_ydim参数即可。如有封装其他格式的HEVC码流为HEIF格式的需求,如HEVC序列、派生图等,可以在Nokia的git wiki上找到对应的json研究一下如何修改。
{
"general": {
"output": {
"file_path" : "output.heic" //指定输出文件名
},
"brands": {
"major" : "mif1", //指定FileTypeBox中的major_brand
"other" : ["mif1", "heic", "hevc"] //列出其他兼容的major_brand,"other"内容可删除
},
"prim_refr" : "1", //主要项目的uniq_bsid
"prim_indx" : "1" //主要项目的item index,从1开始
},
"content": [ {
"master": {
"uniq_bsid" : "1", //此内容(此处指该master)的唯一标识符,用于其他内容引用
"file_path" : "main_1440x960.265", //HEVC码流路径,主图
"hdlr_type" : "pict", //声明meta box 内容的结构或格式
"code_type" : "hvc1", //指明coded image item的编码类型
"encp_type" : "meta", //指明该部分数据的封装是 meta类型
"disp_xdim" : "1440", //指明显示宽度
"disp_ydim" : "960", //指明显示高度
"disp_rate" : "1" //指定显示的帧率,只对track有效
},
"thumbs": [ {
"uniq_bsid" : "2",
"file_path" : "thumb_240x160.265",
"code_type" : "hvc1",
"disp_xdim" : "240",
"disp_ydim" : "160",
"sync_rate" : "1"
} ]
} ]
}
编码得到HEVC码流
HEVC码流需要用HEVC编码器(如x265)生成,关于HEVC编码器的使用方法在此不作叙述,请自行查找相关资料。
生成HEIF格式图片
得到要显示的图和对应缩略图的HEVC码流后,对应修改上文json中的文件路径和显示宽高后,执行如下命令即可得到生成的heic图片(output.heic)。生成的图片可以在macOS High Sierra 、Windows 10 Build 17123、iOS 11及对应更新的系统上查看是否正确。
.\writerapp.exe configure.json