全自动批处理,JXL与avif格式HDR图片相互转换

2 篇文章 0 订阅
2 篇文章 0 订阅

利用FFmpeg实现JXL与avif格式HDR图片相互转换,建议下载FFmpeg的FULL编译版本。

批处理文件内容如下:
1.avif2jxl.bat

@echo off
for %%a in (*.avif) do a2j-work.bat "%%a" %1

2.a2j-work.bat

ffmpeg -i %1 -c:v libjxl -distance %2 %1.d%2.jxl

命令格式:avif2jxl.bat <质量参数>
<质量参数>:范围-1至??,越小图像质量越高,文件越大。建议0.1-0.5(可以多做几次测试,找到自己合适的数值。)

3.jxl2avif.bat

@echo off
for %%a in (*.jxl) do j2a-work.bat "%%a" %1

4.j2a-work.bat

ffmpeg -i %1 -c:v libaom-av1 -still-picture 1 -crf %2 -pix_fmt yuv420p10le -color_primaries bt2020 -color_trc smpte2084 -colorspace bt2020nc -color_range pc %1.crf%2.avif

命令格式:jxl2avif <质量参数>
<质量参数>:越小图像质量越高,文件越大。建议8-32;
而且,越小越慢,越大越快(可以多做几次测试,找到自己合适的数值。)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
更新:使用librav1e编码器生成avif,(号称最快的av1编码器)
(不过,理论上libaom-av1的图像质量最好,但是,确实慢!)
仅需修改j2v-work.bat:

ffmpeg -i %1 -c:v librav1e -qp %2 -tiles 4 -pix_fmt yuv420p10le -color_primaries bt2020 -color_trc smpte2084 -colorspace bt2020nc -color_range pc %1.qp%2.avif

命令格式:jxl2avif.bat <图像质量参数>
<图像质量参数>:-1 至 255,越小越好。建议从16-32开始测试,这是很好的图像质量。如果觉得文件体积过大,可以提高数值。
另外,-tiles 4,可以根据自己的CPU的逻辑核心数来调整。(如果数值过小,CPU占用率跑不满。)
另外,-pix_fmt yuv420p10le,也可以更改为-pix_fmt yuv444p12le,可以实现12bit每通道的YUV444。Chrome浏览器是支持的。尽管Lightroom classic或Lightroom for IOS导出avif时只有10bit选项。

  • 21
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用jxl.jar包将对象list转换为excel的inputstream可以分为以下几个步骤: 1. 创建一个Workbook对象,用于创建Excel文件。 2. 创建一个WritableSheet对象,用于创建Excel文件中的Sheet。 3. 创建表头,将表头写入WritableSheet对象中。 4. 遍历对象list,将每个对象的属性值写入WritableSheet对象中。 5. 调整列宽,使得Excel文件中的内容能够完整显示。 6. 将Workbook对象转换为inputstream,以便后续操作。 下面是一个示例代码,可以参考一下: ``` // 创建Workbook对象 WritableWorkbook workbook = Workbook.createWorkbook(new File("output.xls")); // 创建WritableSheet对象 WritableSheet sheet = workbook.createSheet("Sheet1", 0); // 创建表头 Label label1 = new Label(0, 0, "姓名"); Label label2 = new Label(1, 0, "年龄"); sheet.addCell(label1); sheet.addCell(label2); // 遍历对象list,将每个对象的属性值写入WritableSheet对象中 List<Person> personList = getPersonList(); for (int i = 0; i < personList.size(); i++) { Person person = personList.get(i); Label name = new Label(0, i + 1, person.getName()); Label age = new Label(1, i + 1, String.valueOf(person.getAge())); sheet.addCell(name); sheet.addCell(age); } // 调整列宽 sheet.setColumnView(0, 20); sheet.setColumnView(1, 10); // 将Workbook对象转换为inputstream ByteArrayOutputStream baos = new ByteArrayOutputStream(); workbook.write(); workbook.close(); InputStream inputStream = new ByteArrayInputStream(baos.toByteArray()); ``` 相关问题: 1. 如何使用jxl.jar包读取Excel文件? 2. 除了jxl.jar,还有哪些Java库可以用于操作Excel文件? 3. 如何在Excel文件中添加图表?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值