Мій восьмирічний квест з оцифрування 45 відеокасет. Частина 1

За останні вісім років я перевозив цю коробку з відеокасетами в чотири різні квартири та один будинок. Сімейні відео з мого дитинства.

Мій восьмирічний квест з оцифрування 45 відеокасет. Частина 1

Через понад 600 годин роботи я нарешті оцифрував і нормально їх організував, так що касети можна викинути.

Частина 2


Ось як зараз виглядає знятий матеріал:

Мій восьмирічний квест з оцифрування 45 відеокасет. Частина 1

Мій восьмирічний квест з оцифрування 45 відеокасет. Частина 1
Усі сімейні відео оцифровані та доступні для перегляду з приватного медіасервера

Вийшло 513 окремих відеокліпів. Кожен має назву, опис, дату запису, теги для всіх учасників із зазначенням віку на момент запису. Все лежить на приватному медіасервері, доступ до якого є тільки у членів сім'ї, а хостинг коштує менше ніж 1 долар на місяць.

Ця стаття розповідає про все, що я зробив, чому для цього знадобилося вісім років і як досягти аналогічного результату набагато простіше і швидше.

Перша наївна спроба

Приблизно у 2010 році моя мама купила якийсь конвертер VHS у DVD та прогнала через нього всі наші домашні відео.

Мій восьмирічний квест з оцифрування 45 відеокасет. Частина 1
Оригінальні DVD, які записала мама (не знаю, що трапилося зі зниклими літерами)

Проблема в тому, що мати зробила лише один комплект DVD. Усі родичі живуть у різних штатах, тож було незручно передавати диски по колу.

У 2012 році сестра подарувала мені ці DVD-диски. Я скопіював відеофайли і виклав усе у сховище. Проблема вирішена!

Мій восьмирічний квест з оцифрування 45 відеокасет. Частина 1
DVD-рипи сімейних відео у сховищі Google Cloud

За кілька тижнів я запитав, чи хтось дивився ці записи. Виявилось, що ніхто не дивився. Навіть я не дивився. В епоху YouTube безглуздо завантажувати тригодинні файли невідомого змісту у пошуках цікавих кадрів.

Тільки моя мама зраділа: "Чудово, - сказала вона, - тепер можна, нарешті, викинути всі ці касети?"

Ой-їй. Це страшне питання. А якщо ми пропустили якісь записи? Що, якщо касети можна оцифрувати з вищою якістю? Що якщо на етикетках важлива інформація?

Мені завжди було незручно викидати оригінали, поки немає абсолютної впевненості, що відео скопійоване з максимально можливою якістю. Таким чином довелося самому взятися за справу.

Я навіть не підозрював, у що вплутуюся.

Звучить не так вже й складно

Якщо ви не розумієте, чому це зайняло в мене вісім років і сотні годин, я вас не звинувачую. Я також думав, що все буде легко.

Ось як виглядає процес оцифрування від початку до кінця:

Мій восьмирічний квест з оцифрування 45 відеокасет. Частина 1

Точніше, так він виглядає теоретично. Ось як вийшло на практиці:

Мій восьмирічний квест з оцифрування 45 відеокасет. Частина 1

Більшість часу зайняли ситуації вже зробленого. Я закінчував один етап, а потім через один чи два етапи знаходив якийсь недолік у техніці. Доводилося повертатися та переробляти. Наприклад, я зняв відео з 20 стрічок, перш ніж зрозумів, що звук трохи синхронізований. Або після кількох тижнів редагування виявив, що експортую відео у форматі, який не підтримує стрімінгу в інтернеті.

Щоб зберегти розум читача, я викладаю процес так, ніби він планомірно рухався вперед, щоб не змушувати вас постійно відстрибувати назад і все переробляти, як мені доводилося.

Крок 1. Захоплення відео

Гаразд, повернемося до 2012 року. Мамі дуже хотілося викинути касети, які вона зберігала двадцять років, тому при першій зустрічі вона одразу вручила мені величезну картонну коробку. Так почався мій квест з оцифрування.

Очевидним рішенням було доручити роботу професіоналам. Багато компаній займаються оцифровкою, а деякі спеціалізуються саме на домашньому відео.

Але я досить чутливо ставлюся до приватності і мені не хотілося, щоб незнайомі люди розглядали наше сімейне відео з інтимними моментами особистого життя, включаючи моє горщикове навчання (у відповідному віці; нічого дивного!). І ще я думав, що в оцифруванні немає нічого складного.

Спойлер: це виявилося справді важко.

Перша спроба захоплення відео

