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

Зимой 2025 года в мои руки попало 35 кассет формата VHS и VHS-C из семейного архива, и встала задача по их оцифровке. С учетом того, что на каждой кассете было записано приблизительно по 60 минут видео, а средний ценник услуг по захвату сейчас составляет 400 рублей в час, общая стоимость конвертации составила бы около 14 тысяч рублей. Эта сумма показалась мне слишком большой, и было решено сделать все самостоятельно. В данной статье я хочу рассказать об относительно новом методе оцифровки видеокассет, на котором я остановился, и сравнить его с классическими подходами.

Оцифровка видео — это сложно

Оцифровка данных с аналоговых носителей — непростая задача. В случае с видео она осложняется тем, что приходится работать с очень большим потоком информации. Если на аудиокассете ширина полосы пропускания составляет 12-16кГц, то на кассете стандарта VHS — около 5МГц, то есть в 300 раз больше. Это накладывает жесткие требования на качество оборудования и точность его работы. Кроме того, видеосигнал имеет сложную структуру и рассчитан на телевизор с кинескопом, который рисует кадр строчку за строчкой. А значит, нужно как-то интерпретировать для конвертации в цифровой файл.

Из-за этих и многих других сложностей для качественной оцифровки видео обычно требуется дорогое оборудование, настроенное правильным образом. Споры о том, какой магнитофон, карта захвата и программа дают лучший результат, не утихают по сей день.

Айсберг оцифровки видео (не полный)
Айсберг оцифровки видео (не полный)

Популярные способы оцифровки видео

Методы оцифровки видео можно условно поделить на две категории:

  • Любительский — используется дешевая внешняя USB карта захвата, например AVerMedia DVD EZMaker 7, и бытовой VHS магнитофон. Стоимость такого комплекта составляет приблизительно 9 тысяч рублей при покупке с рук;

  • Профессиональный — используется дорогая внешняя или внутренняя карта захвата, например Canopus ADVC-300, и S-VHS магнитофон с функцией Time Based Correction (TBC), ведь серьезные карты захвата очень требовательны к стабильности сигнала, и при работе в паре с бытовым магнитофоном гарантировано будут потери кадров. Стоимость такого комплекта начинается с 35 тысяч рублей при покупке с рук.

Конечно, это упрощенная классификация, в которой не учтены экзотические походы. Например, в качестве карты захвата можно использовать старую камеру стандарта Digital8, подключив ее к компьютеру по FireWire.

Что такое VHS-Decode?

VHS-Decode — это программа, создатели которой обещают результат профессионального качества при минимальных затратах на оборудование. Предлагается использовать бытовой магнитофон, но брать сигнал не с видеовыхода, а напрямую с магнитной головки, после чего оцифровывать его с высокой частотой простым АЦП. Последующая работа по интерпретации данных выполняется на компьютере. Таким образом, программа заменяет собой схемотехнику магнитофона и карты захвата.

Не смотря на название, VHS-Decode позволяет оцифровывать следующие форматы аналогового видео:

  • VHS (NTSC, NTSC-J, PAL, PAL-M);

  • SVHS (NTSC, NTSC-J, PAL, PAL-M);

  • U-Matic Low Band (PAL, NTSC);

  • U-Matic High Band (PAL);

  • Betamax (PAL, NTSC);

  • SuperBeta (NTSC);

  • Video8 и Hi8 (PAL, NTSC);

  • 1" Type C (SMPTE Type C) (PAL, NTSC);

  • 1" Type B (SMPTE Type B) (PAL, NTSC);

  • EIAJ (PAL);

  • Philips VCR и Philips VCR "LP" (PAL).

Проект активно развивается, и возможно этот список будет расширен в будущем. Также, важно заметить, что VHS-Decode является форком проекта LD-Decode, который нацелен на работу с LaserDisk.

Подготовка к оцифровке с помощью VHS-Decode

Для оцифровки кассет с помощью VHS-Decode вам потребуется следующее оборудование:

  • Видеомагнитофон формата VHS. Подойдет любой исправный аппарат, но, если есть выбор, лучше взять машину от Panasonic или JVC с поддержкой Hi-Fi. Стоимость такого магнитофона на Авито от 2 до 5 тысяч рублей;

  • Аудиокарта для записи звука. Подойдет любой приличный вариант с поддержкой захвата 24bit 48kHz. Стоимость такой карты на Авито начинается от 4 тысяч рублей;

  • Кассета формата VHS с записанным на нее фильмом длиной не менее получаса и цифровая версия этого фильма. Они пригодятся нам при калибровке скрипта для синхронизации аудио и видео. Кассету можно найти на дальней полке шкафа или на Авито за несколько сотен рублей;

  • Высокочастотный кабель длиной не более метра с импедансом 50Ом и высокочастотными разъемами мама-папа на концах. Авторы проекта рекомендуют разъемы BNC, однако ниже я объясню, почему лучше остановиться на разъемах SMA. Такой кабель можно найти на Ozon за 600 рублей;

  • Тюбик нейтрального эпоксидного клея-пластилина или силиконового герметика. Можно найти где угодно приблизительно за 300 рублей;

  • Керамический конденсатор номиналом от 3.3 до 10мкФ. Можно найти где угодно за несколько рублей;

  • Карта видеозахвата формата PCIe 1x на основе чипа Conexant CX2388x, как на картинке ниже. Такую карточку можно найти по запросу «карта видеозахвата 640x480» на Ozon или Aliexpress. Стоить она будет около 1700 рублей.

Как говорилось выше, мы будем подключаться напрямую к магнитной головке. Для этого нужно вскрыть корпус магнитофона и найти на плате контакт, предусмотренный для проверки сигнала при ремонте устройства. В зависимости от производителя он может быть подписан по-разному. Например, в моем LG L494 используется обозначение “RF”. Более подробно о том, как найти площадку и подключиться к ней, написано в вики VHS-Decode.

Можно использовать и электролитический конденсатор. Главное учесть полярность
Можно использовать и электролитический конденсатор. Главное учесть полярность

