SDR与HDR中间件应用场景说明
为什么需要
《自媒体影视后期数字助理中间件设计》的上一期为大家介绍了如何将“灰片“快速的完成Rec709调色。完成了第一步,为影像处理函数容器打下了基础,下一步即是让画面更加惊艳或者更加讨喜。
现在很多视频平台都支持上传一个HDR版本,许多视频平台也完成了对自有视频资源的SDR炫彩转制。开发这样的中间件有利于在媒体资产管理系统中嵌入该能力,便于快速升级媒体资产。
基本概念介绍
SDR
SDR全称是Standard Dynamic Range,意思是标准动态范围。与HDR相比,SDR图像不具有更全面的细节,不具备更宽的色彩范围。图像曝光过度,图像较亮部分的信息将丢失;同样,当图像曝光不足时,图像较暗部分的信息也会丢失。
HDR
HDR全称是High-Dynamic Range,意思是高动态范围。与普通图像相比,HDR可以提供更多的色彩范围和图像细节,提高图像明暗对比度,所见即所得,极大还原真实环境,呈现极高的图像品质。
这是一副标准动态范围和高动态范围画面的示意图,在SDR设备上是无法显示HDR的效果的。如果您正在使用SDR设备浏览本文,那么可以认为画面右侧标注为HDR的画面是经过SDR优化调色(某些视频平台称之为SDR炫彩)后的画面。
阿里云人工智能视觉生产能力
SDR转HDR
SDR转HDR能力可将普通SDR视频转化为HDR视频,色域提升至BT2020,色深提升至10bit,亮度提升至最高1000nit,以提供更高品质的视频内容。
升级HDR电影、电视剧等视频:将SDR格式的电影、电视剧视频,通过基于深度学习的SDR转HDR算法功能,即可获得宽色域、展现更多色彩细节的HDR格式视频。
SDR调色
视频SDR调色能力基于内容语义识别与内容颜色,自动优化SDR视频的颜色,提升视频色彩质量。
视频网站SDR片源色彩优化:对SDR格式的视频进行自动化调色优化,让视频获得更好的色彩表达与视觉质量提升。
谁会需要封装这样的云能力
自媒体快速出片
时事内容或定期更新的自媒体往往出片的时间预算非常紧张,完成素材拷贝之后很快就要进行初剪并发布,这样的节奏完全无法按照传统的方式,逐个画面,逐个场景的进行调色创作。
但相机保存的灰片即使进达芬奇的批处理流程对于小型工作室也是很大的挑战。使用云服务可以素材阶段即可上传到云端,保存到阿里云OSS之后即可触发函数计算进行媒资处理。而处理可以通过阿里云Serverless工作流设置成具有扩充能力的处理工作流,并对每个中间件处理结果单独保存。工作流中使用的中间件可以使用阿里云函数计算进行部署。可以在阿里云Serverless工作流中设置并行工作流,也可以设置串行的工作流。
例如:原始素材需要进行超分辨率 、SDR转HDR、插帧、调色、SDR调色、生成字幕文件、自动合成摘要、自动合成影片等操作。就可以将不同的中间件放置在工作流的并行或串行环节。
海量存量SDR视频内容
网络流媒体平台陆续开始支持HDR视频的时候,需要针对HDR回放设备有特殊的内容表现,本中间件可以实现媒体资产的快速升级和增值。许多已经完成制作的视频,可以直接在OSS中完成升级过程。并生成一个针对不支持HDR设备的优化版本。
目前在许多视频平台上,许多没有经过HDR制作的影视作品都有一个针对HDR设备的转换版本以及一个针对非HDR回放设备的SDR炫彩版本。
转换前准备工作
完成调色的Rec709色彩空间的视频文件
我们上一个函数计算的设计分享中输出的结果就是一个Rec709色域的视频文件,摄影机直出709的MP4也是可以的。
或者打开达芬奇调色软件,把灰片还原到Rec709然后在渲染输出也是可以的。
日常手机拍摄的视频也是可以作为本环节使用的素材文件。
由于海量的视频都符合要求,所以也可以用这样的方式来转制HDR和SDR优化后的影视文件。
录制规格和格式
阿里云的人工智能视觉生产API只能支持最大3860*2160分辨率的画面,也就是UHD(超清)。如果在文件选择了4K DCI格式(4096*2160),将会超出阿里云的要求,需要增加预处理的中间件,对画幅或分辨率进行调整。
录制格式支持较为丰富,包括:MP4,AVI,MKV,MOV,FLV,TS,MPG,MXF。但根据分析编码格式可支持H264、ProRes,可能支持H265。
特别说明,如果使用BMPCC4K、BMPCC6K等摄影机,只能使用MOV格式采用ProRes编码才能直接上传到阿里云OSS上出发该中间件。
文件大小不能大于1GB,也就是说ProRes中那些码率巨大的编码格式只能处理几秒中甚至一秒的素材。但码率过小会导致画面过度压缩会影响到画面效果。
根据阿里云API能力和应用场景特色,建议该处按照FHD分辨率25/30帧进行录制。后续在工作流中将插帧和超分辨率的API制作成中间件挂载到媒资处理工作流中。
如何搭建影视后期数字助理的SDR/HDR中间件
OSS
在阿里云OSS上搭建媒体资产存储系统,与本地NAS进行同步。需要对待上传文件进行哈希校验,并使用断点续传能力。
应当选择华东2的OSS作为该项目存储桶,原因文末解释。
函数计算
选择指定存储桶作为SDR转HDR或SDR调色优化API的触发器,一旦出现新文件上传并完成哈希校验后立即出发该函数容器。
该函数容器调用阿里云人工智能->视觉生产->SDR调色能力的API。以下引入阿里云API调试中心的Python实例代码。
# -*- coding: utf-8 -*-# This file is auto-generated, don't edit it. Thanks.importsysfromtypingimportListfromalibabacloud_videoenhan20200320.clientimportClientasvideoenhan20200320Clientfromalibabacloud_tea_openapiimportmodelsasopen_api_modelsfromalibabacloud_videoenhan20200320importmodelsasvideoenhan_20200320_modelsfromalibabacloud_tea_utilimportmodelsasutil_modelsfromalibabacloud_tea_util.clientimportClientasUtilClientclassSample: def__init__(self): passdefcreate_client( access_key_id: str, access_key_secret: str, ) ->videoenhan20200320Client: """ 使用AK&SK初始化账号Client @param access_key_id: @param access_key_secret: @return: Client @throws Exception """config=open_api_models.Config( # 必填,您的 AccessKey ID,access_key_id=access_key_id, # 必填,您的 AccessKey Secret,access_key_secret=access_key_secret ) # 访问的域名config.endpoint=f'videoenhan.cn-shanghai.aliyuncs.com'returnvideoenhan20200320Client(config) defmain( args: List[str], ) ->None: # 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378659.htmlclient=Sample.create_client('accessKeyId', 'accessKeySecret') convert_hdr_video_request=videoenhan_20200320_models.ConvertHdrVideoRequest() runtime=util_models.RuntimeOptions() try: # 复制代码运行请自行打印 API 的返回值client.convert_hdr_video_with_options(convert_hdr_video_request, runtime) exceptExceptionaserror: # 如有需要,请打印 errorUtilClient.assert_as_string(error.message) asyncdefmain_async( args: List[str], ) ->None: # 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378659.htmlclient=Sample.create_client('accessKeyId', 'accessKeySecret') convert_hdr_video_request=videoenhan_20200320_models.ConvertHdrVideoRequest() runtime=util_models.RuntimeOptions() try: # 复制代码运行请自行打印 API 的返回值awaitclient.convert_hdr_video_with_options_async(convert_hdr_video_request, runtime) exceptExceptionaserror: # 如有需要,请打印 errorUtilClient.assert_as_string(error.message) if__name__=='__main__': Sample.main(sys.argv[1:])
该函数容器调用阿里云人工智能->视觉生产->SDR转HDR能力的API。以下引入阿里云API调试中心的Python实例代码。
# -*- coding: utf-8 -*-# This file is auto-generated, don't edit it. Thanks.importsysfromtypingimportListfromalibabacloud_videoenhan20200320.clientimportClientasvideoenhan20200320Clientfromalibabacloud_tea_openapiimportmodelsasopen_api_modelsfromalibabacloud_videoenhan20200320importmodelsasvideoenhan_20200320_modelsfromalibabacloud_tea_utilimportmodelsasutil_modelsfromalibabacloud_tea_util.clientimportClientasUtilClientclassSample: def__init__(self): passdefcreate_client( access_key_id: str, access_key_secret: str, ) ->videoenhan20200320Client: """ 使用AK&SK初始化账号Client @param access_key_id: @param access_key_secret: @return: Client @throws Exception """config=open_api_models.Config( # 必填,您的 AccessKey ID,access_key_id=access_key_id, # 必填,您的 AccessKey Secret,access_key_secret=access_key_secret ) # 访问的域名config.endpoint=f'videoenhan.cn-shanghai.aliyuncs.com'returnvideoenhan20200320Client(config) defmain( args: List[str], ) ->None: # 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378659.htmlclient=Sample.create_client('accessKeyId', 'accessKeySecret') tone_sdr_video_request=videoenhan_20200320_models.ToneSdrVideoRequest() runtime=util_models.RuntimeOptions() try: # 复制代码运行请自行打印 API 的返回值client.tone_sdr_video_with_options(tone_sdr_video_request, runtime) exceptExceptionaserror: # 如有需要,请打印 errorUtilClient.assert_as_string(error.message) asyncdefmain_async( args: List[str], ) ->None: # 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378659.htmlclient=Sample.create_client('accessKeyId', 'accessKeySecret') tone_sdr_video_request=videoenhan_20200320_models.ToneSdrVideoRequest() runtime=util_models.RuntimeOptions() try: # 复制代码运行请自行打印 API 的返回值awaitclient.tone_sdr_video_with_options_async(tone_sdr_video_request, runtime) exceptExceptionaserror: # 如有需要,请打印 errorUtilClient.assert_as_string(error.message) if__name__=='__main__': Sample.main(sys.argv[1:])
根据该项目特点,可以考虑使用TS或Python较为适合。由于转换过程需要时间,也需要单独编写异步状态部分。
工作流
为实现流程整合,将该部分AI能力以函数计算形式封装为中间件,该函数可以被Serverless工作流掉用,当需要将该中间件加入到工作流时,应当取消OSS触发器。
在Serverless工作流的任务步骤中,异步调用函数计算可以更灵活地适应当前任务场景,避免限流等错误,同时可以简化流程中的错误处理和重试逻辑。
工作流中可以集成其他工作流,也可以整合消息服务,以便与现有的本地或云端的媒体资产管理系统结合。
返回的文件仅能保存30分钟,实现异步消息处理后应立即保存到OSS的结果桶当中,并触发其他函数计算容器或其他工作流。
视频调色能力 API 参数详解
HDR格式
PQ和HLG,默认为PQ模式。
通常行业相关人士有以下看法:一般的HLG适用于广电(根据用户设备的峰值亮度动态的调整最高显示亮度),PQ适用于数码电脑等(绝对的亮度,如果设备达不到,则进行削峰)。
可以认为PQ是把超出SDR亮度的区域削去做为死白显示。HLG则会根据设备进行动态调整最大亮度。
最大亮度
PQ支持HDR10、HDR10+和杜比视界设备,但最大亮度为600尼特,在2022年末,通常OLED显示设备的常规最大亮度为600。市场上有超过600尼特亮度的设备,但从全流程HDR支持的角度来看并不是所有设备都能符合要求。
HLG支持HDR400、HDR600、HDR1000的设备,最大亮度1000尼特。高端显示器,中高端的超高清电视机支持HDR1000能实现较好的回放效果。
码率
由于该API提供了一个码率的输入参数,则文件大小由码率和时长决定。
比如10Mbps的码率,60秒的体积计算方式如下:
(10Mb/8)*60s = 75MB
一般而言,输出码率大于输入码率是没有意义的。
HDR文件UHD分辨率60帧的视频码率低于80Mbps时画面质量可能会有明显的影响。
调色模型
l1和l2,默认为l2。阿里云官方标注L1为较弱,L2为较强。其实可以理解为,L2在调色过程中使用了类似达芬奇调色系统中的色彩增强,而L1则是仅调整了达芬奇调色系统中的曲线。
关于分辨率和编码
输入等于输出。
如果需要使用较高的分辨率,可以考虑针对需要上变换的视频文件进行超分辨率化,阿里云人工智能视觉生产中有相关能力,可以考虑封装为独立的中间件。
为保障兼容性,建议使用H264编码的MP4文件。
写在最后
我会陆续针对在产业场景中的许多应用分享如何利用阿里云的AI能力结合函数计算进行中间件的开发心得与实战总结。不会公布源代码,但从基本原理到架构方式都会做较为细致的介绍。
适合有一定行业开发经验的开发者阅读,也非常欢迎具体行业的从业者与我交流,无论是否从事开发。