0. 前言
本文的目的是记录 BDRip 的制作过程,免得以后从头再去找一遍网上的教程。这个制作过程主要参考了 VCB-Studio 的教程,另外还有一些细节参考了其他的一些教程,我尽量把能找到链接的教程贴在本文最后面。
1. 认识 BDMV 的目录结构
一般 BDMV 文件通常是 .iso
文件,解压或者加载之后应该可以看到两个文件夹:BDMV 和 CERTIFICATE。这两个文件夹的上级目录,我们称之为根目录。
BDMV 文件夹中比较重要的文件夹有两个:STREAM 和 PLAYLIST。
其中,STREAM 文件夹中就是我们需要的蓝光视频文件。
这些视频文件并不是都能播放,有些不能播放的可能包含有菜单按钮等信息。
PLAYLIST 文件夹中包含有后缀为 mpls 的文件,这些文件包含有播放列表的信息,可以直接通过播放器打开进行视频的播放。这些文件中还有蓝光视频的章节信息(之后提取章节信息就需要用到这些文件),可以在播放器中显示。
以上就是 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 信息就需要修改脚本。
脚本检查顺利通过之后,就可以按 F5 来预览载入的视频了。
我来简单解释一下这里的脚本。
首先我们看到这个 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. 视频预览的状态栏
状态栏这里可以给你很丰富的信息:
首先,我们可以看到总的帧数 (Frames)。一般一集 24 分钟,如果帧率是 24 的话,总帧数大概在 35000 左右,如果差的太多(10%以上)可能就有问题。
然后是分辨率 (Size),要和你最终想要的输出分辨率一致,1080p 就对应 1920x1080。
接着是帧率 (FPS),一般不同帧率的视频不能用同一套制作方案,动漫一般是 24 fps,特典可能是 30 fps。
最后是格式 (Format),一般 8bit 压制输出是 YUV420P8,10bit 是 YUV420P10。
4. 视频压制3 --- 简单的滤镜使用
我们在 VS 脚本中使用滤镜主要是为了在视频文件被送给 X265 等程序去压制之前进行一定的处理,包括:降噪、去色带、去锯齿、去光环等。
注意:多使用搜索引擎以及 VS 官方的滤镜库
这里简单列举几种滤镜:
- 降噪滤镜
- 去色带滤镜
- 掩模版工具 (Mask Tools) 和调色板工具
- 分离器和限制器
- 其他常用滤镜
通过对这些滤镜的组合使用,我们希望在尽量小的体积下获得尽量好的画质(主观感受)。
5. 视频压制4 --- 编码器的使用
在获得一个合适的 VS 脚本之后,我们就可以把视频送去编码器进行编码了。通常把前面写 VS 脚本的部分叫做前端处理,后面进行编码的部分叫做后端压制。
来源:如何让视频体积小一半,画质却不变(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 工具--(使用中出现了一些问题)。
- MeGUI 抽取音轨
解压并打开 MeGUI,选择 Tools 中的 HD Stream Extractor 工具
具体用法如下图
这里需要注意的是:BDMV 中的音轨可能不止一条,可能包括双声道的音轨、5.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 格式的音轨。另外,可能有些音轨体积很大,希望做一些压缩,就需要进行编码。
这里介绍两种编码:
- 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
这样配置好之后,就可以用 MeGUI 进行音频的编码
可以点击 Config 对编码参数进行细调,我这边就不演示了
- FLAC 编码
将 FLAC 解压,就可以运行编码,会得到一个文件名一样的 .flac
文件
"D:\BDRip_Tools\flac-1.3.2-win\win64\flac.exe" 00000_T2_Audio.w64
8. 章节信息处理
我们这里使用 VCB-Studio 的 Chapter Tool 来提取 BDMV 的章节信息。解压并运行
通常,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
的图片文件,我们打开就会发现其实就是蓝光碟播放时候会显示出来的菜单界面,我们就可以把显示的每一个章节的名字改成实际菜单中显示的。
9. 提取字幕
提取字幕的时候,我们就又需要用到之前提取音频时候的 MeGUI 的 HD Stream Extractor 了
和之前一样,只不过选中的是字幕,最后得到的是 .sup
文件,这是 BDMV 文件中常见的 PGS 字幕格式
10. 成品的封装
由于这里我需要 PGS 字幕、FLAC 音频等,所以选用了 MKV 的封装。如果是为了在移动设备上播放,可以选择兼容性更好的 MP4 的封装。
解压并打开 MKVtoolnix 软件,把之前准备好的视频、音频、字幕文件导入
在 MKVtoolnix 中也可以检查、修改我们的章节信息
修改好之后,把章节文件保存为 .xml
格式,并在输入页面中导入这个文件
最后开始混流,的到最后的成品,如果要发布,记得检查。
使用到的软件清单及简要说明
VapourSynth64Portable_2020_09_06.7z
是一个囊括几乎所有插件和许多工具的 VS 便携版,同时它还带了最新的 X265 和 X264,还包括了 VS EditorMediaInfo_GUI_20.09_Windows.exe
能够分析片源音频视频轨,给出这些片源的轨道信息,包括了音频/视频/字幕/章节等等,为下一步处理乃至封装时提供极其重要的信息MeGUI-2913-32.zip
MeGUI提供了抽流混流工具,也用来封装MP4,而且它还有章节编辑抽取工具,但是只支持AVS脚本mkvtoolnix-64-bit-51.0.0.7z
万能的MKV容器的万能封装工具flac-1.3.2-win.zip
方便省事的无损音频编码器ChapterTool.v2.33.33.331.7z
能够解析蓝光原盘的playlist,提取并编辑章节信息igstools
用于提取BD原盘菜单中的章节信息,使用它你必须得有个Python环境,记得先 pip install pypng