Необходимо отрезать кусок высокочастотного кабеля и припаять его к найденному контакту через конденсатор. Для удобства в корпусе магнитофона можно проделать дополнительное отверстие и вывести кабель через него, нанеся на место стыка силиконовый герметик или эпоксидную смолу для фиксации.

Я использовал разъем BNC и пожалел об этом
Я использовал разъем BNC и пожалел об этом

Описанные операции могут показаться сложными, однако занимают не более получаса и безопасны для магнитофона.

Карту видеозахвата также необходимо доработать. Во-первых, требуется удалить разъем RCA и припаять к освободившимся контактным площадкам ответную часть кабеля. При этом суммарная длина этого куска и того, что был установлен в магнитофон, не должна превышать 50 сантиметров. Во-вторых, для снижения уровня шума при оцифровке рекомендуется удалить конденсатор C31. Более подробно модификации карты описаны здесь. Эти манипуляции тоже занимают не более получаса.

Я также на всякий случай установил мелкие радиаторы на чипы
Я также на всякий случай установил мелкие радиаторы на чипы

Теперь, можно установить карту в компьютер. Однако, в случае использования разъема BNC вы не сможете это сделать, так как он шире прорези в корпусе. Именно поэтому лучше использовать более мелкий разъем SMA.

Разъем BNC был ошибкой, но я справился
Разъем BNC был ошибкой, но я справился

Осталось установить необходимые программы:

  • Драйвер АЦП под Ubuntu 22.04 или Windows. Второй имеет статус экспериментального, однако работает без нареканий;

  • Набор утилит из проекта VHS-Decode для Windows, MacOS или Linux. На момент написания статьи актуальна версия 0.3.5;

  • Консольная программа SoX для захвата звука.

Я работаю под Windows, однако большая часть того, что будет сказано далее, справедливо и для Linux версий программ.

Процесс оцифровки

Процесс оцифровки состоит из семи шагов:

  1. Настройка BIOS и перевод Windows в тестовый режим;

  2. Настройка АЦП;

  3. Захват сигнала с магнитофона и сохранение его в файл (capture);

  4. Выделение из сырых данных полезной информации (decode);

  5. Экспорт видео (export);

  6. Синхронизация аудио и видео (align);

  7. Постобработка.

В этом и двух следующих разделах будет дано подробное описание каждого из них. Если вам это не интересно, вы можете перейти к разделу “Сравнение с классическими методами”.

Для корректной работы драйвера АЦП необходимо отключить опцию Secure Boot в BIOS. Под Windows требуется также перевести ОС в тестовый режим, выполнив команду

bcdedit -set testsigning on

и перезагрузив компьютер. После того, как вы захватили все кассеты, можно вернуть ОС в обычный режим с помощью команды

bcdedit -set testsigning off

и повторной перезагрузки.

Настройка АЦП выполняется через специальные команды драйвера. При этом необходимо указать следующие параметры:

  • Разъем, с которого будет захватываться сигнал (vmux);

  • Применять ли ко входному сигналу дополнительное усиление на 6дБ (sixdb);

  • Уровень цифрового усиления входного сигнала (level);

  • Центрирование значений при оцифровке (center_offset).

Мы используем ту площадку АЦП, где изначально стоял разъем RCA, поэтому в качестве первого значения необходимо указать единицу. Дополнительное усиление я рекомендую выключить, так как оно вносит шумы в сигнал. Оставшиеся значения зависят от модели магнитофона и драйвер может подобрать их автоматически. Для этого нужно запустить на магнитофоне воспроизведение и выполнить команду драйвера leveladj. При перезагрузке настройки сбрасываются, поэтому чтобы не восстанавливать их вручную, можно подготовить bat файл. Мой скрипт выглядит следующим образом

prepare.bat

:: вывести список доступных АЦП (в системе их может быть до 255)
"C:\Program Files\cxadc\tools\cxadc-win-tool.exe" scan

:: настроить первый АЦП
"C:\Program Files\cxadc\tools\cxadc-win-tool.exe" set \\.\cxadc0 vmux 1
"C:\Program Files\cxadc\tools\cxadc-win-tool.exe" set \\.\cxadc0 sixdb 0
:: эти два параметра у вас могут отличаться
"C:\Program Files\cxadc\tools\cxadc-win-tool.exe" set \\.\cxadc0 level 31
"C:\Program Files\cxadc\tools\cxadc-win-tool.exe" set \\.\cxadc0 center_offset 8

:: проверить, что настройки сохранились
"C:\Program Files\cxadc\tools\cxadc-win-tool.exe" get \\.\cxadc0

pause

Подробнее о настройке драйвера под Windows можно прочитать здесь, а описание Linux версии приведено здесь.

Теперь мы готовы к оцифровке сигнала. Подключим самодельный кабель, идущий из магнитофона, к АЦП, а красный и белый RCA разъемы к аудио карте. Наконец, запустим такой скрипт

capture.bat

:: запустить запись аудио и видео одновременно на X секунд
start /high "" cmd /c ""C:\Program Files (x86)\sox-14-4-2\sox.exe" -t waveaudio 0 -e signed-integer -b 24 -c 2 -r 48000 "audio.wav" trim 0 X"
start /high "" cmd /c ""C:\Program Files\cxadc\tools\cxadc-win-tool.exe" capture \\.\cxadc0 capture.u8" & timeout /t X /nobreak > nul & taskkill /im cxadc-win-tool.exe /f

и нажмем клавишу Play на магнитофоне. В директории, в которой находится скрипт, появятся файлы audio.wav и capture.u8, в которые будет сохраняться поток аудио и видео соответственно. Запись будет продолжаться в течение X секунд, если вы не прервете ее досрочно. При этом магнитофон можно подключить к телевизору, чтобы контролировать процесс.

По завершении захвата требуется запустить следующий скрипт, сохраняющий время, когда началась запись аудио и видео в файл time.txt. Эта информация пригодится далее для сведения дорожек.

time.bat

echo "Начало захвата видео" >> time.txt
powershell -command "(Get-Item "capture.u8").CreationTime.ToString(\"HH:mm:ss.fff\")" >> time.txt

