我的八年征途:數位化 45 捲錄影帶(上篇)
過去八年來,我帶著這一箱錄影帶搬過四間不同的公寓和一棟房子。裡面全是我童年時期的家庭錄影。
經過 600 多小時的努力,我終於把所有影片數位化並整理到足以丟掉原始錄影帶的程度。現在的成果看起來是這樣:


我所有的家庭影片,都已數位化並可在私人媒體分享伺服器上觀看
總共有 513 段獨立的影片,每一段都有標題、說明、錄製日期、標記出入鏡的每個人,以及當時每個人的年齡。所有影片都放在只有家人能存取的私人媒體分享網站上,每月維護費用不到 1 美元。
這篇文章將說明我是怎麼辦到的、為什麼花了八年,以及你如何用稍微省力一點的方式達成同樣的成果。
我那天真的第一次嘗試
大約在 2010 年,我媽媽買了一種 VHS 轉 DVD 的轉換器,把我們所有的家庭錄影都轉了過去。

我媽媽當初製作的 DVD 複本原件(我不確定那些缺少的字母是怎麼回事)
問題是,DVD 只有一套。我們全家人各自住在不同的州,要傳來傳去很不方便。
2012 年,我姊姊把這些 DVD 交給了我。我把它們轉成影片檔,全部上傳到雲端儲存空間。問題解決了!

在 Google Cloud Storage 上分享家庭錄影的 DVD 轉檔
幾週後,我問大家有沒有看過這些錄影。沒有人看過。我自己也沒看。在 YouTube 的時代,要下載一個長達 3 小時的神秘檔案去尋找有趣的片段,實在太無聊了。
唯一感到興奮的是我媽媽。「太好了,」她說,「那我現在終於可以把這些錄影帶都丟掉了吧?」
哎呀,這可是個可怕的問題。要是有漏掉的錄影帶怎麼辦?要是可以用更高的畫質數位化呢?要是 VHS 錄影帶標籤上有什麼重要資訊呢?
除非我確信已經用最高畫質完整擷取了所有影片,否則我絕對無法安心丟掉原始錄影帶。這意味著得由我自己來做。
我當時還不知道自己到底踏進了什麼樣的坑。
聽起來好像沒那麼難
如果你好奇為什麼這件事花了我八年、數百小時,我完全能理解。我一開始也以為這會是個簡單的專案。
從頭到尾,數位化的流程看起來是這樣:
或者更精確地說,理論上的數位化流程是長這樣。但實際上的情況是這樣:
我花的時間大多都在重做。每次完成一個階段,往往在一、兩個步驟後才發現先前的作法有瑕疵。舉例來說,我擷取了 20 捲錄影帶後,才發現音訊有點不同步。或是花了數週剪輯後,才發現自己輸出的影片格式不支援線上串流。
為了大家的理智著想,我會假裝整個過程是一路向前推進來敘述,而不是逼著讀者跟我一起不斷往回跳、重新開始。
步驟一:影片擷取
好,回到 2012 年。我媽媽急著想結束她長達 20 年保管家庭錄影的任務,所以下次見面時,她交給我一大箱錄影帶。我的數位化冒險就此展開。
最直接的解法當然是外包給專業廠商。市面上有很多數位化公司,也包括專門處理舊家庭錄影的業者。
我對隱私還算敏感,所以把包含我如廁訓練過程(在適當的年齡,沒有什麼奇怪的!)的影片交給陌生人,讓我感到不太自在。再說,我心想,數位化影片能有多難?
暴雷:非常難。
第一次嘗試擷取影片
舊的家用 VCR 還在我爸的地下室,所以我請他在下次一起吃午餐時把它挖出來。我在 Amazon 上買了一個便宜的 RCA 轉 USB 轉接器,然後就開始動工了。

