BDRip过程记录 --- 以言叶之庭为例

0. 前言

本文的目的是记录 BDRip 的制作过程,免得以后从头再去找一遍网上的教程。这个制作过程主要参考了 VCB-Studio 的教程,另外还有一些细节参考了其他的一些教程,我尽量把能找到链接的教程贴在本文最后面。

1. 认识 BDMV 的目录结构

一般 BDMV 文件通常是 .iso文件,解压或者加载之后应该可以看到两个文件夹:BDMV 和 CERTIFICATE。这两个文件夹的上级目录,我们称之为根目录。

Snipaste_2020-11-26_22-18-22.png

BDMV 文件夹中比较重要的文件夹有两个:STREAM 和 PLAYLIST。

Snipaste_2020-11-26_22-20-49.png

其中,STREAM 文件夹中就是我们需要的蓝光视频文件。

Snipaste_2020-11-26_22-22-22.png

这些视频文件并不是都能播放,有些不能播放的可能包含有菜单按钮等信息。

PLAYLIST 文件夹中包含有后缀为 mpls 的文件,这些文件包含有播放列表的信息,可以直接通过播放器打开进行视频的播放。这些文件中还有蓝光视频的章节信息(之后提取章节信息就需要用到这些文件),可以在播放器中显示。

Snipaste_2020-11-26_22-28-02.png

以上就是 BDRip 时需要用的主要内容来源。

2. 视频压制1 --- 用 VapourSynth 载入视频

在一些早期的教程中一般会使用 AviSynth (AVS) 来处理视频,但是后来出现了 VapourSynth (VS) 这一更加现代的脚本工具,正在逐步替代前者。网上有关这两个工具的优缺点比较很多,我就不赘述了,这里我用的都是 VS。

我为了方便,使用的是一个开袋即食版的 VS 工具包,里面包含有大量插件和工具,还带有 X265 和 X264 程序。

先将我们需要的 STREAM 和 PLAYLIST 文件夹解压出来,然后把 VS 工具包也解压好。接下来打开工具包中的 VS Editor,写一段 VS 脚本来测试是否能够正常载入视频。

import vapoursynth as vs
import sys
import havsfunc as haf
import mvsfunc as mvf

core = vs.core
core.max_cache_size = 8000

a=r"D:\TheGradenOfWords\00000.m2ts"
src8 = core.lsmas.LWLibavSource(a, threads=1)

src8.set_output(0)

按 F6 来检查 VS 脚本,如果看到绿色的 Success 信息就说明可以正常载入视频,如果出现了红色的 Error 信息就需要修改脚本。

Snipaste_2020-11-26_23-15-16.png

脚本检查顺利通过之后,就可以按 F5 来预览载入的视频了。

Snipaste_2020-11-26_23-16-41.png

我来简单解释一下这里的脚本。

首先我们看到这个 VS 脚本实际上就是 Python 脚本,前面 4 行做的就是导入一些常见的处理视频的包,其中 vapoursynth 是 VS 脚本运行必须的包,sys 是 python 自带的包,而后面的 havsfunc 和 mvsfunc 则是视频处理时经常需要用到的两个包。接下来的两行是指定 VS 脚本运行时候的 core 以及可使用的最大缓存大小,。再接下来两行就是实际处理视频的部分,前一句定义了视频文件的路径,后一句则是将这个视频文件载入。最后一句则是将载入的视频进行输出,以供预览或者后续的压制。

VCB-Studio 的教程中指出多线程解码可能会出现一些未知的问题,所以指定 threads=1
第一次载入视频时可能会比较慢,载入之后会在视频文件的目录下生成一个.lwi文件
这里我用了变量名 src8,主要是因为视频是 YUV420P8 格式的,这一点可以通过 MediaInfo 来查看

3. 视频压制2 --- VS 脚本的检查

除了用 F6 来检查 VS 脚本以外,人工的检查其实更加重要,不要压制了半天发现错了再去返工。

3.1. 画面的检查

简单来说就是通过 F5 的预览来检查。

  • 第一不要用错视频文件,比如要处理第一集,结果导入的视频文件是第二集。
  • 第二看看预览时有没有出现花屏等不正常的现象,这可能和视频位深有关。

3.2. 视频预览的状态栏

状态栏这里可以给你很丰富的信息:

Snipaste_2020-11-27_00-11-21.png

首先,我们可以看到总的帧数 (Frames)。一般一集 24 分钟,如果帧率是 24 的话,总帧数大概在 35000 左右,如果差的太多(10%以上)可能就有问题。

然后是分辨率 (Size),要和你最终想要的输出分辨率一致,1080p 就对应 1920x1080。

接着是帧率 (FPS),一般不同帧率的视频不能用同一套制作方案,动漫一般是 24 fps,特典可能是 30 fps。

最后是格式 (Format),一般 8bit 压制输出是 YUV420P8,10bit 是 YUV420P10。

4. 视频压制3 --- 简单的滤镜使用