echo "Начало захвата аудио" >> time.txt
powershell -command "(Get-Item "audio.wav").CreationTime.ToString(\"HH:mm:ss.fff\")" >> time.txt

echo "Смещение начала аудио относительно начала видео (миллисекунд). Если больше 0, то нужно добавить тишину, а если меньше 0 — отрезать начало" >> time.txt
powershell -command "((Get-Item "audio.wav").CreationTime - (Get-Item "capture.u8").CreationTime).TotalMilliseconds" >> time.txt

Теперь мы можем расшифровать сигнал и экспортировать его в видео. Для этого запустим команды

decode pal.bat

:: декодировать сигнал формата PAL с кассеты формата SP
"C:\Program Files\vhs-decode\decode.exe" vhs -p -t 3 --tf vhs --cxadc --recheck_phase --ire0_adjust capture.u8 decoded

:: экспортировать в видео формата FFV1 с чересстрочной разверткой
:: "C:\Program Files\vhs-decode\tbc-video-export.exe" decoded.tbc

pause

Первая запустит длительный процесс расшифровки видео. При этом будет создан ряд файлов с названием decoded и разными расширениями. Далее, будет сформирован файл decoded.mkv с результатом. У утилиты decode есть великое множество аргументов, описанных здесь. Приведенный выше набор параметров кажется мне оптимальным на данный момент (к сожалению, аргумент --chroma_trap сейчас сломан). Программа tbc-video-export тоже предоставляет широкий набор возможностей. Например, можно экспортировать видео в более привычный формат со сжатием h.265 и прогрессивной разверткой. При этом для устранения чересстрочности будет применяться относительно простой алгоритм bwdif.

Наконец, нужно синхронизировать видео с аудиодорожкой с помощью

sync audio.bat

:: добавить X секунд тишины в начало аудио (X отличается от раза к разу)
"C:\Program Files (x86)\sox-14-4-2\sox.exe" audio.wav padded_audio.wav pad X

:: отрезать первые Y секунд аудио (Y отличается от раза к разу)
"C:\Program Files (x86)\sox-14-4-2\sox.exe" audio.wav padded_audio.wav trim Y

:: выровнять аудио, приняв частоту дискретизации аудиодорожки за Z (Z нужно найти один раз)
"C:\Program Files\vhs-decode\ffmpeg.exe" -i padded_audio.wav -filter_complex "channelmap=map=FL-FL|FR-FR" -f s24le -ac 2 - | "C:\Program Files\vhs-decode\AutoAudioAlign.exe" stream-align --sample-size-bytes 6 --stream-sample-rate-hz Z --json decoded.tbc.json --rf-video-sample-rate-hz 40000000 | "C:\Program Files\vhs-decode\ffmpeg.exe" -f s24le -ar Z -ac 2 -i - -af aresample=48000 -sample_fmt s32 sync_audio.wav

pause

Таким образом, мы получим файл sync_audio.wav со звуком для нашего видео. Про параметры X, Y и Z из этого скрипта будет рассказано в следующем разделе.

После оцифровки первой кассеты рекомендую открыть файлы decoded.tbc и decoded.tbc.json в программе ld-analyze, входящей в состав VHS-Decode и проверить отношение сигнала к шуму (SNR). Эта величина должна быть не менее 30дБ.

Подробнее о сведении аудио и видео

Сведение аудио и видео дорожек не так очевидно, как может показаться на первый взгляд. На это есть три причины:

  1. Захват аудио и видео начинается не одновременно. Эта разница может достигать десятых долей секунды в ту или иную сторону;

  2. При работе с сырым сигналом утилита decode выравнивает поля кадра так, чтобы их частота составляла ровно 50Гц (речь идет о стандарте PAL). Требуется передвинуть фрагменты аудио вслед за ними;

  3. Мы считаем, что частота тактового генератора в карте захвата видео равняется 28636363Гц, а в карте захвата аудио — 48000Гц. Однако, на практике всегда существует погрешность на сотые доли процента из-за которой оцифрованное аудио будет воспроизводится чуть быстрее или чуть медленнее оцифрованного видео. Таким образом, за час может набегать до 5 секунд расхождения.

Первая проблема решается проще всего. Один из скриптов, приведенных выше, сформировал файл time.txt, в котором указано, на сколько миллисекунд раньше или позже был создан файл audio.wav относительно capture.u8. Эта величина может служить первым приближением, чтобы решить, сколько миллисекунд добавить к аудио или отрезать от него, чтобы выровнять дорожки. Большей точности можно добиться, оценив эту величину самостоятельно в видеоредакторе. При этом важно смотреть только на самое начало записи. Смещение — это случайная величина, поэтому так придется делать каждый раз при оцифровке очередной кассеты.

Очевидно, что тут нужно отрезать 12/60 секунды в начале аудио
Очевидно, что тут нужно отрезать 12/60 секунды в начале аудио

Вторую проблему за нас решит утилита AutoAudioAlign, входящая в состав VHS-Decode. Она подгонит звук под видео. Однако, для правильной работы этой программы нужно решить третью проблему. Тут то и пригодится кассета с фильмом, для которого у нас цифровая версия с идеально синхронизированными дорожками. Выполним следующие действия:

  1. Оцифруем не менее получаса фильма с кассеты. Получим файлы decoded.mkv и audio.wav;

  2. Выровняем начало audio.wav, методом, описанным выше. Назовем этот файл padded_audio.wav (смотрите скрипт sync audio.bat);

  3. В видеоредакторе разместим параллельно видеодорожку с кассеты и цифровую версию фильма, совместим их с точностью до кадра;

  4. Для начала будем считать, что аудиокарта работает с частотой Z=48000Гц;

  5. Запустим утилиту AutoAudioAlign с текущим значением Z. Назовем получившийся файл sync_audio.wav (смотрите скрипт sync audio.bat);

  6. Добавим на временную шкалу видеоредактора аудиодорожку sync_audio.wav, совместив ее начало с началом decoded.mkv;

  7. Оценим, торопится ли sync_audio.wav относительно дорожки с цифровой версии фильма или отстает от нее;

  8. Если sync_audio.wav торопится, нужно уменьшить величину Z на несколько Гц и вернуться к шагу 5;

  9. Если sync_audio.wav отстает, нужно увеличить величину Z на несколько Гц и вернуться к шагу 5;

  10. Будем уточнять Z до тех пор, пока не добьемся приемлемой точности.

