雖然標題說淺析,但實際內容可能較複雜,修改原盤現階段也是很煩瑣的工作
本文寫給有興趣修改原盤加字幕流或音頻流的網友看的,沒興趣的可以不看了
本文主要以菜單基本類型為例子,其他情況執行個體操作以後再補充說明
本文可能有錯誤或不準確的地方,請明確指出,我會加以修正或補充
準備工作,需要的工具
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一下就行了