BDMV 是蓝光碟使用的格式。这种格式没有办法使用播放软件播放,必须要用硬盘播放器,也就是专门的设备。但是最经典的 ffmpeg 可以将其转换成其他格式,并且保持相同的码率和清晰度,这样就可以很方便的查看了。
本文使用 macOS 进行演示,但是会介绍如何一些其他平台的方法和操作。
一般 BDMV 下载格式是一个 ISO,加载打开之后内容大致如下:
如果你使用的是终端,那么(如果你下下来的 ISO 加载后不叫“BDROM”,那么需要进行修改的):
## macOS
$ cd /Volumes/BDROM/
## Linux
$ cd /dev/BDROM/
## WSL
$ cd /mnt/BDROM/
## Windows(PowerShell)
$ cd BDROM:\
如果你看过 DVD 或者蓝光碟,会知道光盘播放的时候并不是插进去就直接开始播放了,而是会有选择界面,以及花絮、音效、广告等内容(不过零几年那时候我看盗版 DVD 有一些是直接开始播放了),如果是电视剧的话还会有每集的选择界面。所以这时候我们要找到电影的m2ts
文件来进行转换,电视剧的话则会是多个m2ts
文件。如果你需要花絮等内容还请按照后面的方法进行转换。
上图中的 BDMV 其实是一个包,右键选择“显示包内容”即可查看,如下:
然后进入“STREAM”文件夹。
上面的操作在终端中如下,不同平台都一样:
## macOS
## Linux
## WSL
## Windows(PowerShell)
$ cd BDMV/STREAM/
然后显示内容如下:
一般来说第一个就是我们需要的m2ts
文件,看文件大小也能看出来。一般是00000.m2ts
,不过也有可能是00001.m2ts
,比如说上图。
这里需要强调一点,如果是 macOS 用户千万别直接空格检查这些文件,因为电影的m2ts
如果直接查看是一段杂音视频,大晚上或者安静的时候很容易吓一跳。建议看文件大小即可。如下:
可以看到就第一个最大,占了大部分空间。
如果是电视剧的话会有多个差不多大的文件,那么最好使用ffprobe
来看看这个文件:
Input #0, mpegts, from '/Volumes/BDROM/BDMV/STREAM/00001.m2ts':
Duration: 01:59:09.15, start: 1.996000, bitrate: 42645 kb/s
Program 1
Stream #0:0[0x1011]: Video: h264 (High) (HDMV / 0x564D4448), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 90k tbn
Stream #0:1[0x1100]: Audio: pcm_bluray (HDMV / 0x564D4448), 48000 Hz, stereo, s32 (24 bit), 2304 kb/s
Stream #0:2[0x1101]: Audio: dts (DTS-HD MA) ([134][0][0][0] / 0x0086), 48000 Hz, 5.1(side), s32p (24 bit)
Stream #0:3[0x1102]: Audio: dts (DTS) ([130][0][0][0] / 0x0082), 48000 Hz, 5.1(side), fltp, 768 kb/s
Stream #0:4[0x1103]: Audio: dts (DTS) ([130][0][0][0] / 0x0082), 48000 Hz, 5.1(side), fltp, 768 kb/s
Stream #0:5[0x1104]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 5.1(side), fltp, 448 kb/s
Stream #0:6[0x1105]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 5.1(side), fltp, 448 kb/s
Stream #0:7[0x1106]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 5.1(side), fltp, 448 kb/s
Stream #0:8[0x1107]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 5.1(side), fltp, 448 kb/s
Stream #0:9[0x1108]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 5.1(side), fltp, 448 kb/s
Stream #0:10[0x1200]: Subtitle: hdmv_pgs_subtitle ([144][0][0][0] / 0x0090)
Stream #0:11[0x1201]: Subtitle: hdmv_pgs_subtitle ([144][0][0][0] / 0x0090)
Stream #0:12[0x1202]: Subtitle: hdmv_pgs_subtitle ([144][0][0][0] / 0x0090)
Stream #0:13[0x1203]: Subtitle: hdmv_pgs_subtitle ([144][0][0][0] / 0x0090)
Stream #0:14[0x1204]: Subtitle: hdmv_pgs_subtitle ([144][0][0][0] / 0x0090)
Stream #0:15[0x1205]: Subtitle: hdmv_pgs_subtitle ([144][0][0][0] / 0x0090)
Stream #0:16[0x1206]: Subtitle: hdmv_pgs_subtitle ([144][0][0][0] / 0x0090)
Stream #0:17[0x1207]: Subtitle: hdmv_pgs_subtitle ([144][0][0][0] / 0x0090)
可以看到这个电影的时长、平均码率等信息,最重要的是包含的各种视频流、音频流、字幕文件信息。本文只需要知道音频文件是什么编码,然后进行选择,不然会导致初始化流的时候出现问题,从上面可以看到是flac
格式(蓝光电影一般都是这个格式)。如果你想打包一个特定语言和字幕的成品,那么就需要使用这些信息了,本文就不做赘述了。
知道了位置在哪,就可以进行转换了。下面的命令还会包含源文件所有的音轨和字幕,并且在当前目录(并不是 ISO 中)生成一个flac output.mkv
文件:
## macOS
$ ffmpeg -i /Volumes/BDROM/BDMV/STREAM/00001.m2ts -map 0 -c copy -c:a flac output.mkv
其他平台用户根据之前的介绍修改文件路径,用 Windows 但是不使用 PowerShell 的用户还请自己手动将/
变换成\
。此外,输出文件的路径也可以根据需要进行修改。
上面这条 ffmpeg 命令的选项含义是:
-i /Volumes/BDROM/BDMV/STREAM/00001.m2ts
表示输入文件为/Volumes/BDROM/BDMV/STREAM/00001.m2ts
;-map 0
选中输入文件的所有流,如果你想选择所有的音频流,那么使用-map 0:a
,如果要进行特殊设置和操作,那么请查看官方文档的介绍:Selecting streams with the -map option。-c copy
会拷贝原文件所有的信息,比如码率,这样就可以保证生成文件和源文件码率等信息相同了,也就是保证清晰度,但是这种操作可能会导致视频出现抽搐的情况。某些视频在 VLC 下播放正常,但是自带的播放器就抽搐,这种是因为编码器问题,修改一下编码器再次进行转码即可,但是这样就慢了很多,不过好在出现的情况不多。-c:a flac
表示音频编码器为flac
,不设置这个选项会导致初始化流的时候出现问题。output.mkv
表示输出文件名为output
,格式是 MKV。输出格式推荐 MKV,因为 MKV 其实是一个视频容器格式,能包含多个媒体文件,比如字幕、音轨,并且在电脑上也能找到不少播放器。虽然 MP4 格式也可以存放多轨字幕和音频,但是很困难。这也是为什么你下转换好的蓝光文件大多也是 MKV 文件,MKV 主打的就是存储蓝光或者 DVD 的电影。
如果你需要 MP4 文件,我也不建议你直接转成 MP4,如果空间允许,先转成 MKV 再转成 MP4 也比较方便,MKV 转 MP4 的速度也非常快,基本上是 100x 往上了。不论是那种转换流程,如果要转换成 MP4 文件,那么建议选择好需要的软字幕和音轨,或者更简单一些,把上面命令中的-map 0
删除即可,就可以将第一个音轨和软字幕带到 MP4 文件里。
虽然蓝光文件的码率很高,1080P 都有 40000-60000 kb/s(一般流媒体 1080P 是 5000-8000),如果是 4K 的话会更高,但是转换速度还挺快的,现在的 CPU 应该都能做到 5-30x,甚至更高的速度。并且利用率和内存占用不高,挂在后台转码也行。
希望能帮到有需要的人~