影片播放器連接到一張來源卡片、一條筆記時間軸,以及一則已核對的筆記。上方有一張帶問號的卡片。

先準備來源播放器和一個小型文字檔。Anki 是一種學習工具,會以卡片顯示問題與答案。筆記用來儲存製作卡片所需的資訊。牌組是一組卡片。本指南的每則筆記只包含一組問題與答案。

學習者公開提出的問題提到了音訊與逐字稿對齊,以及附有雙語字幕的影片片段。這些問題說明了卡片為何需要明確連結到來源,但無法證實需求規模或工具效能。本方法在來源播放器中播放影片,涵蓋文字卡片的核對與匯入檢查,不涵蓋音訊嵌入或影片片段設定。

1. 設定一個學習目標

選一堂公開課程,並選擇你能核對的語言。在挑選字幕行之前,先寫下學習目標。例如,你可能想找出課程中連接兩個資料表的欄位。

選一個能回答該學習目標的簡短段落。不要把每一行字幕都做成卡片。字幕的分段顯示文字出現的時間,不一定代表一個完整概念的起訖。

為這個小牌組設定三項通過標準:

  1. 每個答案都有已核對段落作為依據。
  2. 每則筆記都保留足夠的來源資訊,方便再次核對。
  3. 第二次匯入會修改預定的答案,且不會產生多餘的筆記。

不要將仍有疑問的段落放入學習牌組。你可以之後再處理。看似合理的答案,不等於已核對的答案。

2. 使用現有字幕作為來源副本

字幕軌是隨影片儲存、附有時間資訊的文字。字幕片段是其中一段附有時間資訊的文字。你可以使用能取得的字幕和來源播放器,手動製作幾張卡片。如果你已有附有時間資訊的字幕,請直接進行段落核對。

如果你需要處理字幕缺失問題,請參閱另一篇取得並核對 YouTube 逐字稿指南。這個步驟提供來源文字,不會決定哪些內容適合放上卡片。

YouTube Transcript Scraper 可以擷取現有的公開字幕軌。Actor 是在託管環境中執行的程式。Task 是該程式已儲存的一組輸入預設值。附時間戳記的逐字稿 JSON Task 是文件中提供的起點,可用來取得附有時間資訊的文字。

JSON 是一種文字格式,用來儲存具名數值或內容,以及清單。這裡使用 JSON,是因為它能保留字幕片段的時間。單靠純文字無法確定字幕片段的結束位置。此 Actor 不會將語音轉成文字,也不會下載音訊或影片。它提供來源素材;卡片則由你設計和核對。

以下這組簡單輸入符合所提供的公開輸入規則:

json
{
  "includeFailedInputDetails": true,
  "outputFormats": ["json"],
  "preferredLanguages": [],
  "startUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"]
}
2. 使用現有字幕作為來源副本

執行前,請將 `startUrls` 中的整個範例項目,替換成你要使用的公開課程網址。範例網址只是輸入示例,不能證明該影片適合作為課程,也不能證明執行成功。

空白的 `preferredLanguages` 清單允許程式選擇現有字幕軌中最合適的一軌,並不限定英文。如果你的學習目標需要英文,請將該欄位設為 `["en"]`。程式會依序嘗試偏好的語言。如果沒有符合的語言,Actor 會回報無法取得所需語言的失敗結果,而不會傳回其他語言。

此 Actor 接受 1–1,000 個直接影片網址或影片 ID。重複的影片 ID 只會處理一次。它不接受頻道、播放清單或搜尋輸入。採用本方法時,請先從一部影片開始。這些是文件記載的功能,不是為本指南實際執行所得的結果。

3. 將來源記錄與卡片分開保存

欄位是一筆記錄中有名稱的數值或內容。在撰寫卡片前,請儲存以下傳回欄位;若欄位未提供,則不必補填:

3. 將來源記錄與卡片分開保存
欄位應保留的內容
`videoId` 和 `videoUrl`影片識別資訊與來源網址
`transcriptLanguageCode`選定的字幕語言
`isAutoGenerated`傳回的字幕來源標記
`segments`原始字幕片段文字與時間值
`status` 和 `statusReason`擷取結果與說明
`scrapedAt`擷取時間

保留原始字幕片段,不要修改。將修正內容放在另一份記錄中。這樣你就能區分收到的文字與後來撰寫的答案。

每個片段包含 `text`、`startSeconds`、`endSeconds` 和 `durationSeconds`。請保留傳回值。時長缺失代表未知,不代表時長為零秒。相較之下,播放起點為零秒,則表示影片開頭。

請同時檢查傳回的影片記錄,以及名為 OUTPUT 的執行摘要。每部成功處理且不重複的影片會產生資料集資料列,也就是個別的結果記錄。失敗的輸入不會產生這些成功的逐字稿資料列。請在 OUTPUT 中檢查失敗輸入的詳細資訊。結果為空,不足以判定字幕缺失。

