My Eight-Year Quest to Digitize 45 Videotapes (Part One)

Michael Lynch

我的八年征途:數位化 45 捲錄影帶(上篇)

過去八年來,我帶著這一箱錄影帶搬過四間不同的公寓和一棟房子。裡面全是我童年時期的家庭錄影。

我家所有的舊家庭錄影

經過 600 多小時的努力,我終於把所有影片數位化並整理到足以丟掉原始錄影帶的程度。現在的成果看起來是這樣:

MediaGoblin 瀏覽畫面MediaGoblin 播放影片的截圖

我所有的家庭影片,都已數位化並可在私人媒體分享伺服器上觀看

總共有 513 段獨立的影片,每一段都有標題、說明、錄製日期、標記出入鏡的每個人,以及當時每個人的年齡。所有影片都放在只有家人能存取的私人媒體分享網站上,每月維護費用不到 1 美元。

這篇文章將說明我是怎麼辦到的、為什麼花了八年,以及你如何用稍微省力一點的方式達成同樣的成果。

我那天真的第一次嘗試

大約在 2010 年,我媽媽買了一種 VHS 轉 DVD 的轉換器,把我們所有的家庭錄影都轉了過去。

標示著字母的可重寫 DVD 照片

我媽媽當初製作的 DVD 複本原件(我不確定那些缺少的字母是怎麼回事)

問題是,DVD 只有一套。我們全家人各自住在不同的州,要傳來傳去很不方便。

2012 年,我姊姊把這些 DVD 交給了我。我把它們轉成影片檔,全部上傳到雲端儲存空間。問題解決了!

我在 Google Cloud Storage 上轉好的 DVD 檔案截圖

在 Google Cloud Storage 上分享家庭錄影的 DVD 轉檔

幾週後,我問大家有沒有看過這些錄影。沒有人看過。我自己也沒看。在 YouTube 的時代,要下載一個長達 3 小時的神秘檔案去尋找有趣的片段,實在太無聊了。

唯一感到興奮的是我媽媽。「太好了,」她說,「那我現在終於可以把這些錄影帶都丟掉了吧?」

哎呀,這可是個可怕的問題。要是有漏掉的錄影帶怎麼辦?要是可以用更高的畫質數位化呢?要是 VHS 錄影帶標籤上有什麼重要資訊呢?

除非我確信已經用最高畫質完整擷取了所有影片,否則我絕對無法安心丟掉原始錄影帶。這意味著得由我自己來做。

我當時還不知道自己到底踏進了什麼樣的坑。

聽起來好像沒那麼難

如果你好奇為什麼這件事花了我八年、數百小時,我完全能理解。我一開始也以為這會是個簡單的專案。

從頭到尾,數位化的流程看起來是這樣:

TODO

或者更精確地說,理論上的數位化流程是長這樣。但實際上的情況是這樣:

TODO

我花的時間大多都在重做。每次完成一個階段,往往在一、兩個步驟後才發現先前的作法有瑕疵。舉例來說,我擷取了 20 捲錄影帶後,才發現音訊有點不同步。或是花了數週剪輯後,才發現自己輸出的影片格式不支援線上串流。

為了大家的理智著想,我會假裝整個過程是一路向前推進來敘述,而不是逼著讀者跟我一起不斷往回跳、重新開始。

步驟一:影片擷取

好,回到 2012 年。我媽媽急著想結束她長達 20 年保管家庭錄影的任務,所以下次見面時,她交給我一大箱錄影帶。我的數位化冒險就此展開。

最直接的解法當然是外包給專業廠商。市面上有很多數位化公司,也包括專門處理舊家庭錄影的業者。

我對隱私還算敏感,所以把包含我如廁訓練過程(在適當的年齡,沒有什麼奇怪的!)的影片交給陌生人,讓我感到不太自在。再說,我心想,數位化影片能有多難?

暴雷:非常難。

第一次嘗試擷取影片

舊的家用 VCR 還在我爸的地下室,所以我請他在下次一起吃午餐時把它挖出來。我在 Amazon 上買了一個便宜的 RCA 轉 USB 轉接器,然後就開始動工了。

TOTMC RCA 轉 USB 轉接器照片

TOTMC 影像擷取裝置,整個過程中我購買的眾多影音設備中的第一個。

為了處理來自 USB 擷取裝置的影像,我使用了 VirtualDub,這套軟體在 2012 年時已經有點過時,但還不算太過時。

在 [VirtualDub](http://www.virtualdub.org) 中擷取影片

使用 VirtualDub 擷取我 4 歲時唸書給爸爸聽的原始畫面

揮之不去的音訊偏移夢魘

當我開始剪輯時,才發現音訊和影像有點不同步。好吧,沒關係,我稍微把音訊往前挪一下就好。

十分鐘後,又不同步了。難道我第一次挪得不夠多?

我才慢慢意識到,音訊和影像不只是單純的位移——它們是以不同的速率擷取的。在整捲錄影帶中,兩者的差距會越來越大。為了讓它們保持同步,我每隔幾分鐘就得手動調整一次音訊。

有無校正的音訊偏移示意圖

如果你的影片設備以不同速率擷取音訊和影像,唯一的解法就是每隔幾分鐘手動校正音訊。

你知道要分辨一個聲音是提早了 10 毫秒還是延遲了 10 毫秒有多難嗎?非常難!你自己來判斷看看。

這段影片是我在逗弄我那隻可憐又有耐心的貓咪 Black Magic。音訊和影像有點不同步。請問音訊是超前還是落後呢?

音訊與影像不同步的影片片段範例

這是 Magic 跳起來的片段,以五分之一慢動作播放:

音訊與影像不同步,以五分之一慢動作播放

答案:音訊延遲了幾毫秒。

或許我該多花一百美元,而不是浪費數百小時

光是校正音訊就花了我數小時枯燥又令人抓狂的時間。我終於想到,或許只要不買 Amazon 上最便宜的影像擷取裝置,就能避免這個麻煩。做了更多研究後,我又買了一個新的:

GV-USB2 影像擷取裝置

第二次嘗試購買影像擷取裝置

即使用了新的裝置,仍然有音訊偏移的問題。

邁向 Super

也許問題出在 VCR 上。數位化論壇上說,如果 VCR 具備 time-based corrector(時基校正器)(TBC),就不會發生音訊偏移,這是 Super VHS(S-VHS)VCR 常見的功能。

原來如此!我到底在搞什麼,還在用那台笨重的普通 VCR,明明有一台超級 VCR 可以解決我的問題?

現在已經沒有人在製造 S-VHS VCR 了,但在 eBay 上還買得到。我花了 179 美元買了一台 JVC SR-V10U,這款機型據說很適合用來數位化 VHS:

具備 S-VHS 支援的昂貴 VCR 照片

我在 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 可縮放剪輯功能的截圖

Adobe Premiere Elements 中非常實用的可縮放剪輯時間軸

Premiere 的問題在於需要頻繁地啟動與停止。我的流程是:

  1. 開啟一個包含 30 至 120 分鐘影片的原始擷取檔。
  2. 標記單一片段的邊界。
  3. 匯出該片段。
  4. 等待 2 至 15 分鐘直到匯出完成。
  5. 重複步驟 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(羅蘭·尤)繪製。

特別感謝我的家人願意讓我分享這些精選的片段與靜態畫面,感謝他們當初錄下這一切,並在整個過程中給予我那麼多的支持。

原文由 Michael Lynch 發布

本文章由 muse-spark-1.2-contributor 進行翻譯