tonyhsie 发表于 2017-1-1 11:25:30

AdjustAssTime: 調整字幕時間軸/FPS 或合併多個字幕 (2023/02/05 更新)

本帖最后由 tonyhsie 于 2023-2-6 02:06 编辑

分享一個自己寫的小程式,主要功能有兩個


1. 一次調整多個字幕檔 (.ass/.ssa/.srt/.idx) 的 時間軸 或 FPS

   (也可從 Sushi: 自动调整时间轴工具 所得到的時間資訊來調軸,簡易教學請見 18 樓 及28 樓)

2. 合併多個字幕檔 (.ass/.ssa 或 .srt) 的時間軸,主要是 BDrip -> BD 原盤用


支援 Unicode 或 BIG5/GB (ANSI)


程式截圖

v211111




v190101

功能 A:調整字幕時間軸(圖片範例:將字幕往後平移 5 秒)




功能 B: 合併兩個以上的字幕(圖片範例:將兩個字幕合併,第 2 個字幕起始時間為 23:42.086)




功能 C:調整字幕 FPS(圖片範例:將 fps 23.976 影片的字幕轉成 fps 25 的影片用)




更新記錄

v230205

1. 修正一些問題
2. 新增「-NoEgg」參數,不再出現提示信箱的視窗
3. 將字幕檔拖曳穿過時間欄時,不會清空時間欄的文字
4. 時間欄新增支援 .srt 及 .ass/.ssa 的時間行格式,不需要人工計算
 如:00:00:05,810 --> 00:00:10,548 (程式會取中間值來計算,也就是 (5810+10458)/2 = 8134 ms)
   Dialogue: 0,0:00:25.44,0:00:30.65,TEXT-JP,,600,0,0,,甲乙丙丁 (中間值 = (25440 + 30650)/2 = 28045 ms)
5. 支援 dry run (空運行) 模式 (主要是為了觸發下面另外 *.txt 功能用)
 只要在任一時間欄裡填入 d 或 D 再按 "Go!" 即可
6. 不再產生負數時間行,所有小於 0 的時間值都會變成 0


Adjust mode時間 / FPS 調整模式

1. 將 fps 24.98 當成 25000/1001,以取得更精準的時間值
2. 支援 alass 執行結果的時間格式 (如:shifted block of 1090 subtitles with length 1:26:12.672 by -0:00:09.013)
   (就像已支援很久的 Sushi 格式一樣)
3. 目標時間欄 (Target Time) 新增支援相對時間,如 +01:23:45 or -54321,意思是相對於原始時間欄再加 1:23:45 或減 54321 (ms或s)
4. 將字幕裡相鄰且時間重疊的字幕收集起來 (也就是上個字幕還未結束,下個字幕就先開始的情況)
 另存為 *.TimeOverlapLines.txt

 重疊時間有上限,超過上限者不列入,.ass/.ssa 上限為 100ms,.srt 上限為 1 秒


Append mode 時間合併模式

1. 在合併時間為 0 時,不添加多餘的合併資訊行
2. 不覆寫任何已存在的檔案 (會將舊檔案改名)


v220214

1. 新增參數 "-OldDoubleClick",恢復舊版本,文字框要雙擊才會全選的模式
2. 修改某些檔名的排序規則
3. 合併模式下,最後一句字幕的結束時間可以剛好等於合併時間 (以前的版本不允許)


v211111

1. 拿掉了 Unicode / ANSI 的選擇鈕,改由程式自動偵測 Unicode/GBK/BIG5
2. 增加了字幕快取機制來應對 MB 級的字幕,會快取最近 32 個在程式啟動後使用過的字幕
3. 在 Adjust/Append mode,或是 Adjust Time/FPS mode 之間切換時,一律會重設 Original/Taget 輸入框內的文字
4. 當前後兩句字幕有時間重疊時,會額外產生 "*.TimeOverlaps.txt"。作用是提醒使用者,是否要修改字幕,讓時軸不要重疊
5. 移除 .ass 最後面無意義的空行
6. 程式改為 .NET Framework 4.8 架構
7. 修正一些小 bug,修改一些小地方


Adjust mode時間 / FPS 調整模式

1. 使用更精確的 FPS 數值來調整時間,如 23.976 的參數,程式內會用最精確的 (24/1.001) 的數值來計算時間
2. FPS 調整模式也可單純拿來放大/縮小字幕的時軸長度,如 Original FPS = 3,Target FPS = 1,則每句字幕的時間點、時長都會變 3/1 = 3 倍
 Original FPS = 1,Target FPS = 4,則每句字幕的時間點、時長都會變 1/4 = 0.25 倍
 原本有限制 original FPS 最多只能有 3 位小數,現在改為不限
