虽然标题说浅析,但实际内容可能较复杂,修改原盘现阶段也是很烦琐的工作
本文写给有兴趣修改原盘加字幕流或音频流的网友看的,没兴趣的可以不看了

本文主要以菜单基本类型为例子,其他情况实例操作以后再补充说明
本文可能有错误或不准确的地方,请明确指出,我会加以修正或补充

准备工作,需要的工具
tsmuxer
BDedit
AVCHD-Patcher
HxD
下载连接(tsmuxer 的包里含前三个工具)
http://gilleco.2alien.net/MediaTools/tsMuxer.rar
http://gilleco.2alien.net/MediaTools/HxD.rar

然后,你得懂十六进制和其算法 [Hex],不懂就先去问搜索引擎,学会再来
够大的移动硬盘用于PS3试验,PC虽有相关播放器,但实硬体BD播放器情况才准确

有足够耐心,仔细,因为烦琐,所以操作时不要毛躁
时刻注意备份,主要指菜单结构文件备份,数据修改较多,常备份减少重做工量

本文的结构信息说明肯定是不全面的,选主要的讲,其他细节信息需要各位慢慢摸索总结
BDedit可以进行不少的结构信息修改,但是该软件有写操作bug,所以尽量用 HxD代替操作

本文后面凡是带h字母的,则为16进制表示法,hexagon
本文后面凡是带d字母的,则为10进制表示法,decimal

 

菜单文件数据结构

index
播放列表的序号索引

无特别需要,一般不需要修改此文件
此文件和object信息是对应的

object
各视频播放时对应菜单和指令表

media playlist
mpls就是播放列表信息

mpls里包含一段完整的媒体信息,整段影片可能是多个剪辑块串联而成

clip information
clpi就是媒体剪辑块的信息

 

 



Offset 0030h 起 0008h 个字节 0004050C40000000h 是该播放列表允许的菜单功能的信息
见BDedit查看mpls时顶上的两排

Offset 000Eh 起 0002h 个字节 058Eh代表的是该列表整段影片章节时间码信息储存区开始位置
Offset 003Ch 起 0002h 个字节 0550h代表的是该列表整段影片的全部剪辑块信息储存区总长度
也是章节时间码开始位置偏移长度,3Dh+550h=58Dh

Offset 0040h 起 0002h 个字节 是该列表整段影片所含剪辑块的个数
Offset 0044h 起 054Ah 个字节 是该列表整段影片全部剪辑块信息区域
Offset 0044h 起 0092h 个字节 是该列表第一个剪辑块信息区域
Offset 0050h 起 0001h 个字节 是该剪辑块与前后块的关系类型[1h为起始、6h为接续、15h为分歧]
Offset 0052h 起 0008h 个字节 是该剪辑块的开始时间[IN time]和结束时间[Out time]
Offset 0066h 起 0002h 个字节 是该剪辑块所含流标签信息储存区的长度,6Eh+67h=D5h
Offset 006Ah 起 0007h 个字节 是该剪辑块所含流的条数信息,STN[Vi/Au/PG/IG/sV/sA/PIP]
Offset 0076h 起 0060h 个字节 是该剪辑块所含流标签信息,10h[16d]个字节为一条流信息
Offset 00C6h 起 0010h 个字节 是该剪辑块的弹出菜单标签信息
后面的剪辑块情况不再赘述,请按规律依次类推

Offset 0566h 起 0024h 个字节 是该列表整段影片使用的弹出菜单对应媒体块的信息

Offset 058Eh 起 0004h 个字节 是该列表整段影片章节时间码信息储存区总长度,591h+286h=817h
Offset 0592h 起 0002h 个字节 是该列表整段影片章节时间码条数,2Eh[46d]

Offset 0594h 起 0284h 个字节 是该列表整段影片全部章节时间码信息区域
Offset 0594h 起 000Eh 个字节 是该列表整段影片章节时间码中第一条的信息
Offset 0598h 起 0004h 个字节 是该条章节时间码的具体时间值
Offset 0596h 起 0002h 个字节 是该条章节时间码的对应的媒体剪辑块序号[在该位储存值上加1]