我们在 VS 脚本中使用滤镜主要是为了在视频文件被送给 X265 等程序去压制之前进行一定的处理,包括:降噪、去色带、去锯齿、去光环等。

注意:多使用搜索引擎以及 VS 官方的滤镜库

这里简单列举几种滤镜:

  1. 降噪滤镜
    1. Min Blur 算法
    2. KNL 降噪
    3. BM3D 降噪
    4. 混合降噪
  2. 去色带滤镜
    1. f3kdb
  3. 掩模版工具 (Mask Tools) 和调色板工具
    1. MaskedMerge
    2. Lut
    3. Expr
  4. 分离器和限制器
    1. MakeDiff
    2. MergeDiff
    3. LimitFilter
  5. 其他常用滤镜
    1. Interleave
    2. 调整 BitDepth
    3. 读取视频
    4. 截取片段
    5. 提取合并平面
    6. 帧率调节

通过对这些滤镜的组合使用,我们希望在尽量小的体积下获得尽量好的画质(主观感受)。

5. 视频压制4 --- 编码器的使用

在获得一个合适的 VS 脚本之后,我们就可以把视频送去编码器进行编码了。通常把前面写 VS 脚本的部分叫做前端处理,后面进行编码的部分叫做后端压制。

Snipaste_2020-11-27_04-54-46.png

来源:如何让视频体积小一半,画质却不变(B 站视频)

首先为了简单起见,我这里使用了前面提到的 VS 工具包中自带的 X265 10bit 的压制.bat脚本

@ECHO OFF
setLocal EnableDelayedExpansion

echo Starting x265 10 bit encode 
echo.

set out=x265_10bit_encode.hevc
set script="test.vpy"
set params=--crf 17 --preset fast --no-strong-intra-smoothing --no-sao --output-depth 10

VapourSynth64\vspipe.exe "%script%" - --y4m | "bin\x265.exe" - --y4m  %params% -o "%out%"
pause

需要注意的是,里面的参数 (params) 需要自己调整,这里给的是最最简单的。

关于编码,我这里写的很少,是因为各种编码模式以及对应参数的调试很麻烦,需要的可以找下面的链接
除了编码的参数可以调整,我们还可以选用 X264 来进行编码,同样的参数也需要调整
如果使用 AVS 脚本,那么除了 .bat 脚本,我们还可以用 MeGUI 来进行图形化的参数调控和编码
一般 X265 输出文件后缀名为 .hevc 或者 .265,X264 则可以设置为 .mkv,方便预览

6. 音轨处理1 --- 抽取音轨

前面我们处理的全部只有视频流,得到的文件没有音频流,所以接下来我们来处理 BDMV 中的音频流。

这里我们介绍两种方法,一种是使用 MeGUI 中的 Tools - HD Stream Extractor 工具;--另一种是 VCB-Studio 教程中给的一个 AutoEAC 工具--(使用中出现了一些问题)。

  1. MeGUI 抽取音轨

解压并打开 MeGUI,选择 Tools 中的 HD Stream Extractor 工具

Snipaste_2020-11-27_14-06-51.png

具体用法如下图

Snipaste_2020-11-27_14-13-05.png

这里需要注意的是:BDMV 中的音轨可能不止一条,可能包括双声道的音轨、5.1 声道的音轨、评论音轨等,抽取以及后面混流的时候要注意选用正确的音轨

  1. 直接调用 eac3to 工具
eac3to.exe "D:\TheGradenOfWords\00000.m2ts" 2:"D:\TheGradenOfWords\00000_2.flac" 3:"D:\TheGradenOfWords\00000_3.flac" 4:"D:\TheGradenOfWords\00000_4.flac" -progressnumbers

我在使用 MeGUI 时发现没法直接将音频流导出成 FLAC,所以我直接调用了 eac3to 工具,就可以直接导出成 FLAC

当然,这种只适用于零散的处理

7. 音轨处理2 --- 音轨编码

前面把音轨抽出来之后,可能不一定可以直接封装到最终的成品中,比如 MP4 封装就不兼容 FLAC 格式的音轨。另外,可能有些音轨体积很大,希望做一些压缩,就需要进行编码。

这里介绍两种编码:

  1. AAC 编码

AAC 编码器的麻烦就在于它需要苹果的应用程序支持安装才可以运行。更麻烦的是现在 Windows 上的 iTunes 只能通过 Microsoft Store 来安装(好像也可以通过 Chocolatey 安装,我没有测试过),安装之后 qaac.exe 依旧提示缺少某些 .dll 文件。最后,我的解决方案是正常安装好 iTunes 之后,找到其安装文件夹内的那些 .dll 文件(可以通过 Everything 找到),然后将他们复制到 qaac.exe 的同一个目录下。(如果没有安装 Visual C++ 2012 可能还需要 mscvp120.dll 和 mscvr120.dll)

ASL.dll,
CoreAudioToolbox.dll,
CoreFoundation.dll,
icudt*.dll,(*代表可能是任何数字或字母)
libdispatch.dll,
libicu*.dll
libicu*.dll (两个libicu都需要)
objc.dll
Snipaste_2020-11-27_16-22-15.png

