我历时八年将 45 盘录像带数字化的漫长历程(上篇)
过去八年里,我带着这箱录像带辗转住过四套公寓和一栋房子。它们是我童年时期的家庭录像。
经过 600 多个小时的工作,我终于把它们数字化并整理到足以扔掉原始录像带的程度。现在,这些影像看起来是这样的:


我所有的家庭录像都已数字化,可以通过私密媒体分享服务器观看
一共有 513 个独立片段,每个片段都有标题、描述、录制日期、视频中所有人的标签,以及每个人在录制时的年龄。我把所有内容托管在一个只有家人能够访问的私密媒体分享网站上,每月运行成本不到 1 美元。
这篇文章会介绍我是怎么做到的、为什么花了八年时间,以及你如何用稍微少一些的努力完成同样的事情。
我天真的第一次尝试
大约在 2010 年,我妈妈买了某种 VHS 转 DVD 转换器,把我们所有的家庭录像都转换了一遍。

妈妈制作的录像带 DVD 原始副本(我不确定缺失的那些字母是怎么回事)
问题在于,DVD 只有一套。而我家每个人都住在不同的州,光是把光盘互相传递就很不方便。
2012 年,我姐姐把这些 DVD 给了我。我把它们翻录成视频文件,然后全部扔到云存储里。问题解决!

在 Google Cloud Storage 上分享我家的家庭录像 DVD 翻录文件
几周后,我问大家有没有看过这些录像。没人看过,我也没有。在 YouTube 时代,为了寻找有趣的片段而下载一个长达 3 小时、内容未知的文件,实在让人觉得无聊。
唯一感到兴奋的是我妈妈。“好,太好了,”她说,“那我现在终于可以把这些录像带全扔掉了吗?”
糟糕。这是个可怕的问题。万一有录像带漏掉了呢?万一我们能以更高的质量进行数字化呢?万一 VHS 录像带标签上有有趣的信息呢?
在确信我们已经以尽可能高的质量完整采集了所有视频之前,我绝不会放心地扔掉原始录像带。这意味着必须由我自己来做这件事。
当时的我完全不知道自己要面对什么。
听起来没那么难
如果你疑惑我为什么会花八年和数百个小时来做这件事,我完全不怪你。我当时也以为这会是个简单的项目。
从头到尾,数字化流程看起来是这样的:
或者说,理论上的数字化流程是这样的。实际情况则是:
我花费的大部分时间都用在了返工上。我完成一个阶段后,往往要到一两个步骤之后才发现自己的方法存在缺陷。比如,我采集了 20 盘录像带的视频,才意识到音频有轻微的不同步。又比如,我花了几周剪辑之后才发现,自己导出的视频格式不支持在线流媒体播放。
为了不让所有人都抓狂,我会把这个过程描述成持续向前推进的样子,而不是不断让读者像我一样跳回之前的步骤、重新开始。
第 1 步:视频采集
好,我们回到 2012 年。我妈妈迫切想结束自己对家庭录像长达 20 年的保管工作,所以我下次见到她时,她递给了我一大箱录像带。我的数字化冒险开始了。
显而易见的解决办法是把这件事外包给专业人士。现在有很多数字化公司,其中也包括专门处理老家庭录像的企业。
我对隐私相当敏感,所以把包含我如厕训练过程的影像交给陌生人让我感到不自在(当然是在适当的年龄,没什么奇怪的!)。而且我想,数字化视频能有多难?
剧透:难得不得了。
我的第一次视频采集尝试
家里的老式 VCR 还在我爸爸家的地下室里,于是我请他下次我们一起吃午饭时把它找出来。我从 Amazon 买了一个便宜的 RCA 转 USB 转接器,然后就开始干了。

TOTMC 视频采集设备,这是我在整个过程中购买的众多音视频设备中的第一件。
为了处理 USB 采集设备传来的视频,我使用了 VirtualDub。2012 年时它已经有点过时了,但也没有过时到那种程度。

使用 VirtualDub 采集 4 岁时我给爸爸读书的原始影像
音频漂移这个阴魂不散的祸害
开始剪辑后,我发现音频和视频有轻微的不同步。好吧,没问题。我把音频稍微移动一下就行。
十分钟后,它又不同步了。难道我第一次移动得还不够?
我渐渐意识到,音频和视频并不是简单地错开了一段时间——它们的采集速率不同。随着录像带播放,它们之间的偏差越来越大。为了让两者保持同步,我不得不每隔几分钟手动调整一次音频。

