Skip to content

OKEGui使用说明

sinsanction edited this page Jun 1, 2024 · 56 revisions

1. 安装

  1. OKEGui 需要 .NET 4.5。Windows 8 / Windows Server 2012 及以上自带;Windows 7 和 Windows Server 2008 需要自行安装。此外请注意,版本号为 1809 以及更早的 Windows 系统(包括 Windows Server 2019)有 DLL 加载不能超过 128 个的限制,可能无法支持完整的滤镜包,故不再推荐使用。
  2. OKEGui 自带的 qaac 工具依赖 Apple QuickTime。请确保你的机器正确安装了 64-bit iTunes 组件或者 AppleApplicationSupport。注:整套压制环境打包内已经包含所需 QuickTime 文件,无需另外安装。
  3. 下载最新 Release 的 zip 压缩包,解压到一个纯英文目录下。双击其中 OKEGui.exe 运行。首次运行时可能需要指定 VSPipe.exe 的位置(整套压制环境打包不需要),主界面窗口显示后,在下方的“空闲内存数”填写你可以分配给压制使用的内存大小。一般来说配合 VapourSynth R55 以上或 VapourSynth-Classic 使用时无需指定手动限制内存,可以直接在“空闲内存数”填 0。

2. 需要文件准备

OKEGui 每一批任务需要由技术总监准备 2 个文件:一个 vpy 脚本文件和一个 json 文件。这 2 个文件需要放在同一个文件夹内,通常建议放在蓝光的 BDMV 目录下。

(1). 预处理脚本文件(vpy)

OKEGui 会读取 vpy 文件中几个固定的 tag:

  • #OKE:INPUTFILE 必须存在,作用是指定输入文件。接下来一行必须是“变量 = 文件名”的格式。例如:
#OKE:INPUTFILE
a = "00000.m2ts" # will be replaced
src = core.lsmas.LWLibavSource(a)

OKEGui 会在批量处理任务的时候,自动替换文件名以生成不同的脚本。

  • #OKE:DEBUG 可以不添加,作用是确保关闭 debug flag。例如:
#OKE:DEBUG
debug = True # will be replaced as 'None'
if debug:
    ......
else:
    res = mvf.Depth(res, depth=10)

OKEGui 会保证用于压制的脚本,debug flag 永远是 None(无论你判断 if debug == True 还是 debug == 1/2/3,都会正确执行 else: res = mvf.Depth(res, depth=10) 语句)。

  • #OKE:MEMORY 可以不添加,作用是让 OKEGui 根据主界面“空闲内存数”填写的数值来估算并设置一个合适的 VS 缓存最大值。例如:
#OKE:MEMORY
core.max_cache_size = 8000 # will be replaced

如前所述,现在我们一般是无需手动设置内存限制的,所以这个 tag 一般不需要。

  • #OKE:PROJECTDIR 可以不添加,可以用来获取 vpy 脚本文件所在的绝对路径,从而方便加载额外的脚本或滤镜。例如:
import sys
import os

#OKE:PROJECTDIR
projDir = '.'
sys.path.insert(1, projDir) # some packages rely on having '' as sys.path[0]
import custom  # import python modules under the project directory
core.std.LoadPlugin(os.path.realpath(os.path.join(projDir, 'libcustom.dll'))) # or load custom plugins

如果需要配合 RPC(RP Checker)功能,则 vpy 脚本内还需要定义一个额外的输出,其与成品相似,但是处理尽可能简单:

  1. 必须有相同的帧率和帧数。如果成品做了 IVTC/deinterlace/trim/splice 之类的操作,则为 RPC 准备的 clip 也需要做。
  2. 必须有相同的画面内容。如果做了对画面改动较大的操作,例如 crop/textsub 等操作,则为 RPC 准备的 clip 也需要做。
  3. 分辨率和 bitdepth 不重要,因为 RPC 会自动转为与成品相同的规格。

绝大多数情况下,src8 或 src16 就足够了。以 src8 为例,脚本里需要含有:

src8.set_output(1)

经过 set_output(1) 输出的 clip 会被用来和压制成品对比。

