跳至主要內容
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。填錯會讓整條時間軸位移;在影格率頁面上,位移是按比例發生,而不是固定的量。

這一頁把字幕檔裡的每個時間碼從 30 fps 非丟幀重新標記成 29.97 fps 丟幀。拖入檔案、執行,每條字幕的起止都會換一種寫法返回。台詞、字幕編號、順序與硬換行都是檔案自己的,原樣不動。

兩種約定寫的是同一個時鐘,只是寫法不同,而檔案必須和後續流程用同一種。丟幀每秒數 30 個編號,但每隔整分鐘(每十分鐘的整分鐘除外)跳過兩個,靠這個方式跟住真實時間;非丟幀一個都不跳,於是慢慢落後。一小時後兩者差 3.6 秒:非丟幀的 01:00:00,000 就是丟幀的 01:00:03,600,十小時後差 36 秒。這個差距不是捨入誤差,也不會被抹平。

一小時的第一分鐘內不會有任何移動,因為那一段沒有編號被跳過,兩種寫法完全相同——前提是時鐘本來就落在 30 fps 的影格刻度上,00:00:02,000 就是。落在兩個刻度之間的值會被移到最近的刻度,最多 17 毫秒。把時鐘讀成時間碼,在檔案裡每個位置都會吸附到影格網格;在第一分鐘內,吸附是唯一會移動它的東西。字幕檔的時間通常來自影格精確的工具、本來就在網格上,所以那一段常常真的逐位元組返回。

這裡讀取的格式——SRT、WebVTT、ASS、SSA、SBV、SAMI、MicroDVD、TTML、JSON 與 CSV——都沒有欄位記錄時間碼用的是哪種約定。所以這一頁改的是數字,數字代表哪種約定仍然是你流程的屬性,和檔案送來之前一樣。檔案裡沒有的東西寫不進去,假裝有反而比直說更糟。

這不是影格率轉換。按 25 fps 影片對時的檔案不會在這裡重新對時,也沒有任何東西被拉伸或壓縮:時間的間距保持不變,改變的只是寫法。如果你要的是另一件事——讓字幕檔的間距跟著另一個影格率——那有專屬的頁面。檔案同樣不會上傳:在瀏覽器分頁裡讀寫,不能離開機器的素材就留在機器上。

範例

檔案走到五分鐘

輸入

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:05:00,333 --> 00:05:02,333
The room is dark.

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

兩條字幕移動的量不同,這就是整個操作:五分鐘處丟幀跳過十個編號,所以時鐘讀起來晚 333 毫秒;十分鐘處跳過十八個,所以晚 600 毫秒。文字與字幕編號是檔案自己的——每條只改寫兩個時鐘值。

同一份檔案走到一小時

輸入

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

輸出

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

一小時處兩種約定差 3.6 秒,也就是 108 個被跳過的編號。想核對這一頁就看這個數:輸出的第一行應該正好比輸入的第一行晚 3600 毫秒。字幕的兩端都移動,所以長度不變。

第一分鐘裡的一條字幕

輸入

1
00:00:02,000 --> 00:00:04,000
Nothing to re-label yet.

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

輸出

1
00:00:02,000 --> 00:00:04,000
Nothing to re-label yet.

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

第一條逐位元組返回、第二條移動,同一次執行裡就是這樣。一小時的第一分鐘沒有編號被跳過,兩種約定把這六十秒寫得一模一樣——而 00:00:02,000 本來就在 30 fps 的影格刻度上,所以完全不變。落在兩個刻度之間的時鐘會被移到最近的一格,最多 17 毫秒,這是這一頁在檔案各處都會套用的吸附。一條不動、一條移動是預期結果,不是跑了一半。

常見問題

非丟幀轉丟幀前:兩種時間碼的差別是什麼?

兩者都每秒數 30 個編號,但 29.97 fps 每秒並不真的給 30 格,只給約 29.97 格,所以每秒數 30 個編號的時鐘會慢慢落後於真實時間。丟幀每隔整分鐘(每十分鐘的整分鐘除外)跳過兩個編號來修正它——被丟掉的是編號,不是畫面影格。非丟幀一個都不跳,因此會漂移。寫下來兩者像同一種數字;對著同一格讀,一小時後差 3.6 秒,節目愈長差愈多。

非丟幀轉丟幀後,為什麼一小時的節目整體後移 3.6 秒?

因為 3.6 秒正是一小時跳號累積的量:每分鐘 2 個編號、每 60 分鐘裡的 54 分鐘跳號,每個編號 33.37 毫秒,合 108 個編號、3600 毫秒。頁面沒有增加延遲,只是把同一批影格用另一種約定寫出來;在這個位置,另一種約定讀起來更晚。01:00:00,000 進去、01:00:03,600 出來,兩端都移動,所以字幕長度逐毫秒不變。

非丟幀轉丟幀時,為什麼開頭的第一分鐘原樣返回?

因為一小時的第一分鐘沒有編號被跳過,兩種約定寫法完全相同,00:00:02,000 在兩邊都是第 60 格。另一個可能移動它的是影格網格吸附:落在兩個 30 fps 影格之間的值會被挪到最近的一格,例如 00:00:02,010 會變成 00:00:02,000。從影格精確工具取出的時間本來就在網格上,完全不會移動。

我需要哪個方向:非丟幀轉丟幀還是反過來?

看檔案裡的時間碼是從哪裡讀出來的。如果時間來自設為非丟幀的播放器或剪輯軟體,而要交付的流程用丟幀,就是這一頁;如果檔案是在丟幀顯示器上打的標記、下游工具卻按非丟幀讀,就走相反的那一頁,時鐘按同樣的每小時 3.6 秒往回移。快速分辨的方法:在這裡跑一次、比對其中一條——輸出時鐘讀起來比輸入晚,就是這個方向。

非丟幀轉丟幀會改變字幕的影格率嗎?

不會,也不會縮放或拉伸:原本兩秒的字幕仍然兩秒,字幕之間的間距不變,因為每條移動的量由位置決定而不是比例。25 fps 素材的字幕不會被轉到這裡;影格率欄位只為 MicroDVD 這類用影格編號存時間的格式存在。

非丟幀轉丟幀的輸出會記錄時間碼現在是丟幀嗎?

不會,這裡讀取的格式也做不到:SRT、WebVTT、ASS、SSA、SBV、SAMI、MicroDVD、TTML、JSON 與 CSV 都只存時間,不存它是怎麼數出來的。你拖進來的檔案本來也是如此,所以數字變了,約定仍由你的流程宣告。下游工具若有自己的丟幀設定,那個設定才是讀這些值的方式。

相關工具