3. 不再產生 "*.sushi.txt", "*.Segment.txt", "*.check.txt" 這些多餘檔案
4. 修改負數的進位方式,讓時間計算更精準
5. "Use as first subtitle start time" 這個功能,是將第一句字幕修改成使用者指定的時間
 原先程式是以字幕檔案裡的第一行真正字幕為準來修改時間,現在改為由所有字幕裡,時間最早的字幕為準


Append mode 時間合併模式

1. 支援多個檔案 +1個合併時間的合併方式。例如5個字幕檔案 & 1個合併時間"0:30:00",合併後第2個字幕會在 30 分處開始,第3在 1 小時處開始,依此類推。也可另外指定第1個字幕的開始時間,這時第2、3、...之後的字幕也會根據第1個字幕的開始時間 + 每個字幕的間隔時間來處理


v201010

1. 小 bug 修正

2. 調整一些 hot-keys

3. 新增支援「有兩個以上的 區段」的字幕檔案

4. 改用 decimal 來計算時間長度以避免 double 在四捨五入時的誤差
  (double 1.005 四捨五入取兩位為 1.00,而 decimal 會是 1.01)

5. UI 介面調整

https://bbs.acgrip.com/data/attachment/forum/202010/10/211458mzkne33q2eg2e8ld.png

  for 調整時間模式 (Adjust mode)

6. 如果 input 1 改變了,則移除先前所有的 input files

7. 可直接將程式產生的 Segment.txt 拖曳到時間欄,再次使用同樣時間來作調整

8. 「指定第一句字幕的時間」之前都是以字幕檔第一行的時間為準,無論它是否真的最早出現;
  現在改以最早出現的真實字幕時間為準

9. 可直接從 Excel 複製時間資訊貼到「Target Time」上 (ctrl-v),程式會自動填滿「Original Time/Target Time」兩個欄位
  也支援拖曳的方式。Excel 時間範例(以時間 或 frames 為單位,將 TV 時軸轉換成 BD 時軸):


10. 在計算 frame 時間時,如果字幕時間要從 M frame 調整成 N frame,
  以往都是以「M / fps 的時間之後的字幕」調整為「N / fps 的時間」的方式來計算;
  現在改為更精確的「(M-1) / fps + 0.01 秒之後的字幕」調整為「(N-1) / fps + 0.01 秒」的方式來計算;


  for 合併字幕模式 (Append mode)

11. 如果字幕位置沒有改變,則不產生確認用的「position.ass」

12. 合併時字幕時,若字幕的預設解析度不同,會自動調整相關 x/y 軸的參數;現在不調整 \blur 所帶的參數了

13. 在輸入的字幕檔案超過兩個時,禁止 Swap

14. 修正「當 input 2 的長度 > input 1 時」會發生的 exception

15. Chapter.txt 現在會記錄各影片的長度,即下圖()內的時間
https://bbs.acgrip.com/data/attachment/forum/202010/10/212030eydl3t8g9ktez2q8.png

v200323

1. 小 bug 修正

2. UI 介面調整
http://bbs.acgrip.com/data/attachment/forum/202003/23/223940a3ge3pznynpyyezs.png

  for 調整時間模式 (Adjust mode)

3. 對於單一目錄的參數,程式會將它視為多個字幕檔的參數來處理 (主要是為了搭配 Sushi 調軸)

4. 在 Adjust Time/FPS mode 以及 Append mode 之間切換時,程式會視情況重置輸入框的參數 (非必要的話就不會重置)

5. 使用 Sushi 的時間資訊時,可得到跟實際執行 Sushi 一模一樣的時間軸,但速度快很多 (因為不需要重複比對聲音資訊) 在調整多個 "同時間軸" 的 "不同字幕" 時 (如 Webrip -> BDrip) 很好用


  for 合併字幕模式 (Append mode)

6. 在合併不同 resolution 的字幕時,會先把字幕作 resize,這版讓 resize 的結果更精確 (增加有效位數)

7. 修正 Resize 時會把 "\clip()" 修改成 "clip(" 的問題

8. 合併字幕時,現在可以指定第一個字幕的起始時間,不再強制一定要從 0:00:00.00 開始
 (在少數某些 BD 的播放清單裡,在第一集正片前面,可能會先播別的影片,造成第一集的時間實際上不是從 0 開始,如:小書痴的小剋上)


v191116

1. 小 bug 修正

  for 調整時間模式 (Adjust mode)