字幕語言、來源標記、片段數量和涵蓋範圍,描述的是傳回的字幕軌,不能證明用字正確。片段數量也無法告訴你能製作多少張有用的卡片。Actor 的公開功能規格說明了這些限制。

4. 先核對段落,再撰寫答案

在影片中開啟選定段落。播放該段落的前一句和後一句。如果說明需要更多上下文,就擴大播放範圍。上下文是理解答案所需的前後文字或畫面。

依下列順序核對段落:

  1. 聽清楚支持答案的字詞。
  2. 核對名稱、數字、單位、條件,以及「不」等字詞。
  3. 確認「它」或「這個」等字詞指的是什麼。
  4. 如果所需資訊來自資料表、圖表或程式碼範例,請檢查畫面。
  5. 寫下簡短的上下文說明,並記錄字幕修正內容。
  6. 如果必要字詞或意思仍不確定,請暫緩使用該段落。

不要用預期的答案補上聽不清楚的字詞。不要因為熟悉某個術語,就自行推定來源未提供的定義。如果課程無法支持擬定的答案,請改選其他問題或段落。

如果卡片需要精確措辭,請依照另一篇核對 YouTube 引文的方法處理。多數卡片可以用自己的話簡短重述。重述必須保留來源原意,包括其中的條件。

即使錄音清晰,內容仍可能有事實錯誤。核對課程說了什麼,與核實其說法是否正確,是兩件事。如果你有理由懷疑該說法,請暫緩使用卡片,直到疑問解決。

5. 一個問題搭配一個答案

先寫問題,再精簡答案。有用的問題會明確指出學習者必須回想的內容。即使離開影片,學習者看到問題時也應能理解。

避免使用「這個有什麼作用?」之類的問題。「這個」依賴未顯示的上下文。請直接寫出物件或操作名稱。如果問題指的是課程中的特定範例,也要明確說明。

每個問題只保留一項主要事實。如果問題詢問兩項互不相關的事實,請拆開。保留事實成立所需的條件。不要只為縮短答案就刪除條件。

用下列項目檢查每份草稿:

5. 一個問題搭配一個答案
檢查項目必要處理
已核對的段落能回答這個問題嗎?若不能,請捨棄或重寫問題。
沒有影片畫面時,問題仍能獨立成立嗎?若不能,請補上必要上下文,或暫緩使用。
答案保留了條件與單位嗎?請在審查前補回。
這個問題是否可能有不只一個合適答案?讓問題更精確。
問題是否詢問了互不相關的事實?拆成不同筆記。

答案可以簡短而不含糊。將支持答案的上下文保留在答案後方,方便日後檢查。不要讓卡片正面透露答案。

6. 設定日後修改仍適用的欄位

使用自訂筆記類型。筆記類型用來定義欄位和卡片版面。將它設為正面顯示一個問題,背面顯示答案。讓來源連結和字幕片段資訊與答案一同顯示,方便再次核對。

依照以下順序使用這六個欄位:

6. 設定日後修改仍適用的欄位
欄位儲存內容
`SourceKey`這份來源與這張卡片專用、唯一且永久不變的識別碼
`Question`一個清楚的問題
`Answer`有已核對段落作為依據的簡短答案
`SourceURL`實際影片網址
`Cue`播放時間、已核對的時間區間,以及簡短的上下文說明
`ReviewState`你對筆記是否已可使用的判定

將 `SourceKey` 保持在第一欄。Anki 處理重複筆記的方式,取決於筆記類型和第一個欄位。請測試是否符合預期,不要假設每次匯入都會更新現有筆記。Anki 文字匯入手冊說明了欄位分隔、欄位對應和重複筆記的處理方式。

來源鍵值可以由影片識別碼、字幕片段時間和卡片編號組成。只設定一次。如果你重寫問題或修正答案,請保留該鍵值。如果日後調整字幕片段時間,不要自動依新時間重建鍵值。不同的鍵值可能讓修訂後的內容被視為新筆記。

使用簡單的審查標籤,例如 `needs_review` 和 `reviewed`。這些標籤由你指定,不是 Actor 的結果,也不能證明已完成獨立核對。

另外保留一份修正記錄,包含來源鍵值、原始字幕片段文字、修正後的措辭、原因、核對的時間區間和審查日期。你的筆記檔案、審查決定和 Anki 匯入設定,都是擁有者自己的記錄。公開的 Task 頁面不會揭露或驗證這些記錄。

7. 儲存檔案並測試兩則筆記

將六個欄位儲存為 UTF-8 編碼、以定位字元分隔的文字檔。UTF-8 是一種文字編碼,支援多種語言的字元。以定位字元分隔,是指各欄位之間用定位字元隔開。這次小型測試每行只放一筆記錄。

第一個檔案保持簡單。每個欄位只用一行,欄位值內不要放定位字元。如果內容需要在欄位內使用定位字元或換行,請遵循 Anki 文件的引號規則,並檢查預覽。如果替換文字會改變意思,就不要盲目替換。

