跳至主要內容
SubtitleMatrix

丟幀轉非丟幀時間碼

時間碼丟幀時間碼
或者貼上字幕文字

選項

30 fps 非丟幀與 29.97 丟幀對同一段時鐘的寫法不同,這個欄位決定檔案按哪種約定讀取、又按哪種寫回。一小時後的一條字幕,在一種約定下讀作 01:00:00,000,在另一種下讀作 01:00:03,600 —— 兩者每小時差 3.6 秒,不是捨入誤差。頁面標題點名一個方向,這個欄位只提供那一個,所以你拿到的就是這一頁所講的那件事。文字完全不變:不會按影片重設時間,不會換算影格率,而一小時中第一分鐘內的字幕原樣返回,因為那段裡沒有丟掉任何影格編號。

時間以哪個影格率計算。在格式頁面上,這是 MicroDVD 需要的值,因為它把時間存成影格編號。在影格率頁面上,它是檔案當初對應的速率 —— 字幕是照這個版本製作的 —— 而頁面的第二個欄位填你要搭配的影片速率。常見的有 23.976、24、25、29.97、30、50、59.94 和 60。填錯會讓整條時間軸位移;在影格率頁面上,位移是按比例發生,而不是固定的量。

這一頁把字幕檔裡的每個時間碼從 29.97 fps 丟幀(drop-frame)重新標記回 30 fps 非丟幀,讓每個時鐘往回走一段隨節目長度增長的量:一小時的第一分鐘內是零,一小時後 3.6 秒,十小時後 36 秒。台詞、字幕編號、順序與硬換行都是檔案自己的,原樣帶出。

這一頁服務的檔案,是在以丟幀計數的顯示器或放映機上打下時間碼的——29.97 素材通常如此,因為丟幀正是能跟住真實時鐘的約定——而下游的一切卻把時鐘讀成非丟幀。這樣讀,檔案裡每個時間碼都偏大,而且偏大的量持續成長,所以字幕會愈來愈早。半小時處誤差是 1.8 秒,而且在檔案裡任何位置都不會停止成長。這就是為什麼修正不是輕輕推一下:它是對每個時間戳套用同一種重新標記,修正量由字幕所在的位置決定。

把時鐘讀成時間碼,意味著吸附到最近的 30 fps 影格刻度,而丟幀裡有兩個刻度不存在。丟幀在每個整分鐘(每十分鐘的整分鐘除外)跳過 ;00 與 ;01 兩個編號——它數 00:00:59;28、00:00:59;29,然後跳到 00:01:00;02——所以進來的 00:01:00,000 指的是這個約定寫不出來的瞬間。它會被拉回能寫的最後一個編號 00:00:59,933,早了 67 毫秒。這是算術的真實邊界,不是容差,頁面會直接說明而不是抹平:兩小時裡有 216 個這樣的取值。

吸附後短於一個影格的字幕根本寫不出來,因為兩端落在同一個刻度上,而結束等於開始的字幕不是字幕。它們會被丟棄,並計入上方的有損說明,而不是悄悄拉長成一個影格。實務上只有逐格剪過的素材會遇到,但頁面不靠「這很少見」來處理——它會回報數量,沒有這種字幕的檔案就什麼都不報。

檔案不會上傳。它在瀏覽器分頁裡讀取、重寫,從不離開機器;這與其他每一頁的理由相同:有保密義務的素材不能交給轉換服務,而這一頁不會要求你交出去。

範例

檔案走到五分鐘

輸入

1
00:05:00,000 --> 00:05:02,000
The room is dark.

2
00:10:00,000 --> 00:10:03,000
A cold night.

輸出

1
00:04:59,667 --> 00:05:01,667
The room is dark.

2
00:09:59,400 --> 00:10:02,400
A cold night.

修正不是一個套在整份檔案上的數字:五分鐘處時鐘往回 333 毫秒,十分鐘處往回 600 毫秒,因為第一個時刻之前丟幀已經跳過十個編號、第二個之前跳過十八個。每條字幕的長度逐毫秒保留,因為兩端移動同樣的量——這是重新標記,不是位移。