2. 增加支援 .idx 字幕 (DVD 字幕檔格式),可調整 .idx 的時間軸 / FPS (合併功能不支援 .idx 格式)
3. 可從 Sushi 的時間資訊來調整字幕   例如:在沒有 DVDrip/TVrip/BDrip 影片的情況下,只有 sushi 時間資訊時,也可以將 DVDrip/TVrip 的字幕調整成 BDrip 字幕 (.ass/.ssa/.srt/.idx 皆適用)
4. 可一次丟入 N 個檔案及 N 個 Sushi 時間資訊,產生出 N 個調整後的字幕
5. 調整字幕時間時,刪除行首及行尾的多餘空白

  for 合併字幕模式 (Append mode)

6. 合併 .ass/.ssa 字幕時,若字幕檔之間的解析度設定不同,程式會自動調整相關參數 (字型大小、邊界、位置等等)

v191103

1. 小 bug 修正、提升程式效率
2. 程式由 32-bit only 變成 32/64-bit
3. 支援 .srt 的時間格式,如 "00:11:29,669" (也就是秒數後面為逗點的形式)
4. 支援 .idx 的時間格式,如 "00:11:29:669" (也就是秒數後面為冒號的形式)
5. 為所有的文字輸入框,增加 "滑鼠 點第1次 全選,點第2次 取消,點第3次 全選,點第4次 取消....依此類推" 的特性,方便複製
6. 由本程式調整時間後,所產生出來的字幕,檔名會帶有如 "delay 1s" 這種資訊,
   原本經多次處理後會變成 "delay 1s.delay 500ms.delay -250ms",
   現在改為合併計算,也就是會變成 "delay 1250 ms",不再盲目的重覆增加檔名長度,會合計所有調整時間的資訊,一次呈現

7. 新功能:指定一個時間,把第一句字幕的開始時間,調整成該指定時間,其餘字幕時間則類推

   如下圖所示,就是把 "0.srt" 的第一句字幕開始時間調成 "0:01:23.456",其餘字幕時間都類推




v190101

1. 一堆小 bug 修正
2. 時間單位可選擇 毫秒 (Millisecond) 或 秒(Second)
3. 可改變字幕 FPS (如 23.976 -> 25 之類)


for 調整時間模式 (Adjust mode)

4. Sushi 自動產生的字幕,如果有多個不同的時間區塊,那麼在區塊邊界,Sushi 偶爾會判斷錯誤,需要手動修正
AdjustAssTime 可按照 Sushi 結果來生成 N 個平移了不同時間後的字幕檔,方便來修正 Sushi 的這種錯誤


for 合併字幕模式 (Append mode)

5. 如果合併的字幕,預設解析度不相同時,會根據第一個字幕的解析度來調整後續字幕的字型大小 font size、字幕位置 position、 邊界 magrins 等等跟字幕解析度相關的數據,並產生 "*.position.ass" 用來方便確認更改後的相關字幕是否能正常呈現

6. 可直接把 "chapters.txt" 拖曳到 "Start Time" 欄,直接根據檔案裡紀錄的合併時間來再次合併字幕



v170516

1. 新增支援 .srt 字幕

2. 新增支援編碼為 ANSI (BIG5 或 GB) 的字幕(預設仍為 UTF8)

3. 新增一個合併字幕時可選用的選項:合併時以各字幕檔最後一個有效字幕的時間,來計算字幕合併的時間點 (Calculate next....)
 若合併後的字幕,合併的時間點錯誤時,可勾選後再試試


v170111

新版加入兩個功能

1. 可以指定是否只調整某個時間點以後的字幕
  例如:01:00 之後的字幕,往後調 5 秒,00:00~01:00 之間的字幕時間保持不變

2. 可以一次合併多個字幕
  例如:把各集 BDrip 字幕,合成一個 BD-BOX 用的單字幕檔

簡易教學請見 2 樓


跟 SubResync, Aegisub 相比的話,主要特點在於

1. 簡潔快速的操作,不需在層層選單裡徘徊
2. 完整保留原始字幕檔的一切文字,除了時間軸改變以外,其它文字跟排版都不會變,(SubResync/Aegisub 都會拿掉注釋,排版也可能會變)
3. 支援一次調整多檔的時間軸
4. 合併字幕時,遇到相同 Style,但是不同的字型/字體設定時,兩種 Style 都會保留下來 (Aegisub 只會留其中一個)


操作方式


1. 可直接拖曳字幕檔案或目錄、或是路徑文字到視窗上,或用 "..." 按鈕選取一至多個字幕文件、或手動輸入字幕路徑皆可

2. 時間也可以用拖曳文字的方式輸入,省去打字或複製貼上的手忙腳亂