Я использовал для калибровки кассету с клипами Майкла Джексона
Я использовал для калибровки кассету с клипами Майкла Джексона

Таким образом, с помощью эталона мы подбираем такую частоту Z, при которой утилита AutoAudioAlign будет выдывать правильный результат. Величину Z нужно найти один раз, после чего ее можно жестко прописать в скрипте sync audio.bat. Например, в моем случае она равна 47989Гц и погрешность не превышает 0.03 секунды на 30 минут видео.

Постобработка

Теперь, когда у нас есть видеодорожка decoded.mkv и аудиодорожка sync_audio.wav, мы можем объединить их в любом видеоредакторе. Дальнейшая постобработка — дело вкуса, однако я рекомендую выполнить следующие шаги:

  • Устранение чересстрочности — на данный момент мы имеем видео с чересстрочной разверткой, однако для корректного отображения на современных мониторах необходимо перейти к прогрессивной. Есть много методов устранения чересстрочности, но самым продвинутым считается QTGMC. Я пользуюсь реализацией этого алгоритма, входящей в состав StaxRip;

Мой пресет в StaxRip
Мой пресет в StaxRip
  • Временное шумоподавление — VHS-Decode экспортирует именно то, что записано на кассете. В результате получается шумное во времени видео. Если применить к нему фильтр, который удалит помехи с учетом соседних кадров, это значительно улучшит результат;

  • Коррекция кривой яркости — VHS-Decode экспортирует видео с диапазоном яркости 16-235. Это телевизионный стандарт, который может неправильно отображаться в некоторых видеоплеерах. Поэтому зачастую требуется исправить контраст, растянув яркость на полный диапазон 0-255.

Обратите внимание на кривую в нижней центральной части скриншота. Также можно видеть мои настройки шумоподавления
Обратите внимание на кривую в нижней центральной части скриншота. Также можно видеть мои настройки шумоподавления

Вывод о процессе оцифровки

Процесс оцифровки, описанный выше, может показаться сложным, однако после того, как вы откалибруете скрипт для синхронизации аудио, все будет сводиться к простым шагам:

  1. Перевести Windows в тестовый режим;

  2. Подключить магнитофон к компьютеру;

  3. Последовательно запустить скрипты prepare.bat и capture.bat;

  4. Запустить воспроизведение на магнитофоне и дождаться конца кассеты;

  5. Остановить скрипт capture.bat;

  6. Последовательно запустить скрипты time.bat и decode pal.bat;

  7. Оценить, сколько миллисекунд нужно убрать или добавить в начало аудиодорожки, основываясь на подсказке из файла time.txt и том, что вы видите в видеоредакторе. Прописать эту величину в скрипт sync audio.bat

  8. Запустить скрипт sync audio.bat;

  9. Объединить дорожки в видеоредакторе;

  10. Выполнить устранение чересстрочности, шумоподавление и коррекцию кривой в видеоредакторе (опционально).

Сравнение с классическими методами

Наконец, посмотрим, на что способен VHS‑Decode. В сравнении будут участвовать следующие подходы:

  • Любительский — магнитофон LG L494 → дешевый конвертер AV2HDMI → дешевая карта захвата для компьютера → запись через OBS. Стоимость такого комплекта без учета кабелей около 4 тысяч рублей;

  • Профессиональный — магнитофон Panasonic NV-HS 860 (TBC включено, а 3D DNR - нет) → передача по S-Video → карта захвата Canopus ADVC-300 → запись через Pinnacle Studio → устранение чересстрочности с помощью QTGMC → экспорт в FFV1. Стоимость такого комплекта без учета кабелей около 40 тысяч рублей;

  • Новый — магнитофон LG L494 → карта захвата видео на чипе Conexant CX23883-39 и карта захвата аудио Roland Rubix 22 → драйвер для Windows → обработка с помощью VHS-Decode 0.3.5 → устранение чересстрочности с помощью QTGMC → экспорт в FFV1 → временное шумоподавление и коррекция кривой в DaVinci Resolve → экспорт в FFV1. Стоимость такого комплекта без учета аудиокарты около 6 тысяч рублей. С минимально приемлемой аудиокартой комплект стоил бы около 10 тысяч рублей.

Сначала сравним качество изображения. На свежую кассету TDK был записан фильм Звонок 2002 года. Запись выполнена с цифрового исходника с разрешением 720x480 на магнитофоне Panasonic NV-HS830. Оцифруем первые 5 минут фильма разными методами и будем оценивать, насколько результат близок к оригиналу.

Для удобства я также подготовил стоп-кадры.

Кадр 1
Кадр 2
Кадр 3
Кадр 4

AV2HDMI, очевидно, занимает третье место. Причем проблема не в магнитофоне, так как даже в паре с продвинутым Panasonic NV-HS 820 качество не сильно лучше.

Разница между Canopus ADVC-300 и VHS-Decode не так очевидна, но она есть. Обратите внимание на цвет лица героини на втором кадре. Там, где классический метод увел все в зелень, VHS-Decode смог восстановить оттенки красного. Глядя на остальные кадры, мы также можем заметить это различие. Таким образом, VHS-Decode обеспечивает лучшую цветопередачу и уровень детализации.

Теперь сравним стабильность изображения. Возьмем кассету Fujifilm формата VHS-C, выпущенную в 1994 году, с записью 1998 года. Лента сохранилась плохо, и на ней есть проблемные места. Посмотрим, на сколько стабильна картинка при оцифровке разными способами.

Можно видеть, что при использовании VHS-Decode искажения минимальны. Однако, удивляет то, на сколько отличаются цвета при оцифровке разными методами.

Возможные аппаратные доработки

