如何播放与处理蓝光原盘
本文最后更新于:2024年11月10日
什么是蓝光原盘
蓝光光盘(英语:Blu-ray Disc,缩写:BD)是DVD之后的下一代光盘格式之一,用以存储高质量的影音以及高容量的资料。2015年蓝光光碟联盟公布了新的 UHD(Ultra HD Blu-ray)标准,支持 4k 视频。各个电影发行的光盘(影碟)是一般影音爱好者能接触到的最高品质资源,无论是画质还是音质都远超流媒体资源,一般还会附带花絮。
https://www.blu-ray.com/可以查询具体哪些电影发售过蓝光光碟。标题所说的蓝光原盘可视为从发售的光盘中1:1拷贝而来,一般为 iso 文件或者 bdmv 文件夹,iso 文件本质上是对 bdmv 文件夹的打包。
原盘结构
1 |
|
蓝光盘一般会经过加密,并且存在区域码限制(UHD 无区域码限制),只有经过授权的播放器才可以播放。本文不讨论原盘解密的技术细节,下文所涉及的原盘均可看作已解密或未加密的原盘。
如何播放
大部分播放器都可以直接播放 mpls 或 m2ts 文件,比如 potplyer 打开 index.bdmv 就可以索引到所有文件直接播放(需要注意的是,上文的 mpls 和 index.bdmv 都并非视频文件,他们的工作是引导播放器加载正确的 m2ts 文件,m2ts 才是真正的视频文件)。
但这并非完整版的蓝光原盘体验,蓝光原盘可以通过java
与播放器交互,从而选择不同的音轨、字幕和花絮等等,一般的播放器并不支持。
笔者觉得在电脑上原盘菜单可有可无,在电视上的用处会大一些(电视没有鼠标)。
但是很多精美的菜单看着确实会赏心悦目
windows
windows 平台主要有下列播放器支持原盘菜单
- 收费
- CyberLink PowerDVD
- DVDFab Player
- WinDVD
- TotalMedia Theatre(TMT)【已停止更新】
- Scenarist QC【已停止更新】
- 免费
- Leawo Blu-ray Player (免费版即可正常播放BD)
- VLC Media Player
- KODI
笔者在 windows 平台用过CyberLink PowerDVD和KODI
- KODI 非常难用,UI 和操作都只适合电视
- PowerDVD 的学习版很好找,体验还可以
linux
笔者目前主力使用 linux 平台(kubuntu 22.04),所以下面主要介绍 VLC。
安装 VLC 以及必要的库
1 |
|
若播放受保护的内容,请安装libbdplus
和libaacs0
(可能会自动作为VLC的依赖安装,未验证)
可参考arch wiki的相关内容。
转换为mkv文件
绝大多数情况下,笔者不会观看原盘,而是选择 REMUX 或者是重编码后的资源(大部分是较高码率的重编码资源)。主要原因如下:
- 对原盘菜单不感冒
- 原盘体积过大,硬盘太小
- 不便于
jellyfin
管理与观看。自从实现了与 trakt 的联动后,笔者希望所有的资源都可以在jellyfin
上观看。当然 VLC 也可以和 trakt 联动。
但并非所有情况下都可以下载到称心如意的版本,甚至有的时候只能找到原盘,这时就需要我们手动 REMUX 。REMUX 指的是舍弃原盘中的花絮、菜单、多余的字幕和音轨,将剩下的内容封装成 mkv 文件。
linux 平台笔者推荐以下两个工具:
MakeMKV
。在 REMUX 剧集的时候很方便,操作非常简单。MKVToolNix
。操作稍复杂,提供很多细粒度的选项。
此外笔者还尝试过Handbrake
,但是没有找到直接复制视频流的选项,重编码太耗时间,遂放弃。
MakeMKV
MakeMKV提供了三种安装方式
flatpak
1
flatpak install flathub com.makemkv.MakeMKV
PPA
1
2
3sudo add-apt-repository ppa:heyarje/makemkv-beta
sudo apt-get update
sudo apt-get install makemkv-bin makemkv-oss
需要注意的是 MakeMKV 并非免费软件,但是官方承诺在beta时期免费,并在官方论坛放出了激活密钥
MKVToolNix
MKVToolNix 为很多发行版准备了二进制包,可前往下载页面自行查看,同样也可以通过 flatpak 安装。
切割mkv文件
有些时候 REMUX 的结果可能会出现一点偏差,比如视频的开头封装进了原盘中的版权保护内容,此时可以使用ffmpeg
快速分割mkv文件。
下面的命令可以去除开头的一段内容
1 |
|
-c
是-codec
的缩写,用于指定编码器。
读者可能会好奇,-map 0
是什么意思,去掉又会如何?
map
参数用于指定从源文件选择哪个流到输出文件。
执行ffmpeg -i input.mkv
,会得到输入文件的基本信息
1 |
|
以#0:1(eng)
为例,第一个“0”表示这是第一个输入文件,第二个"1"表示文件中的第二条流。
-map 0
表示选取视频中的所有流,ffmpeg
的默认值不包括字幕流,所以去掉该参数则输出文件不包括字幕。
为了减小体积,有时候还会去除多余的音轨,比如只保留第一条音轨
1 |
|
也可以这样写
1 |
|
其中v
表示视频流,a
表示音频流,s
表示字幕流。
map
也支持负映射,比如-map -0:1
表示不包括该选中的流。
复习一下
-map 0
从输入索引 #0(第一个输入)中选择所有流。-map 1:a
从输入索引 #1(第二个输入)中选择所有音频流。-map 3:s:4
从输入索引#3(第四个输入)选择字幕流索引#4(第五个字幕流)。-map 0 -map -0:s
将从输入索引 #0(第一个输入)中选择除字幕之外的所有流。
烧录PGS字幕
有些时候出于兼容性考虑,我们会希望直接将原盘自带的PGS格式字幕烧录进视频,而不是内嵌(吐槽一下,互联网上竟然很难搜到这种需求)
笔者这里给出自己的解决方案:
1 |
|
-filter_complex "[0:v:0][0:${subtitle_stream}]overlay"
:这是用于将字幕烧录到视频上的滤镜。解释如下:[0:v:0]
:表示第一个视频流(索引 0 的文件中的第一个视频流)。[0:${subtitle_stream}]
:表示文件中需要烧录的字幕流,通过[0:${subtitle_stream}]
引用该流。overlay
:overlay
滤镜将两个流叠加,将 PGS 字幕合并到视频上,实现烧录效果。
-crf 18
:指定视频质量,数值越低质量越高,18 是常用高质量值。-preset slow
:表示编码速度的选项,slow
提供更高的压缩效率(但需要更长时间)。-acodec copy
:直接复制音频流,无需重新编码。-sn
:去掉所有字幕流,因为字幕已经烧录在视频上。