3. 調整時間軸,可以設定 "Original Time(原始時間)" & "Target Time(調整後時間)" 來調整,程式會自動幫你算兩者的時間差,再去調字幕


 簡單說,假設同一句台詞 A,在 TVrip 的時間點是 0:10:35,在 BDrip 的時間點是 0:12:03,分別填入這兩個時間,就可以把 TVrip 字幕調成 BDrip  的時間軸

 也可以只填入 "Target Time","Original Time" 保持在 0:00:00.000,那麼程式就會按你所填時間,把字幕時間一律往後(或往前)調整

 填入時間的格式,可以是 1:23:45.678 (時:分:秒.毫秒),也可以填入整數 12345678 (毫秒),也可以是負數的時間/整數 (把字幕時間往前調)

4. 合併字幕的話,就只需要填入合併的時間點

 例如,BD 影片是第 1 集 + 第 2 集,那就填入第 2 集開始的時間點,然後合併兩集的字幕

5. 按下 Go! 就會產生新的字幕檔,調整(或合併)的時間點也會一併保留在檔名上,如圖



調軸的話,就是單純產生 "原檔名 + Delay 多少時間" 的新字幕檔

合併的話,程式會自動判斷兩個字幕檔檔名的差異,如果像圖中這種有規律性,, , , .... 的
合併的字幕就會是 , ,檔名最後會加上 "Appended @ 哪個時間點" 以方便辨視

進行多次合併的話,檔名就會像圖中最後一個檔案那樣 (先合併 24 & 25, 再合併 26)


以下是合併字幕的一些特色

Style 部分,如果有同名的不同 Style 定義,程式會自動更名,Style名稱會加上該字幕檔的編號,如圖中 temp25, Default26 等等
如果有新的 Style,但名稱不衝突,則保留原名,如圖中的 STAFF



合併的兩個字幕檔中間,開頭會有 + 編號 以供判別




雖然說起來複雜,但實際操作是很直覺不難懂的

有任何建議或想法都歡迎指教,謝謝



















tonyhsie 发表于 2020-5-20 03:02:15

本帖最后由 tonyhsie 于 2020-5-20 03:07 编辑

今天作了個動態 GIF,來展示合併字幕的功能




詳細說明如下:

此 GIF 是以合併 飛翔的魔女 BD disc1 字幕為例

(0) 用 BDInfo 確認正片的 mpls 檔(在 gif 中為 00002.mpls)
(1) 用 tsMuxer 打開 BD 原盤的 mpls 文件,以獲取章節的時間軸
(2) 將字幕文件拖曳到 AdjustAssTimes 程式上、將時間軸拖曳(或複製貼上) 到 Start Time 文字框
(3) 選擇 Append 功能,按下 Go!

程式便自動生成單一字幕檔,並將時間軸資訊及章節資訊,另存純文本在 Chapters 目錄下
(以後若要再次合併同一片 BD 的字幕,將章節檔案拖曳到 Start Time 文字框即可,毋需再重複進行上述的 (0)、(1) 步驟)


(4) 將此合併後的字幕,複製到 BD mpls 資料夾下,並改成跟 mpls 同名(在此例中為 00002.ass)
(5) 播放 BD 原盤時,選擇播放 index.bdmv 或 00002.mpls 都會自動外掛字幕(MPC-HC 或 MPC-BE 確定沒問題,POT Player 應該也可以)


各字幕合併的時間點,程式會以章節時間軸自行計算,若各話片長差不多,便毋需自行一一計算時間軸
大部分動畫都是如此

(如: Fate/stay night, Charlotte, SHIROBAKO, STEINS;GATE, THE IDOLM@STER, 中二病でも恋がしたい)

若每一話時間有長有短 (如 Fate/Zero),程式無法準確預估時間
也可以自行指定時間軸,再拖曳 (或複製貼上) 到 Start Time
一樣可以輕鬆合併多個字幕


tonyhsie 发表于 2017-1-11 18:30:44






更新記錄


v170111

新版加入兩個功能

1. 可以指定是否只調整某個時間點以後的字幕
  例如:01:00 之後的字幕,往後調 5 秒,00:00~01:00 之間的字幕時間保持不變

2. 可以一次合併多個字幕
  例如:把各集 BDrip 字幕,合成一個 BD-BOX 用的單字幕檔


以合併白箱 BD-BOX 字幕為例

(1) 先用 tsMuxer 打開 BD 原盤的 MPLS 文件,以獲取章節的時間軸




(2) 將字幕文件拖曳到 AdjustAssTimes 程式上、將時間軸拖曳(或複製貼上) 到 Start Time 文字框