Я описал базовый набор оборудования для VHS-Decode. Как показано выше, этого достаточно для получения хорошего результата при работе с кассетами формата VHS. Однако существует ряд модификаций, которые могут улучшить качество оцифровки:

  • Установка усилителя между магнитофоном и картой захвата видео — сигнал, идущий с головки магнитофона, очень слаб, и его приходится усиливать перед оцифровкой. В карте АЦП есть встроенный усилитель, однако он вносит помехи. Предварительное усиление сигнала перед подачей в карту может улучшить отношение сигнала к шуму. Кроме того, это позволит увеличить длину кабеля, идущего от магнитофона к компьютеру;

  • Увеличение частоты АЦП — изначально карта захвата видео работает на частоте 28.6МГц, однако, если заменить кварцевый резонатор, можно разогнать ее до 40МГц и выше. При этом микросхемы будут выделять больше тепла, а значит на них желательно установить радиатор. Данная модификация может повысить отношение сигнала к шуму, а также улучшить качество оцифровки форматов, более сложных чем VHS, например S-VHS;

  • Установка второй карты захвата для оцифровки Hi-Fi аудио — зачастую кассеты формата VHS содержат Hi-Fi звук. Такое аудио кодируется схожим образом, что и видео и считывается отдельной головкой. Тогда можно припаять к магнитофону еще один провод и установить в компьютер еще одну карту захвата, чтобы оцифровывать в высоком качестве не только видео, но и звук. В VHS-Decode есть ряд утилит для декодирования аудио;

  • Тактирование карт захвата одним генератором — развитие предыдущей модификации. Как говорилось в одном из прошлых разделов, частота любого тактового генератора всегда немного отличается от теоретического значения. Из-за этого оцифрованная аудиодорожка будет воспроизводиться чуть быстрее или чуть медленнее оцифрованного видео, и за час может набегать до 5 секунд расхождения. Мы научились компенсировать этот эффект с помощью скрипта sync audio.bat, но, если хочется решить проблему окончательно, можно установить общий тактовый генератор для двух карт захвата.

Недостатки VHS-Decode

Помимо преимуществ у VHS-Decode есть два недостатка, с которыми вы неизбежно столкнетесь, если решите попробовать этот метод.

Во-первых, сырые данные, полученные с кассеты, занимают много места на диске. Так, для часа видео файл capture.u8 будет весить около 96ГБ, decoded.tbc и decoded_chroma.tbc — по 117ГБ, а decoded.mkv - еще 43ГБ . Итого около 373ГБ без учета аудио. Проблему можно немного сгладить, сжав сырые данные без потерь

"C:\Program Files\flac\flac.exe" -f capture.u8 --threads 64 --best --sample-rate=28636 --sign=unsigned --channels=1 --endian=little --bps=8 capture.flac

и удалив исходник. Это уменьшит суммарный размер до 333ГБ, что все равно прилично.

Во-вторых, на момент написания статьи декодирование сырых данных утилитой decode занимает очень много времени. Так, расшифровка часовой записи занимает около 12 часов на процессоре Ryzen 7 7700. При этом по ходу обработки процесс замедляется с 8 кадров в секунду до 1. Кроме того, увеличение количества потоков может не ускорить, а замедлить процесс. Авторы программы знают о проблеме и признают, что код написан неоптимальным образом, однако пока что не нашлось желающих переписать его. Хочется верить, что однажды это будет сделано.

Замедление при обработке четырехчасовой кассеты (картинка из сети)
Замедление при обработке четырехчасовой кассеты (картинка из сети)
Зависимость производительности от количества потоков (картинка из сети)
Зависимость производительности от количества потоков (картинка из сети)

Вывод

При оцифровке кассет формата VHS проект VHS-Decode позволяет получить превосходный результат при минимальных финансовых затратах. Кроме того, с годами по мере выхода из строя продвинутых магнитофонов с функцией TBC он может стать единственным профессиональным методом оцифровки аналогового видео. Не также стоит забывать о том, что помимо VHS проект поддерживает множество других носителей.

Однако, на данный момент первичная подготовка для оцифровки этим методом может представлять трудности для неподготовленного человека. Также в нынешнем виде VHS-Decode непригоден для быстрой обработки большого количества кассет. В том числе в коммерческих целях.

Таким образом, по моему мнению сейчас VHS-Decode может представлять интерес для энтузиастов, стремящихся получить видео максимального качества без оглядки на временные затраты. Но проект развивается, а значит можно ждать изменений к лучшему в будущем.

Айсберг оцифровки видео (более полный)
Айсберг оцифровки видео (более полный)

P.S.

Хочу выразить благодарность Алексею за помощь в модификации магнитофона и Павлу за запись тестовой кассеты и оцифровку на профессиональном оборудовании.

Если у вас возникли вопросы по VHS-Decode, вы можете задать их в комментариях или написать мне в Telegram @kuprin2000.

