【教程】使用VapourSynth+ffmpeg将HLG视频压制为SDR 您所在的位置:网站首页 Hdr视频转码之后色彩有问题 【教程】使用VapourSynth+ffmpeg将HLG视频压制为SDR

【教程】使用VapourSynth+ffmpeg将HLG视频压制为SDR

2024-04-19 07:58| 来源: 网络整理| 查看: 265

本文首发于: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 实验室设备网 版权所有