如果你的视频设备以不同速率采集音频和视频,唯一的解决办法就是每隔几分钟手动校正一次音频。
你知道要分辨一个声音是提前了 10 毫秒还是延迟了 10 毫秒有多难吗?很难!你可以自己判断一下。
下面是一段我和可怜又耐心的小猫 Black Magic(黑魔法)玩耍的视频。音频和视频有轻微不同步。你能判断出音频是领先还是滞后吗?
音频和视频不同步的视频片段示例
这是 Magic 跳起来的部分,放慢到 1/5 倍速:
放慢到 1/5 倍速的音频和视频不同步示例
也许我应该多花一百美元,而不是浪费数百个小时
光是校正音频就花了数小时进行乏味而令人抓狂的工作。我终于想到,如果不用 Amazon 上最便宜的视频采集设备,也许就能避开这个麻烦。又做了一些研究后,我买了一个新的设备:

我第二次购买视频采集设备的尝试
即使换了新设备,音频漂移仍然存在。
升级到 Super
也许问题出在 VCR 上。数字化论坛上说,如果 VCR 配有“time-based corrector(TBC,时基校正器)”,就不会出现音频漂移;而时基校正器是 Super VHS(S-VHS)VCR 的常见功能。
当然了!既然有能解决问题的超级 VCR,我还摆弄那台愚蠢的普通 VCR 干什么?
现在已经没有厂商生产 S-VHS VCR 了,但 eBay 上仍然买得到。我花了 179 美元买了一台 JVC SR-V10U,据说这个型号非常适合 VHS 数字化:

我在 eBay 上花 179 美元买的老式 JVC SR-V10U VCR
超级 VCR 邮寄到了。经过数月与不匹配的声音苦苦斗争后,能亲手拿着这件承诺解决我所有问题的设备,我欣喜若狂。
我打开箱子,接好所有设备,音频还是不同步。唉。
乏味的故障排查与持续数年的停滞
排查硬件问题简直痛苦不堪。我得把所有设备从壁橱里搬出来,钻到台式机后面接好所有东西,尝试采集,然后发现还是不行。
哦,2008 年的一篇随机论坛帖子说要安装某个可疑的、未经签名的中国设备驱动?这主意糟透了,但我已经走投无路。结果它并没有解决问题。
我试过不同的采集软件,买过一盘专用 VHS 清洁带来清洁 VCR 的磁头,也买过第三个采集设备。结果始终一样。
我总是会放弃,拔掉所有设备,再把它们打入壁橱,接下来几个月不闻不问。
向数字化专业人士投降
快进到 2018 年。我带着这些录像带和大量设备搬过四套公寓,当时正准备从纽约市搬到马萨诸塞州。既然已经很明显我不可能独自完成这个项目,我实在找不到理由再搬一次这些东西。
我问家人,是否介意我把录像带寄给一家数字化公司。幸运的是,没人介意——他们更关心的是能再次看到这些影像。
我:但这意味着某家公司能够访问我们所有的家庭录像。你们没问题吗?
我姐姐:没事,我不在乎。只有你会担心这个。等等,你一开始其实可以直接花钱请人做?
我:呃……
数字化全部 45 盘录像带花了 750 美元。这听起来可能很贵,但那时为了避免再花一分钟排查视频设备的问题,我什么钱都愿意付。
文件寄回来后,质量毫无疑问更好了。我自己采集的视频边缘总会出现“撕裂”,而专业人员数字化的所有内容都没有任何失真。最棒的是,音频和视频完全同步。
下面是一段视频,对比了数字化公司采集的版本和我自己采集的版本:
专业视频采集与我自己采集的对比,内容是妈妈记录我第一次写代码
第 2 步:剪辑
对于家庭录像来说,大约 90% 的影像很无聊,8% 很有趣,2% 精彩绝伦。录像带数字化之后,还有大量工作要做。
使用 Adobe Premiere 剪辑
VHS 录像带包含一长串混杂着空白片段的视频。要剪辑一盘录像带,你必须找出每个片段的起点和终点。
我使用的是 Adobe Premiere Elements 剪辑软件,终身许可证价格不到 100 美元。它在剪辑 VHS 录像带时最关键的功能是可缩放的时间线。借助这个功能,你可以快速找到大致的场景边界,然后放大时间线,找出片段开始或结束的确切视频帧。

