如何播放与处理蓝光原盘

本文最后更新于: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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|-- BDMV
| |-- AUXDATA
| |-- BACKUP
| |-- BDJO
| |-- CLIPINF
| |-- index.bdmv
| |-- JAR
| |-- META
| |-- MovieObject.bdmv
| |-- PLAYLIST
| `-- STREAM
`-- CERTIFICATE
|-- app.discroot.crt
|-- BACKUP
|-- bu.discroot.crt
`-- id.bdmv

蓝光盘一般会经过加密,并且存在区域码限制(UHD 无区域码限制),只有经过授权的播放器才可以播放。本文不讨论原盘解密的技术细节,下文所涉及的原盘均可看作已解密或未加密的原盘。

如何播放

大部分播放器都可以直接播放 mpls 或 m2ts 文件,比如 potplyer 打开 index.bdmv 就可以索引到所有文件直接播放(需要注意的是,上文的 mpls 和 index.bdmv 都并非视频文件,他们的工作是引导播放器加载正确的 m2ts 文件,m2ts 才是真正的视频文件)。

但这并非完整版的蓝光原盘体验,蓝光原盘可以通过java与播放器交互,从而选择不同的音轨、字幕和花絮等等,一般的播放器并不支持。

笔者觉得在电脑上原盘菜单可有可无,在电视上的用处会大一些(电视没有鼠标)。
但是很多精美的菜单看着确实会赏心悦目

windows

windows 平台主要有下列播放器支持原盘菜单

笔者在 windows 平台用过CyberLink PowerDVDKODI

  • KODI 非常难用,UI 和操作都只适合电视
  • PowerDVD 的学习版很好找,体验还可以

linux

笔者目前主力使用 linux 平台(kubuntu 22.04),所以下面主要介绍 VLC。

安装 VLC 以及必要的库

1
sudo apt install vlc libbluray-bdj libbluray2

若播放受保护的内容,请安装libbdpluslibaacs0(可能会自动作为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
    3
    sudo 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
ffmpeg -i input.mkv -map 0 -ss [起始时间] -c copy output.mkv

-c-codec的缩写,用于指定编码器。

读者可能会好奇,-map 0是什么意思,去掉又会如何?

map参数用于指定从源文件选择哪个流到输出文件。

执行ffmpeg -i input.mkv,会得到输入文件的基本信息

1
2
3
4
5
Stream #0:0(eng): Video ……
Stream #0:1(eng): Audio ……
Stream #0:2(eng): Audio ……
Stream #0:3(fra): Audio ……
Stream #0:4(zho): Subtitle ……

#0:1(eng)为例,第一个“0”表示这是第一个输入文件,第二个"1"表示文件中的第二条流。

-map 0表示选取视频中的所有流,ffmpeg的默认值不包括字幕流,所以去掉该参数则输出文件不包括字幕。

为了减小体积,有时候还会去除多余的音轨,比如只保留第一条音轨

1
ffmpeg -i input.mkv -map 0:0 -map 0:1 -map 0:4 -c copy test.mkv

也可以这样写

1
ffmpeg -i input.mkv -map 0:v -map 0:a:0 -map 0:s -c copy test.mkv

其中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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash
# convert mkv with pgs subtite to mp4 with subtitle burnt in

if [ $# -lt 2 ]; then
echo "Usage: $0 input.mkv subtitle_stream [output.mp4]"
echo "Example: $0 input.mkv 2 output.mp4"
exit 1
fi

input_file="$1"
subtitle_stream="$2"

if [ $# -ge 3 ]; then
output_file="$3"
else
output_file="${input_file%.*}.mp4"
fi

ffmpeg -i "$input_file" \
-filter_complex "[0:v:0][0:${subtitle_stream}]overlay" \
-crf 18 -preset slow -acodec copy -sn "$output_file"
  • -filter_complex "[0:v:0][0:${subtitle_stream}]overlay":这是用于将字幕烧录到视频上的滤镜。解释如下:

    • [0:v:0]:表示第一个视频流(索引 0 的文件中的第一个视频流)。
    • [0:${subtitle_stream}]:表示文件中需要烧录的字幕流,通过 [0:${subtitle_stream}] 引用该流。
    • overlayoverlay 滤镜将两个流叠加,将 PGS 字幕合并到视频上,实现烧录效果。
  • -crf 18:指定视频质量,数值越低质量越高,18 是常用高质量值。

  • -preset slow:表示编码速度的选项,slow 提供更高的压缩效率(但需要更长时间)。

  • -acodec copy:直接复制音频流,无需重新编码。

  • -sn:去掉所有字幕流,因为字幕已经烧录在视频上。