У батька все ще зберігався старий сімейний відеомагнітофон, тому я попросив наступної сімейної вечері відкопати його з підвалу. Я купив дешевий адаптер RCA-USB на Amazon і приступив до справи.

Мій восьмирічний квест з оцифрування 45 відеокасет. Частина 1
Пристрій захоплення відео TOTMC, перше з багатьох пристроїв A/V, які я купив під час багаторічного квесту

Для обробки відео з пристрою захоплення USB я використав програму VirtualDub, версія 2012 трохи застаріла, але не критично.

Мій восьмирічний квест з оцифрування 45 відеокасет. Частина 1
Кадри у програмі VirtualDub, як я у віці чотирьох років читаю книгу своєму батькові

Напасти зі спотворенням звуку

Коли я почав процес редагування, то помітив невеликий розсинхронізація аудіо та відео. Гаразд, без проблем. Я можу трохи зрушити звук.

За десять хвилин він знову розсинхронізувався. Хіба я мало зрушив його вперше?

До мене поступово дійшло, що аудіо та відео не просто розсинхронізовані, вони реально записуються з різною швидкістю. Протягом усієї стрічки вони розходяться дедалі більше. Для синхронізації доводилося вручну налаштовувати звук кожні кілька хвилин.

Мій восьмирічний квест з оцифрування 45 відеокасет. Частина 1
Якщо ваша установка захоплює звук та відео з різною швидкістю, то єдиним рішенням є корекція звуку вручну кожні кілька хвилин.

Уявляєте, як важко відрізнити звук на 10 мілісекунд раніше чи 10 мілісекунд пізніше? Це справді важко! Судити самі.

На цьому відео я граю зі своїм бідним, терплячим кошеням, якого звали Black Magic. Звук трохи не синхронізовано. Визначте, він випереджає картинку чи йде із запізненням?


Приклад відеокліпу з розсинхроном звуку та картинки

У цьому місці Black Magic стрибає, фрагмент із уповільненням у п'ять разів:


Розсинхронність звуку і картинки, уповільнення вп'ятеро

відповідь: звук йде із запізненням у кілька мілісекунд.

Може витратити зайву сотню доларів замість сотень годин особистого часу?

Одна тільки корекція звуку зажадала багатьох годин утомливої ​​роботи, що зводить з розуму. Зрештою мені спало на думку, що можна уникнути розсинхрону, якщо використовувати більш якісний і дорогий пристрій відеозахоплення. Після деякого дослідження я купив нове на Amazon:

Мій восьмирічний квест з оцифрування 45 відеокасет. Частина 1
Моя друга спроба придбати пристрій для відеозахоплення

Навіть із новим пристроєм розсинхрон нікуди не зник.

Відеомагнітофон із приставкою «супер»

Можливо, проблема у відеомагнітофоні. на форумах з оцифрування говорили, що рассинхрона нічого очікувати на відеомагнітофоні з «коректором часу» (time-based corrector, TBC), ця функція є всіх відеомагнітофонах Super VHS (S-VHS).

Ну звичайно! Навіщо я порався з безглуздим звичайним відеомагнітофоном, коли є супер-VCR, який вирішує проблему?

Ніхто вже не виробляє відеомагнітофони S-VHS, але вони, як і раніше, доступні на eBay. За 179 доларів я купив модель JVC SR-V10U, яка начебто добре підходить для оцифрування VHS:

Мій восьмирічний квест з оцифрування 45 відеокасет. Частина 1
Урожай відеомагнітофон JVC SR-V10U, який я купив на eBay за 179 доларів

"Супер"-відеомагнітофон прийшов поштою. Після кількох місяців боротьби з розсинхроном звуку я був у нестямі від радості, що з'явилося обладнання, яке вирішить усі мої проблеми.

Я відкрив коробку, все підключив - але звук, як і раніше, записувався з іншою швидкістю. Ех.

Стомлюючий пошук, усунення несправностей та багаторічна боротьба

Я приступив до жалюгідних спроб усунути неполадки. На це було боляче дивитись. Щоразу я витягав усе обладнання з шафи, заповзав навколішки за робочий стіл, щоб все підключити, намагався захопити відео — і знову спостерігав, що нічого не виходить.

Ось мені потрапила випадкова посада на форумі від 2008 року, де йдеться про встановлення якогось дивного китайського драйвера без підпису... Це жахлива ідея, але я в розпачі. Втім, він не допоміг.

Я пробував різні програми для оцифрування. Купив спеціальну касету VHSщоб прочистити магнітні головки відеомагнітофона. Купив третій пристрій відеозахоплення. Нічого не допомогло.

Я завжди здавався, все відключав і ховав обладнання в шафу ще на кілька місяців.

