視訊與字幕·字幕工具包
比較字幕時間碼:SRT 逗號、VTT 點和 SMPTE 幀
· 背景
字幕 時間碼 幀速率
字幕作品中出現了三種書寫時間的方式:SRT 的 HH:MM:SS,mmm、WebVTT 的 HH:MM:SS.mmm 和 SMPTE 的 HH:MM:SS:FF。這篇文章解釋了它們的含義、它們如何轉換以及轉換出錯的地方。
同一時刻以三種方式編寫 - 快速瀏覽編輯器在一個專案中遇到的時間碼
一個專案可以讓編輯者以三種方式同時寫出相同的內容。字幕檔使用小時、分鐘、秒、毫秒前的逗號。網絡字幕檔案在相同位置使用点。編輯決策清單使用幀編號而不是分數。這三者都命名了同一時刻,並只有其中之一可以在不了解有關材料的任何其他資訊的情況下閱讀。
最後一点是最重要的。其中兩種表示法是絕對的,一種不是絕對的,當忽略差異時,它們之間的轉換會以特定方式失敗。
帶逗號的毫秒:SRT — 歐洲小數習慣,已成為格式規則
SRT 寫入小時、分鐘、秒、逗號和精確的三位數毫秒。逗號是歐洲慣例中的小數點分隔符,它透過使用而不是透過規範成為格式規則,因為 SubRip 沒有標準檔案來修復它。價值沒有一點是歐洲的;只有標點符號是。
這裡的解析器透過將右側找到的任何數字填入三來讀取毫秒,因此以一位數字結尾的時間戳被讀取為數百毫秒而不是單位。這很重要,因為手動或鬆散轉換器寫入的檔案並不總是提供三位數字,並將單個尾隨數字讀取為單位將使提示提前幾乎一秒鐘。
帶點的毫秒:WebVTT — 相同的值,不同的分隔符,以及為什麼它對解析器很重要
WebVTT 使用點寫入相同的值,並允許完全省略小時欄位,因此兩個欄位的形式是有效的,而 SRT 需要三個欄位。對於解析器來說,這些是真正不同的語法,這就是為什麼檔案可以僅因標點符號而被拒絕,儘管檔案中的每個數字都是正確的。
真實檔案不斷地混合兩者,因此解析器接受任一分隔符,無論檔案聲稱是什麼格式。该容差僅针對輸入。輸出時,分隔符號由目標格式選擇,逗號代表 SRT,點代表 WebVTT,因此轉換後的檔案是規範的,而不是任何不規則內容的副本。
幀:SMPTE 時間碼 — HH:MM:SS:FF,其對幀速率和丟幀複雜性的依賴
SMPTE 時間碼以訊框編號取代小數部分,給出小時、分鐘、秒和幀。與其他兩個不同的是,它不能單獨解釋:第十二幀是每秒二十五幀與每秒三十幀的不同時刻,因此沒有宣告速率的基於幀的時間碼是不完整的,而不僅僅是模糊的。
丟幀增加了第二個複雜因素。每秒 29.97 幀的素材被視為三十幀,並為了使計數與時鐘保持一致,在大多數分鐘開始時會跳過兩個幀編號,每十分鐘除外。帧不會丢失;只有標籤是。丟幀時間碼是一種計數約定,將其視為普通幀計數會產生在整個程式中不斷增長的錯誤。
將幀轉換為毫秒 - 算術和捨入產生小但真實的錯誤
將幀轉換為毫秒是除以幀速率,四捨五入是產生小誤差的地方。幀索引除以速率並乘以千很少會達到整毫秒,並結果必須四捨五入才能儲存。內部提示被保存為從零開始計數的整毫秒,因此每次轉換到該表示形式都會循環一次。
一次四舍五入是無害的。需要注意的錯誤是重複轉換:檔案從幀到毫秒,以不同的速率返回到幀並再次前進,每次都會累積舍入,並這些錯誤不會消除。從權威來源轉換一次,而不是透過多個工具傳遞檔案。
工作範例:在 25 fps 和 29.97 丟幀時的一個提示 — 將兩者轉換為毫秒並進行比較
在 1 分 30 秒 12 幀處取得一個提示。在每秒二十五幀的情況下,十二幀是十二五分之二秒,確切地說是四百八十毫秒,因此瞬間是九萬四百八十毫秒。
在 29.97 丟幀處,相同的標籤是不同的時刻。計算幀數:名義上的 30 秒的 90 秒給出了 2700 幀,再加上 12 秒,減去第一分鐘丟棄的兩個標籤,即 2710 幀。除以真實速率三萬除以一千零一,瞬間約為九萬四百二十四毫秒。兩個時間碼看起來幾乎相同,但相差大約五十六毫秒,該時間碼小到足以通過審查,大到足以在嚴格的提示上可見。
這不包括什麼 - 超出 99 的時間、容器元資料中的負時間和時間碼
這涵蓋了字幕檔攜帶的時間碼符號。它不涵蓋超過 99 的小時欄位,某些系統將其用於捲軸識別而不是經過的時間,並它不涵蓋負時間,這兩種字幕格式都無法表達;產生 1 的移位被箝位為零。
儲存在容器元資料中的時間碼也超出了範圍。視訊檔案可以攜帶一個起始時間碼,該時間碼會偏移其中的所有內容,因此與節目正確的字幕檔案可能會在檔案中顯示錯誤,並無論檢查多少字幕時間戳都無法揭示這一點。
重點:了解您正在閱讀的時鐘 — Subtitle Toolkit 如何在 SRT 和 WebVTT 時間碼之間準確轉換
知道你正在讀哪個時鐘。逗號和點是為不同解析器編寫的相同值,它們之間的轉換應該改變標點符號,而不改變其他任何內容。幀計數是一種不同類型的數字,沒有其速率就毫無意義,並當速率是丟幀速率時會產生誤導。
使用工具包在 SRT 和 WebVTT 之間進行轉換,並比較前後的時間戳:分隔符號應該更改,而數字不應更改。如果移動了某個數字,則檔案會在某處經歷基於幀的步驟,這就是要檢查的轉換。