(2). 项目配置文件(json 或 yaml)

安装包里提供了若干样例 json 文件以供参考。以 json 为例,可以配置的项目有:

  • Version,目前可选 23。压制组内任务时必须设置为 3,此时会强制检查 VS 环境版本(即必须搭配移动版 VS 环境打包使用)。
  • VSVersion,指定移动版 VS 环境打包版本,例如 2023H1
  • ProjectName,自行填写。
  • EncoderType,必须是 x264 或者 x265
  • Encoder,填写编码器的文件名。可以使用相对或绝对路径。除非测试需要,不建议写这一项(即默认使用 OKEGui 自带的编码器)。
  • EncoderParam,编码器参数。不需要写 --y4m--output
  • ContainerFormat,压制成品封装容器,可以是 mp4mkv
  • AudioTracks 是一个 json array。其中,json 适用的源文件包含几条音轨,这个 array 就必须有几个项目。OKEGui 会自动跳过空音轨或者重复音轨(适用于那些每个源 M2TS 文件都有双音轨,但只有部分包含评论音轨,其他则是重复音轨的 Blu-ray 原盘),但是你依旧需要给出每条音轨的参数:
    • OutputCodec,可选 flacaacac3dts。其中 ac3dts 只能作为抽取原盘相同编码音轨使用,不支持重编码为这些格式。
    • Bitrate,前一项为 aac 时,可以指定码率。默认为 192(kbps)。
    • Lossy,标记是否强制有损重编码,可设置为 truefalse。如果为 true,则当源音轨为有损编码格式时也仍可重编码为 AAC,否则会报错。
    • MuxOption,封装格式,可选 DefaultMkaExternalExtractOnlySkip。默认为 Default,表示正常封装;Mka 表示额外封装在 MKA 文件中;External 表示外挂,会给文件名加上 CRC32;ExtractOnly 只做抽取;Skip 直接不抽取。
    • Language,轨道语言。默认为 jpn,可选 engchi 等等。
    • Name,轨道名称。例如可设置为 MainCommentary2.0ch5.1ch 等等。
    • Optional,标记是否为可选,可设置为 truefalse。如果为 true,则在原盘不存在该条轨道时直接忽略,而不报错。注意,如果有多条轨道均标记为 "Optional": true,则要求他们要么都存在,要么都不存在。
    • Order,自定义轨道顺序,可设置为范围内任意整数。一般来说,只需要把希望提前至音轨第一位的轨道设置为 1 即可;OKEGui 会将其余轨道保留源文件顺序排列。
  • SubtitleTracks 是一个 json array。json 适用的源文件包含几条字幕,这个 array 就必须有几个项目。OKEGui 会自动跳过空字幕轨,但是你依旧需要给出每条字幕轨的参数:
    • MuxOption,封装格式,可选 DefaultMkaExternalExtractOnlySkip,效果同上。注意对于 MKV 源中的 ASS 或 SRT 字幕只能设置为 Skip
    • Language,轨道语言。默认为 jpn,可选 engchi 等等。
    • Name,轨道名称。例如可设置为 JapaneseEnglish 等等。
    • Optional,标记是否为可选,同上。
    • Order,自定义轨道顺序,可设置为范围内任意整数。与上述音轨顺序类似。
  • InputScript,输入 vpy 脚本的文件名。脚本文件必须和 json 文件放在同一目录下。
  • Fps,脚本输出的帧率。可选 1.023.97624.00025.00029.97050.00059.940
  • FpsNumFpsDen,当帧率不是上述七种之一时,按照 VSPipe 输出的帧率填写。比如分别为 301,代表 30.000 fps。
  • TimeCode,表示是否为 VFR 输出。可选 truefalse。设置为 true 时,不用再设置 Fps
  • RenumberChapters,表示是否自动修正章节标题为 Chapter 01Chapter 02……等等。可选 truefalse。注意在设置为 true 时,自定义章节(手动放入的 TXT 文件)中的章节标题也将会被重命名。
  • Rpc,表示是否在压制完成后执行 RPC。可选 truefalse。执行 RPC 对 vpy 的要求见前一节。
  • InputFiles 是一个 json array,可以用于指定这个任务的输入源文件,例如 BDMV\\STREAM\\00000.m2ts。可以使用相对或绝对路径。
  • Config,默认的每个源文件的额外配置。这些参数一般单独在每一集的 json 里配置,这里只提供默认值。可以配置的参数有:
    • VspipeArgs 是一个 json array,每一项是一个 string,用 arg=value 的形式,指定传给 VSPipe.exe 的额外参数。