Здаємося та віддаємо касети професіоналам

Настав 2018 рік. Я перетягав відеокасети та тонни обладнання по чотирьох різних квартирах і збирався переїхати з Нью-Йорка до Массачусетсу. Я не міг знайти сили знову їх везти, бо зрозумів, що самостійно ніколи не закінчу цей проект.

Я спитав сім'ю, чи можна віддати касети у фірму з оцифрування. На щастя, ніхто не заперечував – усім хотілося знову побачити записи.

Я: Але це означає, що якась компанія отримає доступ до всіх наших домашніх відео Тебе це влаштовує?
сестра: Так мені по барабану Тебе одного це непокоїть. Стривай, то ти з самого початку міг просто заплатити комусь?
Я: Е-е-е…

Оцифрування всіх 45 касет коштує $750. Здається дорого, але на той момент я заплатив би скільки завгодно, аби більше не розбиратися з цим обладнанням.

Коли вони віддали файли, якість відео було однозначно краще. На моїх кадрах завжди було видно спотворення на краях кадру, але фахівці все оцифрували взагалі без спотворень. Найголовніше, що аудіо та відео ідеально синхронізовані.

Ось відео з порівнянням професійного оцифрування та моїх доморощених спроб:


Порівняння професійного та саморобного оцифрування у відеоролику, де мама знімає мою першу спробу програмування

Крок 2. Редагування

У домашніх зйомках близько 90% матеріалу нудні, 8% цікаві, а 2% чудові. Після оцифрування у вас ще багато роботи.

Редагування в Adobe Premiere

На касеті VHS довгий потік відеокліпів перемежовується порожніми ділянками. Щоб відредагувати стрічку, потрібно визначити, де починається і закінчується кожен кліп.

Для редагування я використовував Adobe Premiere Elements, яка коштує менше $100 за довічну ліцензію. Його найважливіша фіча - тимчасова шкала, що масштабується. Вона дозволяє швидко знайти межі сцени, а потім збільшити масштаб, щоб знайти точний відеокадр, де починається чи закінчується кліп.

Мій восьмирічний квест з оцифрування 45 відеокасет. Частина 1
Найважливіша тимчасова шкала з масштабуванням в 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 експортує кожен кліп. Якби я записав метадані в електронну таблицю та написав скрипт, який автоматично експортує відео, процес редагування пролетів би непомітно.

Більше того, електронні таблиці значно розширили обсяг метаданих. Спочатку я вписував метадані в назву файлу, але це їх обмежує. Наявність цілої електронної таблиці дозволило каталогізувати набагато більше відомостей про кліп, наприклад, хто в ньому присутній, коли він записаний і будь-які інші дані, які я хочу показати під час демонстрації відео.

Мій восьмирічний квест з оцифрування 45 відеокасет. Частина 1
Гігантська електронна таблиця з метаданими про мої домашні відео

Пізніше я зміг використати ці метадані, щоб додати інформацію до кліпів, наприклад, скільки нам усім було років і докладний опис того, що відбувається у кліпі.

Мій восьмирічний квест з оцифрування 45 відеокасет. Частина 1
Функціональність електронних таблиць дозволяє записувати метадані, які дають більше інформації про кліпи та полегшують їх перегляд

Успіх автоматизованого рішення

Маючи електронні таблиці, я написав сценарійякий нарізав сире відео на кліпи на основі даних у CSV.

Ось запис як це виглядає у дії:

Мій восьмирічний квест з оцифрування 45 відеокасет. Частина 1

До цього моменту я витратив сотні годин, нудно вибираючи межі кліпу в Premiere, натискаючи експорт, чекаючи кілька хвилин, щоб він закінчився, а потім все спочатку. Мало того, процес повторювався кілька разів на тих самих кліпах, коли пізніше виявлялися проблеми з якістю.

Як тільки я автоматизував частину нарізки на кліпи, з моїх плечей впав величезний вантаж. Більше не треба було турбуватися, що я забуду метадані або виберу неправильний формат виводу. Якщо пізніше вилізе помилка, можна просто підправити скрипт і повторити.

Частина 2

Оцифрування та редагування відеоматеріалів – лише половина справи. Нам ще потрібно знайти зручний варіант публікації в інтернеті, щоб усі родичі дивилися сімейне відео у зручному форматі зі стрімінгом як на YouTube.

У другій частині статті я докладно розповім, як підняти опенсорсний медіасервер з усіма відеокліпами, який коштує мені лише 77 центів на місяць.

Продовження,

Частина 2

Мій восьмирічний квест з оцифрування 45 відеокасет. Частина 1

Джерело: habr.com