(3) 選擇 Append 功能,按下 Go!


程式便自動生成單一字幕檔,並將時間軸資訊及章節資訊,另存純文本,以便不時之需





各字幕合併的時間點,程式會以章節時間軸自行計算,若各話片長差不多,便毋需自行一一計算時間軸
大部分動畫都是如此

(如: Fate/stay night, Charlotte, SHIROBAKO, STEINS;GATE, THE IDOLM@STER, 中二病でも恋がしたい)


若每一話時間有長有短 (如 Fate/Zero),程式無法準確預估時間


也可以自行指定時間軸,再拖曳 (或複製貼上) 到 Start Time

一樣可以輕鬆合併多個字幕

tonyhsie 发表于 2017-5-16 07:13:38

更新記錄


v170516

1. 新增支援 .srt 字幕

2. 新增支援編碼為 ANSI (BIG5 或 GB) 的字幕(預設仍為 UTF8)

3. 新增一個合併字幕時可選用的選項:合併時以各字幕檔最後一個有效字幕的時間,來計算字幕合併的時間點 (Calculate next....)
 若合併後的字幕,合併的時間點錯誤時,可勾選後再試試

true 发表于 2017-8-21 05:08:02

这工具太厉害了

大帅鸭 发表于 2017-8-23 13:40:43

厉害了,LZ好厉害

yukako 发表于 2017-11-18 14:13:25

本帖最后由 yukako 于 2017-11-18 14:14 编辑

请问这个可以单纯合并多个字幕吗?

我一次合并多个时,字幕档是合并了,可是时间轴未改变,也有勾选过Calculate next,还是一样

tonyhsie 发表于 2017-11-18 22:25:51

yukako 发表于 2017-11-18 14:13
请问这个可以单纯合并多个字幕吗?

我一次合并多个时,字幕档是合并了,可是时间轴未改变,也有勾选过Calcu ...
可以合併多個字幕檔,但需要自行指定合併的時間點 (需在 "Start Time" 處填上時間點)


時間點可接受的格式,可以是 1234567 (=1234.567 秒),或是 01:23:45.670 兩種

也可以接受多行的輸入

例如:

00:00:00.000
00:02:12.006
00:03:42.013
00:11:37.988
00:21:15.941

這樣程式才有辦法知道合併後的字幕要怎麼重新給定時間軸

{:4_675:}

yukako 发表于 2017-11-19 00:56:33

本帖最后由 yukako 于 2017-11-19 00:57 编辑

tonyhsie 发表于 2017-11-18 22:25
可以合併多個字幕檔,但需要自行指定合併的時間點 (需在 "Start Time" 處填上時間點)



请问喔,你说可多行输入
00:00:00.000
00:02:12.006
00:03:42.013

是直接复制全部在贴上就行吗?

那时间轴每行的定义是?
假设我有档1.ass、档2.ass、档3.ass

像00:00:00.000是插在哪个顺序?
像00:02:12.006又插在哪个顺序?
像00:03:42.013又插在哪个顺序?

另外建议一下,可否把要合并的档案完全呈现,就是input 2那里,而不是只有一个。


tonyhsie 发表于 2017-11-19 12:12:27

yukako 发表于 2017-11-19 00:56
请问喔,你说可多行输入
00:00:00.000
00:02:12.006


>> 请问喔,你说可多行输入
>> 00:00:00.000
>> 00:02:12.006
>> 00:03:42.013
>> 是直接复制全部在贴上就行吗?

是的,直接複製貼上就行

>> 那时间轴每行的定义是?
>> 假设我有档1.ass、档2.ass、档3.ass
>> 像00:00:00.000是插在哪个顺序?

程式會跳過 0:00:00

>> 像00:02:12.006又插在哪个顺序?

合併時,字幕檔2的時間部分,全部會平移 2:12.006

>> 像00:03:42.013又插在哪个顺序?

字幕檔3 會平移 3:42.013

>> 另外建议一下,可否把要合并的档案完全呈现,就是input 2那里,而不是只有一个。

謝謝建議,我會再想想看怎麼設計會比較好

yukako 发表于 2017-11-19 14:23:58

tonyhsie 发表于 2017-11-19 12:12
>> 请问喔,你说可多行输入
>> 00:00:00.000
>> 00:02:12.006

如果方便的话,时间轴呈现也可以考虑加入,
这个软件真方便,我原本还想要手算起始点在用其它软件平移...不过看着那堆数字就觉得头痛了{:4_696:}
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: AdjustAssTime: 調整字幕時間軸/FPS 或合併多個字幕 (2023/02/05 更新)