【教程】使用VapourSynth+ffmpeg将HLG视频压制为SDR | 您所在的位置:网站首页 › Hdr视频转码之后色彩有问题 › 【教程】使用VapourSynth+ffmpeg将HLG视频压制为SDR |
本文首发于:https://github.com/nilaoda/Blog/issues/16 前言 鉴于目前HLG视频越来越多,本教程旨在帮助小白从零开始学会将HLG视频压制为普通的SDR视频并完成色彩转换 使用VapourSynth的好处是更加强大,可以做更多的事情 下载资源 下载ffmpeg https://ffmpeg.zeranoe.com/builds/ 解压后将bin目录下的ffmpeg.exe拿出来即可 下载VapourSynth https://github.com/vapoursynth/vapoursynth/releases 下载VapourSynth Editor https://bitbucket.org/mystery_keeper/vapoursynth-editor/downloads/ 下载L-SMASH-Works https://www.dropbox.com/sh/3i81ttxf028m1eh/AAABkQn4Y5w1k-toVhYLasmwa?dl=0&lst= 下载vapoursynth-tonemap https://github.com/ifb/vapoursynth-tonemap/releases 下载Python便携版 https://www.python.org/ftp/python/3.7.6/python-3.7.6-embed-amd64.zip 开始 资源下载完毕后,解压VapourSynth64-Portable-R48.7z、python-3.7.6-embed-amd64.zip、VapourSynthEditor-r19-64bit 将python-3.7.6-embed-amd64、VapourSynthEditor-r19-64bit中的所有内容移动到VapourSynth64-Portable-R48文件夹中: 此文件夹下,在地址栏输入cmd并回车: 测试环境 在cmd下,输入python.exe进入交互模式,并输入: 配置插件 解压L-SMASH-Works-r929-20170224-64bit.7z,将其中的\VapourSynth\vslsmashsource.dll复制到VapourSynth64-Portable-R48\vapoursynth64\plugins 测试 打开vsedit.exe,输入如下代码,加载我们的视频文件,按下F6检测脚本(需要等待其制作索引文件): import vapoursynth as vs core = vs.get_core() src = core.lsmas.LWLibavSource(source=r"E:\星月神话_1080pHLG10.mp4") src.set_output() 下方变绿说明没有问题: 按下F5可以预览视频: 显示色彩是欠饱和的,接下来就想办法给他转换到SDR 转换 配置插件 解压下载好的tonemap-r2-win64.7z,解压后的tonemap.dll复制到VapourSynth64-Portable-R48\vapoursynth64\plugins 修改脚本 方案1: import vapoursynth as vs core = vs.get_core() src = core.lsmas.LWLibavSource(source=r"E:\星月神话_1080pHLG10.mp4") #参数需要根据不同视频进行微调,不能做到普适 src = core.resize.Lanczos(clip=src, format=vs.RGBS, width=None, height=None,matrix_in_s="2020ncl",transfer_in_s="std-b67", transfer_s="linear",nominal_luminance=1000) src = core.tonemap.Mobius(src, exposure=6, transition=0.2, peak=300) src = core.resize.Lanczos(clip=src, format=vs.YUV420P10, matrix_s="709",primaries_in_s="2020", primaries_s="709",transfer_in_s="linear", transfer_s="709") src.set_output() F5预览效果: 方案2: import vapoursynth as vs core = vs.get_core() src = core.lsmas.LWLibavSource(source=r"E:\星月神话_1080pHLG10.mp4") #参数需要根据不同视频进行微调,不能做到普适 src = core.resize.Lanczos(clip=src, format=vs.RGBS, width=None, height=None,matrix_in_s="2020ncl",transfer_in_s="std-b67", transfer_s="linear",nominal_luminance=1200) src = core.tonemap.Hable(src, exposure=9, a=0.22, b=0.3, c=0.1, d=0.2, e=0.01, f=0.3, w=11.5) src = core.resize.Lanczos(clip=src, format=vs.YUV420P10, matrix_s="709",primaries_in_s="2020", primaries_s="709",transfer_in_s="linear", transfer_s="709") src.set_output() F5预览效果: 方案3: import vapoursynth as vs core = vs.get_core() src = core.lsmas.LWLibavSource(source=r"E:\星月神话_1080pHLG10.mp4") #参数需要根据不同视频进行微调,不能做到普适 src = core.resize.Lanczos(clip=src, format=vs.RGBS, width=None, height=None,matrix_in_s="2020ncl",transfer_in_s="std-b67", transfer_s="linear",nominal_luminance=1200) src = core.tonemap.Reinhard(src, exposure=2.7, contrast=0.5, peak=1.0) src = core.resize.Lanczos(clip=src, format=vs.YUV420P10, matrix_s="709",primaries_in_s="2020", primaries_s="709",transfer_in_s="linear", transfer_s="709") src.set_output() F5预览效果: 压制 将脚本保存好(此为为test.vpy),就可以开始压制了。我新建了Encode文件夹,方便整理。 通过VSPipe.exe喂给ffmpeg压制: ..\VSPipe.exe --y4m "test.vpy" - | "ffmpeg" -y -i - -color_range pc -pix_fmt yuv420p test.mp4 参数什么的自己设置吧 打包分享 开箱即用 (自行修改为zip后缀解压) 下载地址:http://pan.iqiyi.com/ext/paopao/?token=eJxjYGBgmBQtsZUBBNZ9qgMAFooD2Q.zip |
CopyRight 2018-2019 实验室设备网 版权所有 |