Posted in: Language

Anki 里面添加视频

最近两个月来一直在准备日语考试。关于考试本身的事情,等知道结果之后再写。两个月的准备中,我重新学习了 Anki 的新用法,在此写一写,与大家分享。

相关文章

anki 的作用是帮你合理地安排记单词的顺序,但它并不会帮助“记住”每个单词,就像学生物的人很容易就能记住 Arabidopsis thaliana 是一种著名的植物——拟南芥,而学政治的某博士小学生背上几年也不一定能背下来一样。每个单词怎么记是需要自己去收集资料、然后写在 anki 卡片后面。例如可以写:

  • 该单词的在母语中意思(例如中文意思):最简单但效率最差的方式。
  • 例句:稍微好些。
  • 文字 + 图片:比纯文字又好一些。
  • 文字 + 视频:我认为效率最高的方式

视频是动态图像和声音的结合体,既练习“看”又练习“听”。自从我用了这种方式之后,每个单词基本上 1~2 遍就能记住。

如何在 Anki 里面插入视频

虽然可以直接复制视频文件并粘贴进去,但这样容易导致媒体文件过多,跨设备同步不方便。我用的方法是 HTML 代码。

视频格式

桌面版的 Anki 由于是 Qt 写的,因此要求用 webm 格式。而 iOS 手机版的 Anki 既可以是 H264/265 的 mp4 格式也可以是 webm 格式。我是桌面版和手机版都用,因此只能用 webm 格式。

插入 YouTube 视频

先把自己的视频上传到 Youtube,获得视频的 ID 编号,然后插入以下 HTML 片段即可。

<div class="video-container">
<iframe  src="https://www.youtube.com/embed/视频ID" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div>

同时设置 CSS 如下:

.video-container {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 9;
}

.video-container iframe {
  position: absolute;
  width: 100%;
  height: 100%;
  border: 0;
}

该 CSS 的作用是让视频充满整个窗口。毕竟窗口大看起来爽。

注意由于桌面版的 Anki 需要使用 webm 格式,而视频上传 YouTube 之后很少能被转换为 webm,因此会出现问题。解决方法是上传大于 1080p (例如 1440p)的视频,这种情况下 YouTube 会自动生成各个分辨率下的 webm 格式视频。

缺点

在第一个月我主要使用 YouTube 视频,但随着时间推移我发现缺点越来越多:

  1. 上传视频数量多了之后,会要求你进行人脸认证。而人脸认证又经常失败。
  2. 很多来自于电视剧(或者电影)中的视频会被检测出来有版权问题,而不能使用。
  3. 在手机 Anki 上经常播放不成功,显示“播放器配置错误”。

于是后来我转向了 HTML5 视频

插入 HTML5 视频

这种做法是把视频上传到自己的 VPS 上,然后把 URL (例如 https://example.com/video.webm)插入 anki 中。用以下代码片段:

<video playsinline controls="" preload="metadata" style="width:100%; height:auto;">
  <source src="https://example.com/video.webm" type="video/webm">
</video>

同时设置 CSS 如下:

video {
  cursor: pointer; /* visually indicates you can click */
}

该 CSS 的作用是让鼠标移动到视频上时变成一个手的形状,指示点击。

同时设置 JS 如下:

<script>
  document.querySelectorAll('video').forEach(function(video) {
    video.addEventListener('click', function () {
      if (video.paused) {
        video.play();
      } else {
        video.pause();
      }
    });
  });
</script>

该 JS 的作用是利用点击控制视频播放或暂停。

缺点

  • 大部分视频本身是 H264/265 之类的 mp4 格式,转换成 webm 格式比较费时。我目前用如下命令转换:
    • ffmpeg -i video.mp4 -cpu-used 8 -row-mt 1 -tile-columns 4 -crf 35 -b:v 0 -threads 0 video.webm
  • 在 iOS 上会偶而遇到视频播放到一段时间后无法继续播放到问题,随机发生,不能一直重现。

选取视频的方法

对于一个要记的单词:

  1. 用 find 命令在所有的字幕文件(例如我的字幕文件全是 ass 格式)中搜索该单词:
    • find . -type f -name "*.ass" -exec grep -iHe "要搜索的单词" --color {} +
  2. 看该单词出现在哪个视频的哪个时间段,然后打开相应的视频文件,往前后扩展几秒~十几秒,形成一个能够自圆其说的小片段。用 ffmpeg 截取下来并转换为 webm 格式。
  3. 如果有多句台词都出现这个单词(而且它们的意思也一样时),选取咬字清楚的、无大量背景音刚扰的片段。如果还是有很多时,选择自己最喜欢的片段(例如喜欢的演员或者喜欢的主题),自己越熟悉记起来越快。

其他技巧

卡片的正面要写句子,而不是单词

20年前在中学课堂上,老师用卡片给学生背单词的经典模式是:写着“apple”,然后背这是“苹果”,或者写着“苹果”,然后背这是“apple”,这是典型错误的方式。就算是名词,一个单词有多个不同意思的情况也很正常。stool 可以表示凳子,也可以表示粪便。然而如果把单词写在句子里面,它的意思基本上就固定了。所以 stool 的卡片应该写成:

  • We perched on bar stools and had a beer.
  • The patient had bloody stools.

有人可能会怀疑:这样子单词的意思不就从句子里猜出来了吗?那不就失去背诵的意义了吗?然而,能从句子里“猜”出单词的意思来本身也是能力的一种,毕竟任何语言都是以句子为基本单位来交流的。

相关联的单词要写在同一张卡片上,一起背

包括近义词、反义词、类似词等。

Comment (1) on "Anki 里面添加视频"

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注