一小時處的同一個修正

輸入

1
01:00:03,600 --> 01:00:06,600
An hour into the programme.

輸出

1
01:00:00,000 --> 01:00:03,000
An hour into the programme.

一小時處,丟幀的 01:00:03,600 就是非丟幀的 01:00:00,000——108 個被跳過的編號、3600 毫秒。這是拿來核對這一頁的數字:輸出的第一行應該正好比輸入的第一行早 3600 毫秒,而從丟幀機器打下來的檔案應該落回整點。

第一分鐘裡的一條字幕

輸入

1
00:00:04,000 --> 00:00:06,000
Still early in the file.

2
00:05:00,000 --> 00:05:02,000
This one does move.

輸出

1
00:00:04,000 --> 00:00:06,000
Still early in the file.

2
00:04:59,667 --> 00:05:01,667
This one does move.

一小時的第一分鐘內沒有編號被跳過,所以兩種約定把這六十秒寫得一模一樣,第一條原樣不動。第二條在五分鐘處,會移動。一條不動、一條移動就是這份檔案的正確輸出,不是跑到一半——修正在一小時開頭是零,從第一個分鐘邊界之後才開始成長。

常見問題

丟幀轉非丟幀後,字幕為什麼會提前?

因為檔案裡的時鐘比它所指的時刻大。非丟幀按每秒 30 個編號計數,好像 29.97 fps 真的每秒給 30 格,於是慢慢跑到真實時間前面;丟幀每分鐘跳兩個編號去追它。把丟幀機器上讀出的時鐘當成非丟幀來解釋,就會指過頭,修正是把這個超出量減掉:五分鐘處 333 毫秒、一小時處 3600 毫秒、十小時處 36000 毫秒。一小時的第一分鐘內這個量是零,所以最小的修正落在第一個分鐘邊界,也沒有任何時鐘會被推到 00:00:00 以下。

丟幀轉非丟幀時,丟幀寫不出來的時間點會怎樣?

會被拉回能寫的最後一個編號。每個跳號分鐘都缺 ;00 與 ;01,所以 00:01:00,000 與 00:01:00,010 都落到 00:00:59,933,早 67 毫秒。這是這一頁唯一不是精確重標的地方,範圍也有限:兩小時內 216 個取值。

丟幀轉非丟幀會讓某條字幕消失嗎?

只有短於一個影格(33.37 毫秒)的字幕條會。吸附可能把一條十毫秒的字幕兩端拉到同一個刻度上,而結束等於開始的條目寫不出來,於是它被丟棄並計入工作區上方的有損說明。檔案裡沒有這種條目時,報告不會提。

丟幀轉非丟幀會改到時間碼以外的東西嗎?

不會。字幕編號、順序、每行文字、字幕內部的硬換行與總條數都是檔案自己的,保持原樣。頁面每條字幕寫的是同樣兩個數字,只是換了標記。它也不會在任何地方記下時鐘現在是非丟幀,因為這裡讀取的格式——SRT、WebVTT、ASS、SSA、SBV、SAMI、MicroDVD、TTML、JSON、CSV——都沒有能存這件事的欄位,你拖進來的檔案也沒說過。

丟幀轉非丟幀的影格率欄位要填什麼?

填素材真實的影格率,它不影響這次轉換。頁面名稱裡的 30 與 29.97 是時間碼字串上的計數約定,不是影片影格率;這個欄位之所以必填,是因為 MicroDVD 把時間存成影格編號,沒有影格率就讀不出來。

再跑一次相反方向的頁面,能拿回原檔嗎?

只要沒有時間點落在丟幀寫不出的那一類裡,就能逐位元組拿回。兩頁是同一套算術的兩個方向,修正量都由每條字幕的位置決定,而不是固定位移,往返誤差是 0 毫秒。唯一的例外是被吸附的值,00:01:00,000 變成 00:00:59,933 之後回不來。

相關工具