如何播放与处理蓝光原盘
什么是蓝光原盘
蓝光光盘(英语:Blu-ray Disc,缩写:BD)是DVD之后的下一代光盘格式之一,用以存储高质量的影音以及高容量的资料。2015年蓝光光碟联盟公布了新的
UHD(Ultra HD Blu-ray)标准,支持 4k
视频。各个电影发行的光盘(影碟)是一般影音爱好者能接触到的最高品质资源,无论是画质还是音质都远超流媒体资源,一般还会附带花絮。
https://www.blu-ray.com/可以查询具体哪些电影发售过蓝光光碟。标题所说的蓝光原盘可视为从发售的光盘中1:1拷贝而来,一般为
iso 文件或者 bdmv 文件夹,iso 文件本质上是对 bdmv 文件夹的打包。
原盘结构
12345678910111213141516|-- 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 平台主要有下列播放器支持原盘菜单
收费
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 以及必要的库
1sudo apt install vlc libbluray-bdj libbluray2
也可以参考此篇博客
若播放受保护的内容,请安装libbdplus和libaacs0(可能会自动作为VLC的依赖安装,未验证)
可参考arch
wiki的相关内容。
转换为mkv文件
绝大多数情况下,笔者不会观看原盘,而是选择 REMUX
或者是重编码后的资源(大部分是较高码率的重编码资源)。主要原因如下:
对原盘菜单不感冒
原盘体积过大,硬盘太小
不便于jellyfin管理与观看。自从实现了与 trakt
的联动后,笔者希望所有的资源都可以在jellyfin上观看。当然
VLC 也可以和 trakt 联动。
但并非所有情况下都可以下载到称心如意的版本,甚至有的时候只能找到原盘,这时就需要我们手动
REMUX 。REMUX
指的是舍弃原盘中的花絮、菜单、多余的字幕和音轨,将剩下的内容封装成 mkv
文件。
linux 平台笔者推荐以下两个工具:
MakeMKV。在 REMUX 剧集的时候很方便,操作非常简单。
MKVToolNix。操作稍复杂,提供很多细粒度的选项。
此外笔者还尝试过Handbrake,但是没有找到直接复制视频流的选项,重编码太耗时间,遂放弃。
MakeMKV
MakeMKV提供了三种安装方式
flatpak
1flatpak install flathub com.makemkv.MakeMKV
PPA
123sudo add-apt-repository ppa:heyarje/makemkv-betasudo apt-get updatesudo apt-get install makemkv-bin makemkv-oss
源码编译
需要注意的是 MakeMKV 并非免费软件,但是官方承诺在beta时期免费,并在官方论坛放出了激活密钥
MKVToolNix
MKVToolNix 为很多发行版准备了二进制包,可前往下载页面自行查看,同样也可以通过
flatpak 安装。
切割mkv文件
有些时候 REMUX
的结果可能会出现一点偏差,比如视频的开头封装进了原盘中的版权保护内容,此时可以使用ffmpeg快速分割mkv文件。
下面的命令可以去除开头的一段内容
1ffmpeg -i input.mkv -map 0 -ss [起始时间] -c copy output.mkv
-c是-codec的缩写,用于指定编码器。
读者可能会好奇,-map 0是什么意思,去掉又会如何?
map参数用于指定从源文件选择哪个流到输出文件。
执行ffmpeg -i input.mkv,会得到输入文件的基本信息
12345Stream #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的默认值不包括字幕流,所以去掉该参数则输出文件不包括字幕。
为了减小体积,有时候还会去除多余的音轨,比如只保留第一条音轨
1ffmpeg -i input.mkv -map 0:0 -map 0:1 -map 0:4 -c copy test.mkv
也可以这样写
1ffmpeg -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格式字幕烧录进视频,而不是内嵌(吐槽一下,互联网上竟然很难搜到这种需求)
笔者这里给出自己的解决方案:
123456789101112131415161718192021#!/bin/bash# convert mkv with pgs subtite to mp4 with subtitle burnt inif [ $# -lt 2 ]; then echo "Usage: $0 input.mkv subtitle_stream [output.mp4]" echo "Example: $0 input.mkv 2 output.mp4" exit 1fiinput_file="$1"subtitle_stream="$2"if [ $# -ge 3 ]; then output_file="$3"else output_file="${input_file%.*}.mp4"fiffmpeg -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}] 引用该流。
overlay:overlay 滤镜将两个流叠加,将 PGS
字幕合并到视频上,实现烧录效果。
-crf 18:指定视频质量,数值越低质量越高,18
是常用高质量值。
-preset slow:表示编码速度的选项,slow
提供更高的压缩效率(但需要更长时间)。
-acodec copy:直接复制音频流,无需重新编码。
-sn:去掉所有字幕流,因为字幕已经烧录在视频上。