TOTMC 影像擷取裝置,整個過程中我購買的眾多影音設備中的第一個。
為了處理來自 USB 擷取裝置的影像,我使用了 VirtualDub,這套軟體在 2012 年時已經有點過時,但還不算太過時。
 中擷取影片](https://mtlynch.io/digitizing-1/virtualdub-capture.jpg)
使用 VirtualDub 擷取我 4 歲時唸書給爸爸聽的原始畫面
揮之不去的音訊偏移夢魘
當我開始剪輯時,才發現音訊和影像有點不同步。好吧,沒關係,我稍微把音訊往前挪一下就好。
十分鐘後,又不同步了。難道我第一次挪得不夠多?
我才慢慢意識到,音訊和影像不只是單純的位移——它們是以不同的速率擷取的。在整捲錄影帶中,兩者的差距會越來越大。為了讓它們保持同步,我每隔幾分鐘就得手動調整一次音訊。

如果你的影片設備以不同速率擷取音訊和影像,唯一的解法就是每隔幾分鐘手動校正音訊。
你知道要分辨一個聲音是提早了 10 毫秒還是延遲了 10 毫秒有多難嗎?非常難!你自己來判斷看看。
這段影片是我在逗弄我那隻可憐又有耐心的貓咪 Black Magic。音訊和影像有點不同步。請問音訊是超前還是落後呢?
音訊與影像不同步的影片片段範例
這是 Magic 跳起來的片段,以五分之一慢動作播放:
音訊與影像不同步,以五分之一慢動作播放
或許我該多花一百美元,而不是浪費數百小時
光是校正音訊就花了我數小時枯燥又令人抓狂的時間。我終於想到,或許只要不買 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 年。我已經帶著這些錄影帶和一堆設備搬了四次公寓,正準備從紐約市搬到麻薩諸塞州。我實在沒辦法再帶著這些東西搬家了,何況我已經很清楚靠自己永遠也做不完。
我問家人是否介意我把錄影帶寄給數位化公司。幸好,大家都不介意——他們更想趕快再看到那些畫面。
我:但這代表有間公司能看到我們所有的家庭錄影。你們真的 ok 嗎?
我姊姊:對啊,我不在意。只有你在擔心這個。等等,你本來就可以直接付錢請人做喔?
我:呃……
把全部 45 捲錄影帶數位化花了 750 美元。聽起來也許很貴,但到那個地步,我寧願付任何代價,也不想再多花一分鐘去搞那些影像設備。
檔案寄回來後,品質明顯更好。我自己擷取的畫面邊緣總會有「撕裂」現象,但專業廠商數位化的版本完全沒有變形。最棒的是,音訊和影像完美同步。
這段影片比較了專業廠商擷取的成果和我自己的成果:
專業擷取與我自己擷取的畫面比較,內容是我媽媽錄下我第一次寫程式的情景
步驟二:剪輯
家庭錄影中,大約 90% 的內容很無聊,8% 很有趣,只有 2% 非常精彩。把錄影帶數位化之後,還有很多工作要做。
使用 Adobe Premiere 剪輯
VHS 錄影帶裡是一長串影片片段夾雜著空白。剪輯一捲錄影帶時,必須找出每個片段的起點和終點。
我剪輯時使用的是 Adobe Premiere Elements,終身授權不到 100 美元。它在剪輯 VHS 錄影帶時最關鍵的功能是可縮放的時間軸。這個功能讓你可以快速找到場景的大致分界,再放大去精準定位片段開始或結束的影格。

Adobe Premiere Elements 中非常實用的可縮放剪輯時間軸
Premiere 的問題在於需要頻繁地啟動與停止。我的流程是:
- 開啟一個包含 30 至 120 分鐘影片的原始擷取檔。
- 標記單一片段的邊界。
- 匯出該片段。
- 等待 2 至 15 分鐘直到匯出完成。
- 重複步驟 2 至 4,直到整捲錄影帶處理完畢。
漫長的等待意味著我得不斷在影片剪輯和其他工作之間切換,連續好幾個小時注意力都被打亂
另一個缺點是無法重現。修正一個小錯誤,幾乎跟整件事重做一樣困難。這在我進入影片分享階段時狠狠咬了我一口。直到那時我才意識到,我應該要用瀏覽器能原生串流的格式來匯出影片。我的選擇只剩下重新走一遍繁瑣的流程、匯出數百個片段,或是把已匯出的影片重新轉碼成另一種格式,進而犧牲畫質。
機器人剪輯
用手工做了多到令人尷尬的時數後,我開始想,是否可以直接用人工智慧來解決這個問題。辨識片段邊界似乎很適合當作機器學習任務。我知道準確度不會完美,但或許它能完成 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(羅蘭·尤)繪製。
特別感謝我的家人願意讓我分享這些精選的片段與靜態畫面,感謝他們當初錄下這一切,並在整個過程中給予我那麼多的支持。
隨機一篇部落格


