一个视频播放器连接着一张来源卡片、一条笔记时间线和一条已核查的笔记。上方有一张带问号的卡片。

先准备原视频播放器和一个小型文本文件。Anki 是一种学习工具,用卡片展示问题和答案。笔记保存用于生成卡片的信息。牌组是一组卡片。本指南的每条笔记只包含一个问题和一个答案。

学习者公开提出的问题涉及音频与字幕文本的对齐以及带双语字幕的视频片段。这些问题说明,卡片需要与其来源建立明确的联系。但它们不能证明需求规模或工具性能。本方法使用原视频播放器播放内容,涵盖经过核查的文字卡片和导入检查,不涉及音频嵌入或视频片段设置。

1. 设定一个学习目标

选择一节公开课程,以及一种你能核查的语言。先写下学习目标,再选择字幕内容。例如,你可能想找出课程中用于连接两张表的字段。

选择一个能满足该目标的短片段。不要把每行字幕都做成卡片。字幕的起止位置表示文字何时出现,不一定对应一个完整的意思。

为这个小牌组设定三项通过标准:

  1. 每个答案都有已核查片段作为依据。
  2. 每条笔记都保留足够的来源信息,便于再次核查。
  3. 第二次导入能更新指定答案,且不会产生多余笔记。

不要将存疑的片段放入学习牌组。你可以稍后再处理。看似合理的答案不等于已经核查的答案。

2. 用现有字幕保存一份来源副本

字幕轨是随视频保存的带时间信息的文本。字幕片段是其中一段带时间信息的文字。你可以使用可获取的字幕和原视频播放器,手动制作少量卡片。如果已有带时间信息的字幕,请直接进行片段核查。

如果缺少字幕,请参阅获取并核查 YouTube 字幕文本的专门指南。这一步提供原始文本,但不决定哪些内容应放到卡片上。

YouTube Transcript Scraper 可以采集已有的公开字幕轨。Actor 是一种托管程序。Task 是为该程序保存的一组预设输入。带时间戳的字幕 JSON Task 是文档中提供的起点,可用于获取带时间信息的文本。

JSON 是一种文本格式,用于保存有名称的值和列表。这里使用它,是因为它能保留字幕片段的时间。仅凭纯文本无法确定字幕片段在哪里结束。该 Actor 不进行语音转文字,也不下载音频或视频。它提供来源材料;卡片由你设计和核查。

下面这组简短输入符合所提供的公开输入规则:

json
{
  "includeFailedInputDetails": true,
  "outputFormats": ["json"],
  "preferredLanguages": [],
  "startUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"]
}
2. 用现有字幕保存一份来源副本

运行前,请将 `startUrls` 中的整个示例条目替换为你要使用的公开课程 URL。示例 URL 仅用于演示输入格式,不能证明对应视频适合作为课程,也不能证明运行成功。

将 `preferredLanguages` 留为空列表,表示允许选择当前可用的最佳字幕轨,并不要求使用英语。如果学习目标要求英语,请将该字段设为 `["en"]`。程序会依次尝试所列语言。如果没有匹配项,Actor 会报告语言不可用的失败结果,而不是返回其他语言。

该 Actor 接受 1–1,000 个直接视频 URL 或视频 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. 确认答案已更改,且没有产生多余笔记。

检查显示的问题、答案、字幕片段信息和来源链接。打开每个真实的来源链接,在播放器中核对标明的时间。不要因为看到了 URL,就认定它能打开预期的课程。

内置的双字段笔记类型需要另一套明确的字段对应设置。在确定每个值应放在哪里之前,不要将这个六字段文件导入其中。如果更新测试失败,请停止导入,先解决字段对应关系、来源键、笔记类型或重复笔记设置的问题,再导入更多笔记。

操作示例:原创虚构内容

本例为原创虚构示例。它不是 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`

本例将来源 URL 留空,因为这些信息并不存在,没有用示例视频 URL 代替。由于没有实际来源可供核查,这些笔记不会放入真实的学习牌组。

第一个问题将“哪个字段用于连接这两张表?”限定在本课的样本表中。它并不是在说,每张表都必须使用相同的连接字段。

要进行所提出的重复笔记测试,可将第一个答案改为“固定的样本 ID。”,并保持 `demo-video:134:01` 不变。正确配置更新后,预期仍有两条笔记,且第一条的答案已修改。如果出现第三条笔记,就说明本次导入没有完成预期的更新。这些是测试的预期结果,不是已经取得的测试结果。

使用真实课程时,请用已核查的来源材料替换虚构内容。保留实际播放时间、可正常打开的来源链接,以及你的核查记录。

先解决失败问题,再扩大牌组

根据实际观察到的失败情况决定下一步操作。不要把每个问题都当成字幕缺失。

先解决失败问题,再扩大牌组
观察到的情况下一步操作
提取失败使用该输入内容起草笔记前,先检查 OUTPUT。
所需语言不可用保留原有语言要求,或在明确决定后选择其他可获取的字幕轨。
必要的词语听不清暂缓使用该笔记,不要猜答案。
所需上下文只出现在画面中补充足够的上下文,或弃用该问题。
来源中的某个值缺失将其保留为未知值,不要记为零。
文件列出现在错误的字段中修正分隔符或字段对应关系,然后再次预览。
修改后产生了多余笔记检查来源键、笔记类型和重复笔记设置。
来源链接指向错误的视频修正链接,并再次核查来源。

两条笔记显示正确,只能说明这两条笔记通过了你的小规模检查。它不能证明以后每次导入都会成功,也不能证明以后的每个答案都正确。请核查每个新增片段。更改文件结构或笔记类型时,请重新进行导入测试。

来源和延伸阅读

作者 Chronometrica · 更新日期

返回顶部 ↑