Комментарии (40)


  1. Vivado_man
    06.07.2025 20:31

    “оцифровывать его с высокой частотой простым ЦАП” - дальше читать не стал.


    1. YegorP
      06.07.2025 20:31

      Стоило дочитать хотя бы до того места, где упоминается вполне доступный ЦАП:

      Карта видеозахвата формата PCIe 1x на основе чипа Conexant CX2388x, как на картинке ниже. Такую карточку можно найти по запросу «карта видеозахвата 640x480» на Ozon или Aliexpress. Стоить она будет около 1700 рублей.


      1. Vivado_man
        06.07.2025 20:31

        ЦАП не оцифровывает. Оцифровывает АЦП.


        1. AndrewKuprin Автор
          06.07.2025 20:31

          Исправил это опечатку, спасибо


  1. r3dfx
    06.07.2025 20:31

    А у вас всё хорошо с цветом без использования amplifyer? Кстати, кварц 40МГц даёт лучшую картину по искажениям (если не изменяет память)
    UPD: а зачем вы используете флаги nld и ire0_adjust?


    1. AndrewKuprin Автор
      06.07.2025 20:31

      Без промежуточного усилителя отношение сигнала к шуму на кассете со звонком около 36дБ, а это вроде бы неплохо. Но это отношение может зависеть от магнитофона, поэтому что у разных магнитофонов разная амплитуда сигнала на тестовом контакте. Возможно, вам не повезло.

      Вы пробовали 40МГц? Я попробовал заменить кварц, но у меня почему-то не завелось, и я вернул все, как было. Как я понимаю, 40МГц нужно скорее для S-VHS, а для обычного VHS хватит и стандартной частоты.

      Я не использую флаг nld, потому что он пока что экспериментальный. А флаг ire0_adjust использую, потому что его настоятельно советуют разработчики. И действительно цвета становятся более приятными. В вики VHS-Decode пишут

      Automatically adjust the black level on a per-field basis, using the back porch level. Unlike --clamp this is done after time base correction. Therefore it can fix the per-field variations caused by the slight carrier shift of VHS-HQ and S-VHS. (more info)

      сначала меня смутили слова про VHS-HQ и S-VHS, но потом мне обьяснили, что этот аргумент полезен для всех форматов. Обещали исправить формулировку в вики


  1. SpbDev58
    06.07.2025 20:31

    Если рандомно соединять проводом два устройства 220 вольт, то кого-нибудь может убить током и оцифровка будет идти уже без вас...


  1. Sap_ru
    06.07.2025 20:31

    Извините, но ЧТО ВЫ НЕСЁТЕ?!!
    "RF" это же ни разу не с "видео головки"! Это же "Radio Frequency"! Это самые что ни на есть "обычный" видеосигнал! Вы его спокойно можете найти на разъёме ЛЮБОГО (совершенного любого) видеомагнитофона! Это уже сигнал с головки, сто раз обработанный и преобразованный к какому-то стандарту! Иногда через двойное преобразование (смотря, что у вас за магнитофон и кто и как писал). С потерей информации, между прочим. Его же (этот бедный видео-сигнал, который вы мучаете) сначала сняли с головки, потом декодировали, преобразовали во что-то, потом промодулировали, а вы его теперь демодулируете и декодируете. Причём однозначно криво (что у вас с шумами?!) и с недостаточной полосой пропускания (т.е. мыло у вас сразу с первых шагов заложено). Куча сил угрохана с совершенно сомнительным результатом.
    Есть хочется по-настоящему декодировать VHS с целью сохранить архив, то сигнал нужно брать RGB+Sync (ну, или хотя бы RGB) с разъёма SCART - и вот тогда будет картинка с минимумом искажений, которую ещё и проще всего обработать. Причём самая кривая китайская карта, которая может его оцифровывать, при записи в MPEG2 даст результат принципиально лучше того, что вы получили или можете получить.

    И вы, главное, не задумайтесь, во что это всё кодировать для своего архива, и что именно происходит с interlaced видео в подавляющем большинстве кодеков, а то с таким энтузиазмом...

    P.S. Ах, да. Вас там (у вас на экране) не смущает надпись про 576 строк при 25 (!!!) кадрах. Вы же, наверное, слышали, что когда очень давно, во времена VHS, телевидение работало с частотой кадров 50 или 60 герц? Всё ещё ничего не смущает?
    Архивы, говорите, сохраняете? За качество боретесь? Разные варианты по качеству (!!!!) сравниваете?! Ну-ну :)))))


    1. r3dfx
      06.07.2025 20:31

      Вы не разобрались совсем, а наезжаете на автора... Речь не про антенный разъём, а сигнал с голов. И он RF, т.к. частоты соответствующие


      1. Sap_ru
        06.07.2025 20:31

        Зачем?! Чтобы что? А частотная компенсация, которая у каждой головки и даже у каждого магнитофона своя? Он же её просто "от балды" пытается угадать. А обратная связь от вращения головки? Без неё можно работать, но зачем? А то, что он своим подключением ещё и поломал всю эту компенсацию и теперь восстановить нормальную картинку ( на уровне того, что магнитофон через SCART выдаёт) из этого будет практически невозможно?
        А то, что он рассказывает про качество, а у него полоса недостаточная и про чередование строк он "забыл"?


        1. r3dfx
          06.07.2025 20:31

          Почему это полоса недостаточная?) Для VHS нужно порядка 5.5МГц, мы даже не учитываем потери при перезаписях
          Чередование строк тоже на месте, в статье же 50i... Каждый кадр - это 2 поля
          Вы хоть раз видели захват со свистка в MPEG2? Я видел и внезапно(!), разница с vhs decode, мягко говоря, приличная


        1. sim2q
          06.07.2025 20:31

          Спокойствие, только спокойствие!)
          Кто увидел земляную петлю с оплётки из МГТФ и так всё понял :)


    1. Fagear
      06.07.2025 20:31

      Действительно, что ВЫ несёте? Полное непонимание происходящего как минимум :)


      1. zatim
        06.07.2025 20:31

        Ну, скажем так, если бы я чуть менее глубоко разбирался в электронике и аналоговой видеозаписи, из текста статьи я бы тоже ничего не понял. Что откуда берется, почему и зачем. К сожалению, автор не потрудился осветить этот момент подробнее.


    1. iliasam
      06.07.2025 20:31

      Судя по вот этой картинке, там действительно берут усиленный сигнал прямо с головки: https://raw.githubusercontent.com/wiki/oyvindln/vhs-decode/assets/images/graphics/Laymans-Diagrams-FM-RF-Archival-%26-Decoding-Light-Current.png


  1. inkelyad
    06.07.2025 20:31

    Вопрос дилетанта. А если взять все эти разнообразные SDR приёмники, втыкаемые в USB качестве средства оцифровки этого самого сигнала вместо карты видеозахвата - результат каким будет? Они, вообще, справятся или по характеристикам не подойдут?


    1. r3dfx
      06.07.2025 20:31

      Их полосы хватает на захват Hi-Fi сигнала (декодирование Hi-Fi вроде смогли сделать быстрее realtime). Можете почитать в вики vhs decode про разные варианты АЦП


      1. inkelyad
        06.07.2025 20:31

        Ага. Понятно.

        Но странно, что они другие варианты не пробовали. RTL-SDR -- это самый дешевый и самый паршивый вариант. Уже давно есть лишь немногим дороже но с лучшими параметрами.


        1. r3dfx
          06.07.2025 20:31

          Там вариантов немного, т.к. без доп. преда, 50 Ом на входе большинства АЦП сделают их по сути одинаково бесполезными)
          Под эти CX чипы написан драйвер под Linux (недавно был порт на Win, но в тестовом режиме) плюс они стоят буквально копейки по сравнению с "полноценными" устройствами...
          В целом никто не запрещает юзать что-то другое, просто здесь "каноничный" вариант, который обкатан и работает


  1. avasiukevich
    06.07.2025 20:31

    Я как-то лет 10 назад, когда учился в универе, занялся оцифровкой домашнего архива VHS

    Денег у студентов конечно же нет, поэтому был выбран бюджетный вариант: куплена самая стандартная карта захвата (вроде бы от beholder), использовался её же софт для захвата видео (без компрессии), VHS магнитофон взят из дома (panasonic из 90х)

    Самой большой проблемой была десинхронизация аудио и видео при захвате, получилось её побороть захватом в ASF контейнер, который сохраняет синхронизацию за счет поддержки variable frame rate VFR (метод был прочитан на каком-то форуме). Потом VFR ASF перегонялся в CFR AVI (25 кадров в секунду) через mencoder.

    Минимальная обработка (убрать шумы, обрезать мусор по краям и т д) делалась через avisynth. Цель: убрать неразличимые глазом шумы, чтобы снизить размер сжатого файла, минимально улучшить картинку.

    Деинтерлейсинг я в итоге не стал делать, так как ни один доступный мне тогда деинтерлейсер не показал достойное качество, все мазали картинку. Решено было сохранить оригинальную чересстрочную картинку. Её было комфортно и так смотреть, а при необходимости деинтерлейсинг всегда можно включить непосредственно в плеере

    Конечный результат кодировался в x264 и сохранялся в MKV. Аудио тривиально кодировалось из несжатого CFR AVI в m4a используя ffmpeg и тоже добавлялось в MKV

    Весь пайплайн был автоматизирован скриптом и выглядел как-то так: VFR ASF -> mencoder -> CFR AVI -> avisynth -> x264 -> MKV.

    Запись одной кассеты занимала часа 3, последующая конвертация еще часов 10. Можно было параллелить это и одновременно записывать на одном компе и конвертировать на другом. Исходный несжатый ASF файл для трехчасовой кассеты занимал 90GB, финальный MKV 4-7 GB. Качество получалось идентично тому, что видно на экране в лайве, артефакты компрессии глазу не видны совсем.

    Получился в итоге довольно интересный студенческий проект на лето, было интересно поэкспериментировать с технологиями видеозаписи и видеокомпрессии.


  1. andrewilife
    06.07.2025 20:31

    Еще остались неразмагниченные кассеты?


    1. AndrewKuprin Автор
      06.07.2025 20:31

      Я работал с кассетами, которые содержат записи 1997-2006 года. Все кроме одной живы и здоровы


  1. zatim
    06.07.2025 20:31

    Прикольная идея! Эх, ее бы мне увидеть лет 6 назад. Была у меня Электроника 590, развандаленная аффинажниками. Механика вся была на месте, а плат не было. И хотелось прочитать видеозапись с катушки. Для этого попытался подкинуть туда кишки от vhs, там форматы записи почти похожи. Но подружить их так и не вышло. А с этой программой могло бы и получиться.

    Кстати, интересный вопрос: как она разбирает сигнал на кадры? Если начало/конец строки можно вытащить из сигнала с БВГ, то кадровые синхроимпульсы идут с отдельной головки (объединенной со звуковой).


    1. HardWrMan
      06.07.2025 20:31

      Там не кадровая а синхронизирующая т.н. "трекинг". Причем 25 Гц. Смещение фазы этой частоты приводит к смешению траектории описываемой видеоголовками на ленте. А на саму голову пишется полноценный видеосигнал в FM кодировании со всеми служебными интервалами, поэтому он и называется RF. Разве что цветность может транскодироваться в другой формат (часто видеомагнитофон пишет всегда только в PAL или NTSC, но принимает любой, даже SECAM). Причем, так как головы 2 а обхват чуть более 180 градусов, то они работают по очереди, коммутатор находится непосредственно рядом с трансформатором БВГ вместе с усилителем. Технически, в статье снимают сигнал не с самой головы а после коммутатора-усилителя.


      1. zatim
        06.07.2025 20:31

        Там не кадровая а синхронизирующая 

        Не нужно придираться к терминологии без причины. Везде, в т.ч. и в википедии, пишут - кадровая.

        Вдоль нижнего края ленты записывается управляющая дорожка[6], содержащая кадровые синхроимпульсы[8]

        Тем более если знать, что то, что передается с частотой 50 Гц - это поле, при чересстрочной развертке кадр состоит из двух полей, четного и нечетного. Соответственно, кадры идут с частотой 25 Гц.


        1. HardWrMan
          06.07.2025 20:31

          Ещё раз: это не кадровая. Но она вынуждена быть таковой, потому что 1 проход 1 головы это одно поле. 2 прохода 2 голов это как раз 2 поля или 1 оборот барабана - 1 кадр черезстрочной развёртки. И эта синхронизация лишь частично-косвенно используется для восстановления настоящей кадровой синхронизации. Вот RPM БВГ как раз настоящая кадровая частота. И она держится стабильной даже при стоп-кадре, когда синхрочастота равно 0.

          А что там пишут и не дай Б-г модерируют на википедии давно уже всем известно.


  1. VBDUnit
    06.07.2025 20:31

    Эээ...

    Компонентный выход у магнитофона. Y - яркость, Cb - разница между ней и синим, Cr - между ней и красным. Гораздо качественнее композита, где всё по одному проводу
    Компонентный выход у магнитофона. Y - яркость, Cb - разница между ней и синим, Cr - между ней и красным. Гораздо качественнее композита, где всё по одному проводу
    1. Берём хороший бу живой магнитон типа JVC HM‑DH40 000U, который имеет выход Component (то есть три провода для трех каналов цвета — яркость и две цветоразностные)

    2. Берём карту захвата с компонентом типа Intensity

    3. Пихаем компонент сигнал в комп

    4. На стороне компа захватываем видеопоток в RAW без сжатия и без субдискретизации, можно в RGB

    5. Полученное сырьё реставрируем, цветокорим по вектороскопам/осциллоскопам чтобы вправить моск цветам как было. Доп обработка по вкусу, можно нейросетями и/или апскейлом

    6. Жмём в что‑нибудь с большим битрейтом или вообще в Loseless типа ProRes

    Если всё правильно сделать, качество будет максимальное, в прямом смысле: мы здесь на каждом этапе теряем минимум информации.

    Опционально можно всё или часть делать за один присест, если не гнать этот пайплайн через софт для монтажа, а сразу пропускать и синхронизировать RAW картинку через софт для видеомикширования (не буду показывать пальцем на Tesseract :) )

    Тогда сразу будет захватываться готовый результат.

    Аналоговый шум надо убирать

    Аналоговый шум алгоритмы сжатия видно часто воспринимают как детали картинки и пытаются их сохранить, выкидывая настоящие детали. В итоге к аналоговому шуму добавляется мыло и/или файл получается больше. Потому что оно искренне пытается сохранить каждую мурашку.

    Поэтому шумы лучше убирать (если не писать в RAW конечно). По этой же причине стоит 10 раз подумать, прежде чем добавлять художественный шум в видео, которое заливается в соц сети и телеграмы, где царит низкий битрейт.

    Упоротый вариант — подцепить АЦП к головке магнитофона. Но это, кхм, сопряжено некоторыми небольшими сложностями :)


    1. AndrewKuprin Автор
      06.07.2025 20:31

      Прочитайте вывод статьи. Я и не настаиваю на том, что это лучший метод. Ваш вариант вполне рабочий. Единственное, в чем VHS-Decode явно лучше других методов - это качество TBC (смотрите второе видео в статье). Ну и цена конечно.

      Наверное с точки зрения эффективности разумно было использовать хороший магнитофон и хорошую карту захвата как основной инструмент для оцифровки, а VHS-Decode как вариант для плохо сохранившихся кассет, которые встречаются не так часто.


    1. HardWrMan
      06.07.2025 20:31

      Упоротый вариант — подцепить АЦП к головке магнитофона. Но это, кхм, сопряжено некоторыми небольшими сложностями :)

      Однако, это единственный правильный метод вытащить то, что по факту на носителе, исключая все артефакты постобработки конкретного аппарата. Точно так же работает декодирование RF с фотоприёмника LD проигрывателя. Вопрос лишь в целесообразности: насколько важен записанный контент. Есть очень много быстродействующих АЦП на 8-12 разрядов (до сотни МГц сэмплирования), есть хорошие и быстрые FPGA. Можно всё сделать даже ещё лучше, чем описано в статье, вопрос лишь в том, какая конечная цель преследуется.


      1. VBDUnit
        06.07.2025 20:31

        Более чем согласен. Но имхо это как из орбитального ядерного лазера по воробьям. Если воробей какой‑то особенный то норм, но в общем случае не надо :)

        много быстродействующих АЦП на 8–12 разрядов (до сотни МГц сэмплирования)

        Есть подозрение, что для качества этого мало, и надо не менее 1 ГГц. А так да.

        Для годноты можно ещё в FPGA параллельно завести питание через отдельный АЦП, чтобы если вдруг (ну вдруг) по нему наводятся помехи, то алгоритмы обработки были в курсе и могли через пару обработок вычесть из полезного сигнала.


    1. LAutour
      06.07.2025 20:31

      Берём карту захвата с компонентом типа Intensity

      В обычных(начиная с гибридных, я так цеплялся к Beholder-T8) тв-тюнерах компонентные входы тоже встречались, включая поддержку RGB захвата.


    1. ahabreader
      06.07.2025 20:31

      Компонентный выход у магнитофона.
      Гораздо качественнее композита, где всё по одному проводу

      Если принимать это безусловно, можно оцифровку лазердиска испортить. Для него композит - родной формат и наилучший демодулятор вряд ли окажется в старом проигрывателе (а не на стороне приёмника сигнала - т.е. в карте захвата или софте ld-decode).

      В случае VHS родной формат на кассете похож на S-Video (цветность отделена от яркости и впихнута в полосу частот под яркостью - т.н. color-under) и компонентный выход (S-Video или YPbPr) позволит избежать лишнего объединения-разделения цветности и яркости, но ЕМНИП, люди не видели однозначного улучшения - полосы частот так порезаны при записи, что заметные артефакты от разделения не возникают.

      В S-VHS расширили полосу яркости, в композите она стала явно пересекаться с цветностью (=> артефакты разделения) и поэтому в видаки с поддержкой S-VHS добавили S-Video.

      YPbPr в этот видак поставили ради цифрового D-VHS*, HD-сигналу которого есть что терять и который не имел преступных связей с композитом. Ну и ради цифровой обработки (TBC, DNR), то есть ему бы вообще цифровой выход иметь, раз он всё через цифру прогоняет.

      Аналоговый шум надо убирать

      Сохранять плёночное зерно в 4K сейчас считается нормальным, а тут разрешение в 30 раз меньше и хранить шум слишком дорого? Нет, если шум маскирует нехватку деталей (улучшает субъективное качество), то пусть остаётся. Для видеохостингов SD-видео апскейлят, чтобы заставить их поднять битрейт (потому что это единственный переключатель качества со стороны пользователя, кнопки "576p/480p High Bitrate" у него нет).

      Упоротый вариант — подцепить АЦП к головке магнитофона. Но это, кхм, сопряжено некоторыми небольшими сложностями :)

      Вся статья про это - в видеомагнитофон залезли настолько глубоко, насколько есть смысл (предусилителю и штуке, которая сигналы с чередующихся головок объединяет, можно и довериться). Залезли в эту точку, получается:

      Figure 8.4.5 Block diagram of a color-under system из этой книжки
      Figure 8.4.5 Block diagram of a color-under system из этой книжки

      * Это видак 3-в-1 (VHS, S-VHS, D-VHS) и он до сих пор тыщу долларов стоит.