需要单独配置每一集的 Config,通过单独的 json 文件来指定(样例见附带 00001.m2ts.json)。

3. 载入并运行任务

  1. OKEGui 可以压制不同后缀名的源。除了 Blu-ray 原盘的 M2TS,还能以 MKV 等作为源文件。如果 Blu-ray 不是一集一个 M2TS 的,可以先通过 remux,封装出一集一个 MKV 文件来压制。
  2. OKEGui 会自动抽取 M2TS 对应的章节以及 MKV 内封的章节。如果需要对源章节做修改(如修正错误的章节时间或手动输入章节标题),请提前手动抽取章节文件,修改完毕后命名为与源文件同名的 txt,比如 00000.m2ts -> 00000.txt, EP01.mkv -> EP01.txt,并放到源文件同目录下。手动编辑的章节文件名也可以加上语言标签,例如 00000.jpn.txt,封装时会自动带上。
  3. 负责压制的组员,必须先检查确保自己的机器上,vpy 能正确输出,且画面正常。
  4. 点击新建任务按钮:
    • 选择 OKEGui 项目文件,载入 json 文件。如果载入成功,界面会显示任务项目的一些摘要。如果失败,按照报错信息修改 json 文件,重新尝试载入。成功后点击下一步。
    • 选择输入文件。输入文件就是待压制的视频源文件。OKEGui 可以多选文件,也可以在选择一个文件之后,再次点击“打开文件”选择其他的文件。选择错了可以点击并删除。通常技术总监在交代任务时,会说明这套方案适用于哪些 M2TS 文件;或者可能已经在 json 的 InputFiles 指定好,会直接在这个界面显示出来。点击下一步。
  5. 当前主界面上应该已经添加了刚刚指定的所有压制任务,每个源文件一个。如果还需要添加其他方案的压制任务,重复步骤 4。
  6. 如果需要多开,点击右下角“新建工作单元”和“删除工作单元”调整同时运行的任务数量。
  7. 点击“运行”开始压制任务。
  8. 压制任务完成后,可以点击主界面“花屏检查”一栏中的按钮查看 RPC 结果。
  9. 双击已完成的压制任务所在的行(“花屏检查”结果按钮除外),可以直接打开成品所在目录并高亮成品文件。
  10. 项目的 json 文件所在目录下会有一个名为 output 的目录,包含所有成品文件,如 MKV、MKA 和 MP4 等;如果花屏检查未通过,则该任务的 RPC 结果文件也将出现在 output 里。负责压制的组员需要将 output 内的文件整理上传,交给其他相关负责组员。

4. Gui界面使用指南

注意:本小节需要 OKE 版本 >= 9.0.0,低版本缺少部分功能,并且某些按钮功能有问题。

(1). OKE中相关概念解释

  • 任务 (Task)

    从单个源(例如 m2ts)到成品(例如 mkv)的整个制作过程。OKE 主程序界面的列表里的每一行就是一个任务。

  • 工作步骤 (Job)

    每个任务会被分解成多个工作步骤,并依次执行。
    目前完整的执行顺序为:

    • (1). 获取视频信息、检查脚本
    • (2). 准备时间码 / 章节文件 / qpfile
    • (3). 分析并检查音轨、字幕轨信息
    • (4). 抽取音轨、字幕轨
    • (5). 音轨、字幕轨去重去空
    • (6). 音轨转码
    • (7). MKA 封装
    • (8). 视频压制
    • (9). 最终封装
    • (10). RPC 检查
  • 工作单元 (Worker)

    后台负责具体执行任务的线程,一个工作单元里只能同时执行一个任务。
    工作单元的数量决定了当前可以并行执行的任务数,有几个工作单元就能允许几个任务同时进行。

  • 选中任务

    在任务列表上点击一行使其高亮,即选中该任务。
    所有对单个任务的操作都需要先选中一个任务。

  • 勾选任务

    任务列表上每行开头都有一个勾选框,打钩即勾选上该任务。
    所有批处理的操作都只对打钩的任务生效。
    只有不在运行中状态的任务才能被勾选。