这样配置好之后,就可以用 MeGUI 进行音频的编码

Snipaste_2020-11-27_17-18-24.png

可以点击 Config 对编码参数进行细调,我这边就不演示了

  1. FLAC 编码

将 FLAC 解压,就可以运行编码,会得到一个文件名一样的 .flac 文件

"D:\BDRip_Tools\flac-1.3.2-win\win64\flac.exe" 00000_T2_Audio.w64

8. 章节信息处理

我们这里使用 VCB-Studio 的 Chapter Tool 来提取 BDMV 的章节信息。解压并运行

Snipaste_2020-11-27_17-48-58.png

通常,Chapter Tool 可以自动分割好,选择右上方的下拉框,可以选择不同的 .m2ts 文件,比如这里显示 00000_9 就代表这是 00000.m2ts 的章节信息,而且有9个章节。点击保存即可

但是也存在一些比较麻烦的情况,比如多集动画是连在一起放在一个 .m2ts 文件中。这时候,基本就只能依靠播放 .m2ts 文件来观察实际的剧情分段。具体操作举例可以看 VCB-Studio 的教程 08。里面还包括了对视频、音频、字幕文件的切割。

另外,我们还可以利用 igstools 来提取 BDMV 中的菜单图片,这样可以获得实际的章节名称,让你的 BDRip 更加优秀。

我建议先安装一个 miniconda3,然后用 conda 创建一个虚拟环境来安装 igstools

conda create --name py4bdrip python
conda activate py4bdrip
pip install pypng
pip install https://github.com/SAPikachu/igstools/archive/master.zip

这样安装就完成了,先不要退出虚拟环境,我们来到 .m2ts的目录,然后运行 igstopng 来导出菜单图片,这些图片一般存在于那些无法直接播放的 .m2ts文件中。如果 igstopng 发现输入的文件中没有菜单图片,就会返回 Error: Failed to parse 00006.m2ts

igstopng 00004.m2ts
igstopng 00005.m2ts
...

然后你再去看这个文件夹中,就会多出很多 .png 的图片文件,我们打开就会发现其实就是蓝光碟播放时候会显示出来的菜单界面,我们就可以把显示的每一个章节的名字改成实际菜单中显示的。

Snipaste_2020-11-27_18-29-54.png

9. 提取字幕

提取字幕的时候,我们就又需要用到之前提取音频时候的 MeGUI 的 HD Stream Extractor 了

Snipaste_2020-11-27_18-45-48.png

和之前一样,只不过选中的是字幕,最后得到的是 .sup 文件,这是 BDMV 文件中常见的 PGS 字幕格式

10. 成品的封装

由于这里我需要 PGS 字幕、FLAC 音频等,所以选用了 MKV 的封装。如果是为了在移动设备上播放,可以选择兼容性更好的 MP4 的封装。

解压并打开 MKVtoolnix 软件,把之前准备好的视频、音频、字幕文件导入

Snipaste_2020-11-27_19-02-11.png

在 MKVtoolnix 中也可以检查、修改我们的章节信息

Snipaste_2020-11-27_19-04-25.png

修改好之后,把章节文件保存为 .xml 格式,并在输入页面中导入这个文件

Snipaste_2020-11-27_19-22-48.png

最后开始混流,的到最后的成品,如果要发布,记得检查。

Snipaste_2020-11-27_19-20-14.png

使用到的软件清单及简要说明

  1. VapourSynth64Portable_2020_09_06.7z
    是一个囊括几乎所有插件和许多工具的 VS 便携版,同时它还带了最新的 X265 和 X264,还包括了 VS Editor

  2. MediaInfo_GUI_20.09_Windows.exe
    能够分析片源音频视频轨,给出这些片源的轨道信息,包括了音频/视频/字幕/章节等等,为下一步处理乃至封装时提供极其重要的信息

  3. MeGUI-2913-32.zip
    MeGUI提供了抽流混流工具,也用来封装MP4,而且它还有章节编辑抽取工具,但是只支持AVS脚本

  4. mkvtoolnix-64-bit-51.0.0.7z
    万能的MKV容器的万能封装工具

  5. flac-1.3.2-win.zip
    方便省事的无损音频编码器

  6. ChapterTool.v2.33.33.331.7z
    能够解析蓝光原盘的playlist,提取并编辑章节信息

  7. igstools
    用于提取BD原盘菜单中的章节信息,使用它你必须得有个Python环境,记得先 pip install pypng

参考的一些教程

  1. VCB-Studio 教程专栏
  2. Encode Mystery
  3. NAZOrip
  4. 如何让视频体积小一半,画质却不变(B 站视频教程)
  5. VapourSynth的黑魔法教学(B 站视频教程)
  6. mawen1250@nmm-hd
  7. Ace Lee(知乎)
  8. 记第一次rip踩坑 by Legends Killer

你可能感兴趣的:(BDRip过程记录 --- 以言叶之庭为例)