Offset 0034h 起 0004h 个字节 是该剪辑块的rate  值,BDedit查看CLIPINF后Status有记录此值
Offset 0038h 起 0004h 个字节 是该剪辑块的packet值,BDedit查看CLIPINF后Status有记录此值

Offset 00EEh 起 0008h 个字节 是该剪辑块的开始时间[IN time]和结束时间[Out time]

Offset 00F8h 起 0084h 个字节 是该剪辑块所含流标签信息储存区
Offset 00F8h 起 0002h 个字节 0082h代表的是该储存区的长度 F9h+82h=17Bh
Offset 0102h 起 0001h 个字节 是该块所含流的条数信息,此块共含5条流,1视频流/2音频流/2字幕流
Offset 0104h 起 0018h 个字节 是该块第一条流标签信息,后面几条一次类推

 

修改流程步骤简述

一 提取章节时间码
用BDedit打开需要修改的原版,在Options项的chapter format选为 Time
在Playlist项选中你要修改的媒体片段的mpls,点save chapters获得一个文本

二 加流并分割
现在用tsmuxer对原盘中需要修改的部分进行加字幕,或音轨
如果是多段,请按照playlist里排列的顺序依次add后join各个m2ts
若源是分段的,加字幕或音轨不是分段的没有关系,只要总长时间可以对应就行了
在blu-ray项chapters选Custom,复制第一步操作里获得文本里内容到这里
为了方便将 Option里m2ts数字填写为大于原目录下m2ts最大序号的数字
例bdmv/stream里最大为00200.m2ts,则填201,这是为了作分割时方便替换操作
如果你要移动硬盘播放,可以选择分割,填4.29[单位GB]或3.99[单位Gib]
选blu-ray或avchd封装输出,这里其他具体细节相关tsmuxer教程甚多,这里不再赘述

三 替换文件
将原版里你刚才修改时参照的原mpls列出的m2ts及其对应序号的 clpi全部移开,或者删除
原mpls备份出来到任意目录,然后将新目录里的m2ts和clpi全部移到原版对应目录

四 修改播放列表
现在打开HxD,新生成的mpls和原mpls都拖进去,理清mpls基本数据结构后开始修改
原mpls里移到章节时间码信息储存区开始位置,记下数字,等下增长了好找修改位置

复制新mpls里第一个剪辑块信息区域里新增的流标签信息,然后在原mpls对应位置插入
一条流长度为10h[16d],不要看错,然后修改原mpls的STN,增加标签流对应改大STN值
接下来修改原mpls第一个剪辑块所含流标签信息储存区的长度值,增加一条标签就加10h

若新生成的有分割,复制改动过的原mpls 第一个剪辑块全部信息区域,按新mpls分割块数
在第一剪辑块信息区末尾插入增加信息块[若原版也多块则将 原mpls后续剪辑块信息都删除]
这里要插入粘贴的次数当然是新生成m2ts数量减1,此操作完后修改该mpls所含剪辑块的个数

对照新mpls,修改原mpls各个剪辑块的[IN time]和[Out time],修改块与块的关系类型
原mpls的000Eh处修改章节时间码信息储存区开始位置,003Ch处改剪辑块信息储存区总长度

新 mpls的000Eh处,按此值移到章节时间码信息储存区开始位置,复制此后所有信息
原mpls的000Eh处,按此值移到章节时间码信息储存区开始位置,删除此后所有信息,然后粘贴。

(注:如无分块情况,不大副操作去动章节码信息也是可行的)
(无分块时把原mpls未改的[IN time]和[Out time]覆盖到新clpi即可)

到此,所有必要修改操作算是完成了,如果要刻录,按照一般方法刻录BD即可
而需要移动硬盘模拟播放则用AVCHD-Patcher将原版index拖来patch一下就行了

版权声明:本文为MaxWoods原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/MaxWoods/archive/2010/01/25/1655539.html