Adobe Premiere Elements 中不可或缺的可缩放剪辑时间线
Premiere 的问题是,它需要频繁地启动和停止。我的流程是:
- 打开一个包含 30 到 120 分钟视频的原始采集文件。
- 标记单个片段的边界。
- 导出片段。
- 等待 2 到 15 分钟,直到导出完成。
- 重复第 2 到第 4 步,直到录像带结束。
漫长的等待意味着我必须不断在视频剪辑和其他任务之间切换上下文,几个小时都在拼命重新集中注意力。
另一个缺点是无法复现。修正一个小错误,几乎和从头做完整件事一样困难。等我进行到视频分享阶段时,这个问题狠狠地反咬了我一口。直到那时我才意识到,我本应将视频导出为 Web 浏览器可以原生流式播放的格式。我的选择要么是重新开始那套繁琐的流程,导出数百个片段;要么把已经导出的视频重新编码成另一种格式,同时牺牲画质。
机器人剪辑
手工做了多得令人尴尬的几个小时后,我想知道能不能干脆把人工智能扔给这个问题。识别片段边界似乎很适合用机器学习来完成。我知道准确率不会完美,但也许它能完成 80% 的工作,剩下的 20% 我再手动修正。
我试用了一个名为 pyscenedetect 的工具。它会分析视频文件,并打印出发生场景切换的时间码:
$ docker run
--volume "/videos:/opt"
handflucht/pyscenedetect
--input /opt/test.mp4
--output /opt
detect-content --threshold 80
list-scenes
[PySceneDetect] Output directory set:
/opt
[PySceneDetect] Loaded 1 video, framerate: 29.97 FPS, resolution: 720 x 480
[PySceneDetect] Downscale factor set to 3, effective resolution: 240 x 160
[PySceneDetect] Scene list CSV file name format:
$VIDEO_NAME-Scenes.csv
[PySceneDetect] Detecting scenes...
[PySceneDetect] Processed 55135 frames in 117.6 seconds (average 468.96 FPS).
[PySceneDetect] Detected 33 scenes, average shot length 55.7 seconds.
[PySceneDetect] Writing scene list to CSV file:
/opt/test-Scenes.csv
[PySceneDetect] Scene List:
-----------------------------------------------------------------------
| Scene # | Start Frame | Start Time | End Frame | End Time |
-----------------------------------------------------------------------
| 1 | 0 | 00:00:00.000 | 1011 | 00:00:33.734 |
| 2 | 1011 | 00:00:33.734 | 1292 | 00:00:43.110 |
| 3 | 1292 | 00:00:43.110 | 1878 | 00:01:02.663 |
| 4 | 1878 | 00:01:02.663 | 2027 | 00:01:07.634 |
...
它的准确率确实大约为 80%,但检查工具成果所花的时间比它帮我省下的还多。不过,pyscenedetect 让我意识到了整个项目中最重要的事情之一:识别场景边界和导出片段是两个独立的任务。
我想起自己是个程序员
在那之前,我一直把自己在 Adobe Premiere 中做的所有事情都称为“剪辑”。从原始影像中剪出子片段,感觉和寻找片段边界密不可分,因为 Premiere 就是这样呈现整个过程的。当 pyscenedetect 打印出元数据表时,我意识到可以把寻找场景和导出视频解耦。这是一个改变游戏规则的发现。
剪辑之所以如此乏味又耗时,是因为我必须不断等待 Premiere 导出每个片段。如果我把元数据记录在电子表格中,再写一个脚本自动导出视频,剪辑过程就会快如飞起。
而且,电子表格极大拓展了我能够记录的信息类型。起初,我把元数据塞进文件名里,但这种做法局限性很大,也不灵活。拥有一整张电子表格后,我就能记录片段的更多信息,比如视频中有哪些人、录制时间,以及人们观看视频时我想要和视频一起展示的其他数据。

在一张巨大的电子表格中记录我的家庭录像元数据
后来,我还能够利用这些元数据,为片段添加诸如我们当时各自的年龄,以及片段中正在发生什么的详细描述等信息。

借助电子表格提供的灵活性,我可以记录更多元数据,为片段提供更多信息,也让它们更容易浏览。
自动化方案的美妙之处
有了电子表格后,我写了一个脚本,根据 CSV 输入把原始视频切成更小的片段。
那时,我已经在 Premiere 中花了数百个小时,乏味地选择片段边界、点击导出、等待几分钟完成,然后重新开始。不仅如此,在后来发现画质问题后,我还在同一批影像上重复过好几次这个过程。
把片段切分这一步自动化后,我如释重负。我不用再担心忘记元数据,也不用担心选错输出格式。如果事后发现错误,我只需修改脚本,然后重新运行全部流程。
下篇
采集和剪辑片段只完成了一半。我还需要一种有趣、安全又经济实惠的方式,把所有内容分享给家人。
在这篇文章的下篇中,我会介绍自己使用的开源媒体服务器,以及如何只花每月 0.77 美元就把这些片段分享给家人。
插图由 Loraine Yow(洛林·姚)绘制。
特别感谢我的家人:感谢他们允许我分享其中一部分片段和静帧,感谢他们最初录下了这一切,也感谢他们在整个过程中给予我的支持。
随机一篇博客


