字幕轉純文字稿
或者貼上字幕文字
選項
上一條字幕結束與下一條開始之間的靜音毫秒數。達到它,文字稿就另起一段;不到,就當作連續的一段話。這個數字決定文字怎麼排版,不決定它說什麼:2000 能在字幕把一句話切成三、四條時仍把它留在一段裡,而 0 會讓每條字幕各自成段。停頓是相對最後一條有文字的字幕量起,所以中間夾著的空白字幕不會把一段切成兩半。
預設關閉,得到的是可以直接貼進文件的純文字區塊。開啟後每段前面會加上 [HH:MM:SS] —— 該段第一條字幕的開始時間,精確到秒,不帶毫秒。讀者可以用這個標記在播放器裡找回那一刻;三個候選位置(段首、段中、段尾)裡只有段首與播放器顯示的相符。
時間以哪個影格率計算。在格式頁面上,這是 MicroDVD 需要的值,因為它把時間存成影格編號。在影格率頁面上,它是檔案當初對應的速率 —— 字幕是照這個版本製作的 —— 而頁面的第二個欄位填你要搭配的影片速率。常見的有 23.976、24、25、29.97、30、50、59.94 和 60。填錯會讓整條時間軸位移;在影格率頁面上,位移是按比例發生,而不是固定的量。
這一頁讀取一份字幕檔案,把同樣的字交還給你——變成一段段流暢的純文字:只為了塞進螢幕而存在的換行會被接起來,前後貼得很近的字幕條則被讀成同一段連續的話。把檔案拖進來、執行,出來的是一塊可以直接貼進會議紀錄、審閱表或文章的散文。什麼都不會離開瀏覽器分頁,所以不能上傳的素材就留在原地。
唯一要說清楚的,是換行這件事。字幕檔案裡的換行,理由跟句子毫無關係:這一行在畫面上太長了,於是被切開,兩半再對齊一下。把字幕檔案存成 .txt 會保留那些換行,一條字幕一行,這在文字要餵回播放器時正是你要的。純文字稿則是由人在頁面上讀的,句子中間的換行只會是噪音,所以這一頁把它們接起來。一句話的兩半會變成同一行,而之後也沒有辦法查出當初的螢幕換行落在哪裡。
段落由沉默決定,不是由字幕條決定。一條字幕一段,等於每三四秒就斷一次句,因為正常的字幕檔案會把一句口說的話切成好幾條字幕,好讓每一條塞得進自己的時間。這一頁改看前一條結束到下一條開始之間的間隙:大約兩秒的間隙會開一個新段落,比這更短的,就讓文字繼續跑下去。這個數字在欄位裡,也是唯一值得想一想的設定——你來我往的快速對白把它調低,一場在一段思緒裡停很久的演講把它調高。設成零,每一條字幕都會自成一段,那是這一頁最接近「一條字幕一行」的時候。
另外還有一個開關,可以為每一段加上開始時間,預設是關的。打開之後,每一段前面會有一個像 [00:42:17] 的印記,時間取自該段第一條字幕。它只精確到秒,毫秒是刻意丟掉的:這個印記的用途,是讓讀者能在播放器裡找回那一刻,而 00:42:17 就做得到。改成每一條字幕都蓋一個章,只會把純文字稿變回一份加了多餘標點的字幕檔案。
這一頁不會做的事,是替任何東西安上名字。這裡讀的十二種格式——SRT、WebVTT、ASS、SSA、SBV、SAMI、MicroDVD、TTML、JSON 與 CSV——全都只存時間和一些文字,沒有人記錄說話的是誰;文字裡若出現任何標籤,那是有人在台詞裡自己打的。所以這一頁產出的純文字稿不帶說話者名稱,也不會從句子的形狀去猜、去編一個出來。完全沒有內容的字幕條會被跳過,而不是留下一段空白;每一行也都會去除前後空白,所以你不會在字幕被截短的地方看到一串散落的空格。
範例
兩條讀起來是一句話的字幕
輸入
1
00:00:01,000 --> 00:00:03,000
I missed the last train home
and had to walk.
2
00:00:03,400 --> 00:00:05,000
Back before midnight,
you said.
3
00:00:09,000 --> 00:00:11,000
Every night this week?
輸出
I missed the last train home and had to walk. Back before midnight, you said.
Every night this week?
三條字幕進去,兩個段落出來。前兩條相隔 400 毫秒,遠在兩秒停頓之內,所以留在同一段,而各自在畫面上的兩行也被接成一行。第三條前面隔了四秒,於是開了第二段。所有的字都還在——改變的是哪些換行被留了下來。
剛好兩秒的停頓
輸入
1
00:12:30,000 --> 00:12:32,000
The train was late
again.
2
00:12:34,000 --> 00:12:36,000
Third time this week.
輸出
The train was late again.
Third time this week.
第二條在第一條結束兩秒後開始,正好是停頓欄位裡的數字,也就是新段落開始的那一刻。如果你想核對這一頁的算術,就看這個例子:把欄位改成 2500,這兩條就會併成同一段,因為兩秒的間隙再也達不到門檻。
同一份檔案,加上開始時間
輸入
1
00:02:15,000 --> 00:02:17,000
Here is where
we came in.
2
01:47:52,000 --> 01:47:55,000
And here is
where we leave.
輸出
[00:02:15] Here is where we came in.
[01:47:52] And here is where we leave.
打開時間印記開關後,每一段前面都會加上開啟它的那條字幕的開始時間,精確到秒。第二段已經將近兩小時處,也說明了為什麼小時要寫出來、而不是全部換算成分鐘:01:47:52 告訴讀者該把播放器拖到哪裡,107:52 則不行。
常見問題
這跟把字幕存成 .txt 檔案有什麼不同?
差在換行。把字幕存成 .txt 會保留檔案自己的換行,一條字幕一行,因為那個輸出是要被當成字幕檔案讀回去的。這一頁正好相反:先把一條字幕內部的螢幕換行接成一行,再在停頓夠短的地方把整條整條的字幕併成段落。兩邊的字一模一樣。若你需要保留原本的換行,該去的是純文字轉換那一頁;若你要的是人能當散文讀的東西,就是這一頁。
這一頁怎麼決定一段在哪裡結束、下一段從哪裡開始?
看字幕條之間的沉默,不是看字幕條本身。這一頁量前一條結束到下一條開始的間隙,當間隙達到停頓欄位裡的數字(起始值 2000 毫秒)時,就開一個新段落;比這更近的,被讀成同一段連續的話。一條字幕一段在這裡會是錯的,因為一句口說的話通常被切成三、四條字幕,好讓每一條塞進自己的時間,而每幾秒斷一次段的東西,不是純文字稿的樣子。
把停頓設成零會有什麼效果?
零是一個真實的值,不是空欄位:每一個間隙都達到它,所以每一條字幕都自成一個段落。這是這一頁最接近一條字幕一行的做法,而且還附帶一個好處——每條字幕內部的螢幕換行仍然會被接起來。當檔案是一連串各自獨立的陳述、而不是連續的口語時——例如一組簡報頁,或結構化訪談裡的回答——而你希望每一項各自站好,就選這個設定。
為什麼時間印記只精確到秒?
因為純文字稿裡的印記是書籤,不是剪接點。它的用途是讓讀者在播放器裡找回那段話,而在一個小時長的節目裡,00:42:17 已經精確到足以落在那一句上——毫秒只會替每一段開頭多佔四個字元,卻不改變任何人會拖到哪裡。每一條字幕都蓋章、而且精確到毫秒,那是字幕檔案的用途,你拖進來的檔案裡本來就有。
純文字稿裡會出現說話者名稱嗎?
不會,而且不是因為這一頁把它們拿掉了。這裡讀的格式,沒有一種有「說話的是誰」這個欄位:SRT、WebVTT、ASS、SSA、SBV、SAMI、MicroDVD、TTML、JSON 與 CSV 全都只存一段時間和一些文字。檔案裡真的出現名字的地方,那個名字是被打進台詞裡的,通常用大寫或在前面加破折號,所以它會出現在純文字稿裡檔案放它的那個位置,不會出現在別處。這一頁不會從句子的形狀去推論——把猜測包裝成說話者標籤,比沒有標籤更糟。
完全沒有文字的字幕條會怎麼處理?
會被跳過,不留痕跡,連一個空行都沒有。沒有內容的字幕條通常是為了定位而不是為了閱讀而存在;若把它留下來,純文字稿就會在句子中間出現一個沒有解釋的洞。跳過它也不會打亂分段:決定段落的停頓,是對照上一條真的有字的字幕來量的,所以夾在兩句之間的空字幕條不會把它們拆開。
純文字稿會保留畫面上原本的換行嗎?
不會,而這是這一頁做了之後就無法還原的一件事——那些換行的位置不在輸出裡的任何地方。它們是為了配合螢幕寬度而做的版面決定,而頁面上的讀者要的是句子,不是螢幕寬度,所以這一頁把它們解掉。若你需要一份仍然帶著它們的檔案,請改走純文字轉換:那裡每一條字幕的每一個換行都照檔案原樣保留,一條一行。