依照下列步驟操作:

  1. 使用自訂筆記類型,建立暫用的測試牌組。
  2. 準備兩則已審查的筆記,並使用不同的來源鍵值。
  3. 開啟匯入預覽,選擇以定位字元作為分隔符號。
  4. 將檔案中的每一欄對應到相符的欄位。
  5. 確認第一欄對應到 `SourceKey`。
  6. 匯入檔案,並檢查兩張卡片。
  7. 只修改檔案中的一個答案。保留其來源鍵值。
  8. 使用預定的更新設定及相同筆記類型,再次匯入。
  9. 確認答案已變更,且沒有出現多餘的新筆記。

檢查顯示的問題、答案、字幕片段資訊和來源連結。開啟每個實際來源連結,並在播放器中核對標示時間。看到網址,不代表它會開啟預定的課程。

內建的雙欄位筆記類型需要另一套明確的欄位對應。在決定每個值應放入哪個欄位之前,不要將這個六欄位檔案匯入其中。如果更新測試失敗,請停止匯入。在加入更多筆記前,先解決欄位對應、鍵值、筆記類型或重複筆記設定的問題。

操作範例:原創虛構內容

本範例為原創虛構內容,不是 Actor 的結果、真實課程,也不是已完成的 Anki 測試。下方提出的匯入步驟尚未實際執行。

在這堂虛構課程中,02:14 的段落說明兩個樣本資料表使用固定不變的 ID 連接記錄。ID 是識別碼的意思,在此指用來識別樣本的值。後面另一個虛構段落則說,變更樣本標籤時,不得變更其 ID。

第一個段落從 2 分 14 秒開始:

`2 × 60 seconds + 14 seconds = 134 seconds`

在這個虛構範例中,該段落於第 142 秒結束。時長為:

`142 seconds − 134 seconds = 8 seconds`

第二個虛構段落從第 142 秒到第 148 秒:

`148 seconds − 142 seconds = 6 seconds`

這些時間區間是為教學而虛構的數值,不是實測影片的結果。鍵值 `demo-video:134:01` 用來識別第一張虛構卡片。結尾的 `01` 是卡片編號,不是準確度分數。

準備以下兩則虛構筆記:

操作範例:原創虛構內容
欄位虛構筆記 1虛構筆記 2
`SourceKey``demo-video:134:01``demo-video:142:01`
`Question`在本課程的樣本資料表中,哪個欄位用來連接這兩個資料表?在本課程中,樣本標籤變更時,樣本 ID 是否應跟著變更?
`Answer`固定不變的 ID。不應變更。樣本 ID 應保持不變。
`SourceURL`留空;沒有真實影片。留空;沒有真實影片。
`Cue`02:14;134–142 秒;樣本資料表的連接02:22;142–148 秒;標籤變更規則
`ReviewState``needs_review``needs_review`

範例中的來源網址缺失,因此留空,不用範例影片網址代替。由於沒有實際來源可供核對,這些筆記不放入真正的學習牌組。

第一個問題將「哪個欄位用來連接這兩個資料表?」的範圍,限定在課程的樣本資料表。它並不是在教你所有資料表都必須使用相同的連接欄位。

若要進行擬定的重複筆記測試,請將第一個答案改為「固定不變的樣本 ID。」保留 `demo-video:134:01` 不變。在設定正確的更新完成後,預期結果仍是兩則筆記,其中第一個答案已修訂。如果出現第三則筆記,就表示這次匯入沒有完成預定的更新。這些是測試的預期結果,不是實際測試結果。

使用真實課程時,請將虛構內容替換為已核對的來源素材。保留實際播放時間、可正常開啟的來源連結,以及你的審查記錄。

先解決失敗問題,再擴充牌組

根據實際觀察到的失敗情況,決定下一步。不要將每個問題都視為字幕缺失。

先解決失敗問題,再擴充牌組
觀察到的狀況下一步
擷取失敗使用該輸入撰寫草稿前,先檢查 OUTPUT。
無法取得所需語言維持語言要求,或明確決定改用另一條可取得的字幕軌。
必要字詞不清楚暫緩使用筆記,不要猜答案。
畫面提供了卡片中未顯示的上下文補上足夠的上下文,或捨棄問題。
來源值缺失保留為未知,不要當成零。
資料欄出現在錯誤的欄位修正分隔符號或欄位對應,再次預覽。
修訂後產生多餘的筆記檢查鍵值、筆記類型和重複筆記設定。
來源連結指向錯誤影片修正連結,並再次核對來源。

兩則筆記顯示正確,只能說明這兩則筆記通過了你的小型檢查。這不能證明未來每次匯入都會成功,也不能證明未來每個答案都正確。請審查每個新增段落。變更檔案結構或筆記類型時,請重新進行匯入測試。

來源與延伸閱讀

作者 Chronometrica · 更新日期

返回頂端 ↑