(2). OKE Gui界面功能

  • 运行 / 终止 / 暂停 / 恢复

    这四个按钮控制 OKE 的状态。

    • 当 OKE 处于空闲并且任务列表有被勾选的“等待中”任务时,可以点击“运行”,启动 OKE 开始压制。
    • 当 OKE 处于运行时,将从上到下,把被勾选的“等待中”任务依次分到所有空闲的工作单元。
    • 当 OKE 处于运行/暂停时,可以使用“终止”强行结束所有工作单元的任务。终止有小概率失败,一般再次点击即可。
    • 当 OKE 处于运行时,可以使用“暂停”暂时停下所有工作单元的任务。
    • 当 OKE 处于暂停时,可以使用“恢复”继续所有工作单元的任务。
  • 工作单元数量

    工作单元数量会显示两个值,外面的是当前设定的工作单元数量,括号里的是后台运行中的工作单元数量。

  • 新建工作单元 / 删除工作单元

    新建和删除只会更改当前设定的工作单元数量。
    如果 OKE 处于运行状态,新建工作单元会立刻生效,找出下一个待压制任务,立刻开始执行。
    如果 OKE 处于运行状态,删除工作单元会延迟生效。如果后台工作单元数量大于设定的工作单元数量,超过的部分会在结束当前任务后自行退出。
    使用“终止”可以立刻清空所有后台工作单元。

  • 上移 / 下移 / 置顶

    只对“等待中”的任务生效,可以改变当前选中任务的排序,越上方的任务会越先执行。

  • 删除

    对非运行中的任务生效,将当前选中任务从列表中删除。

  • 清空

    对非运行中的任务生效,将当前被勾选的所有任务从列表中删除。

  • 更新章节

    更新当前被勾选且是“等待中”的任务的章节状态。
    在载入任务时,OKE 会对章节状态做一个初步检测,会有如下状态:外挂章节(Yes)、MKV 源且内含章节(MKV)、有 BD 结构(Maybe)。
    如果载入任务时忘了放置外挂章节,可以在开始压制前放置好章节,使用“更新章节”重新检测章节状态。

  • 空闲内存数

    该功能已经弃用,建议直接填 0。

5. 常见错误检查

  1. 如果在载入 json 文件之后,出现非常混乱的报错,通常是因为 json 文件有语法错误。
  2. 如果指定输入文件后,提示“添加多个输入文件请确保 VapourSynth 脚本使用 OKE 提供的模板。”,说明 vpy 文件里没有 #OKE:INPUTFILE
  3. 如果编码后弹窗出错,状态改为“音轨数不一致”,说明 json 里指定的音轨数量,和原盘中实际抽取出的数量不一致。json 里音轨数量必须和原盘里的完全一致。
  4. 如果编码后弹窗出错,状态变为“x265 出错”,说明 x265 编码报错。如果是任务开头出现问题,多半是编码器参数写错了。
  5. 如果编码后弹窗出错,状态变为“vpy 出错”,说明 vpy 脚本解读错误。
  6. 其他未知错误,如果造成程序崩溃或者任务中断,请开任务管理器,先看看是否还有 VSPipe.exe / x265.exe 在占用运算资源(记得汇报这一点),再手动掐掉。部分错误发生的之后,程序将跳过出错任务,继续跑完接下来的任务。
  7. 汇报未知错误的时候,请尽可能还原所用的压制环境版本以及 json、vpy 以及编码器文件,以及源的 M2TS 类型(帧率、音轨数量、是否有字幕、是否准备了章节等等)。