Оцифровка видеокассет в ALT Linux

Материал из ALT Linux Wiki

Ранее более-менее доступная оцифровка VHS-кассет был уделом Windows-пользователей. Для оцифровки использовались ТВ-тюнеры, доступные дешевые модели которых, работающие по USB, требовали свои проприетарные драйвера, которые в большинстве своем, работали только под Windows.

Устройства

Но, на август 2026 года, я Petr-akhlamov, нашел следующую комбинацию:

Lg-l372.png

  • VHS-магнитофон

Av2hdmi.png

  • av2hdmi upscaler 1080 (HDMI Конвертер RCA AV для ТВ) - маленькое устройство - аппаратный конвертер из Китая
    • принимающий на вход "тюльпан"
    • выдающий HDMI
    • с переключателем 720/1080p
    • питание от MINI!!!-USB
    • в России стоит 500р / Алиэкспресс 130р

Chvideocapt.jpg

  • Китайская "Карта видеозахвата HDMI 4K USB 3.0 для стримов"
    • принимает на вход HDMI
    • подключается к компу USB 3.0 кабелем, лучше к USB 3.0 порту
    • В России стоит около 640р / Алиэкспресс 2100-3100р

Цепь устройств

_VHS-магнитофон_
|
|
[тюльпан]
|
|
_AV2HDMI_
|
|
[HDMI]
|
|
_карта видеозахвата_
|
|
[USB 3.0]
|
|
_компьютер_

Настройка

Цепь 1

  • Магнитофон - при необходимости, настройте систему цвета - PAL/SECAM/NTSC
  • Подключите тюльпан Магнитофон-AV2HDMI
  • Подключите питание USB2.0 AV2HDMI-кабель-блок питания (USB-адаптер)

Цепь 2

  • AV2HDMI - подключите к видеовыходу HDMI кабель
  • Карта видеозахвата - подключите HDMI кабель к видеовходу (там два HDMI-разъема: INPUT и OUTPUT, нам нужно подключать в INPUT)

Цепь 3

  • Карта видеозахвата - подключите один конец толстого синего USB3.0-кабеля к карте видеозахвата
  • Ваш компьютер - подключите другой конец толстого синего USB3.0-кабеля к USB-порту компьютера. Желательно 3.0, но можно и 2.0

Работа

1. Включите VHS-магнитофон

2. Вставьте VHS-кассету

Определяем видеоустройство захвата

На компьютере от простого пользователя выполните:

$ ls /dev/video*

Будет ответ: нет такого файла или каталога

Подключите USB-кабель карты. Выполните ту же команду.

$ ls /dev/video*

Будет ответ:

/dev/video0  /dev/video1

Проверяем список поддерживаемых разрешений и частот:

$ v4l2-ctl --list-formats-ext --device=/dev/УСТРОЙСТВО
$ v4l2-ctl --list-formats-ext --device=/dev/video0
ioctl: VIDIOC_ENUM_FMT
        Type: Video Capture

        [0]: 'YUYV' (YUYV 4:2:2)
                Size: Discrete 1920x1080
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.020s (50.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                Size: Discrete 2560x1440
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                Size: Discrete 1600x1200
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.020s (50.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                Size: Discrete 1360x768
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.020s (50.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                Size: Discrete 1280x1024
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.020s (50.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                Size: Discrete 1280x960
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.020s (50.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                Size: Discrete 1280x720
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.020s (50.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                Size: Discrete 1024x768
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.020s (50.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                Size: Discrete 800x600
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.020s (50.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                Size: Discrete 720x576
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.020s (50.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                Size: Discrete 720x480
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.020s (50.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                Size: Discrete 640x480
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.020s (50.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
        [1]: 'MJPG' (Motion-JPEG, compressed)
                Size: Discrete 1920x1080
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.020s (50.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                Size: Discrete 2560x1440
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                Size: Discrete 1600x1200
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.020s (50.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                Size: Discrete 1360x768
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.020s (50.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                Size: Discrete 1280x1024
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.020s (50.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                Size: Discrete 1280x960
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.020s (50.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                Size: Discrete 1280x720
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.020s (50.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                Size: Discrete 1024x768
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.020s (50.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                Size: Discrete 800x600
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.020s (50.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                Size: Discrete 720x576
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.020s (50.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                Size: Discrete 720x480
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.020s (50.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
                Size: Discrete 640x480
                        Interval: Discrete 0.017s (60.000 fps)
                        Interval: Discrete 0.020s (50.000 fps)
                        Interval: Discrete 0.033s (30.000 fps)
                        Interval: Discrete 0.050s (20.000 fps)
                        Interval: Discrete 0.100s (10.000 fps)
$ v4l2-ctl --list-formats-ext --device=/dev/video1
ioctl: VIDIOC_ENUM_FMT
        Type: Video Capture
/dev/video0

- наша карта.

Смотрим аудиоустройство захвата

Смотрим с помощью Pulse список аудиоустройств:

$ pactl list short sources
1298    alsa_input.pci-0000_00_1f.3.analog-stereo       PipeWire        s32le 2-канальный 4800  RUNNING
1325    alsa_output.usb-MUSIC-BOOST_GM7-00.pro-output-0.monitor PipeWire        s16le 2-канальный 4800  SUSPENDED
1326    alsa_input.usb-MUSIC-BOOST_GM7-00.pro-input-0   PipeWire        s16le 1-канальный 4800  SUSPENDED
4143    alsa_output.pci-0000_03_00.1.hdmi-stereo-extra1.monitor PipeWire        s32le 2-канальный 4800  RUNNING
> 4143    alsa_output.pci-0000_03_00.1.hdmi-stereo-extra1.monitor PipeWire        s32le 2-канальный 4800  RUNNING
> HDMI - индекс 3.0.1

Просмотр в VLC

Делаем Медиа ⇾ Открыть устройство захвата

Vlc-vhs.png

Настраиваем:

  • Видеоустройство: /dev/video0
  • Аудиоустройство: hw:3,0
  • Стандарт видео: по-умолчанию

Жмем Воспроизвести - в плеере начнется воспроизведение с магнитофона.

Захват видео в OBS

Примечание: Сначала воспроизведите устройство в VLC

Теория

Карта видеозахвата не позволяет технически одновременно и записывать и проигрывать видео - устройство может использовать только одна программа.

Т.е. команда вида:

$ ffmpeg -i input -c:v libx264 -f flv output.flv | ffplay -

работать не будет.

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

Я нашел другой способ.

Практика

Obs-vhs-record.png

Пред-подготовка через VLC

Да, нам нужен VLC.

По инструкции выше добавляем устройство захвата - жмем воспроизвести.

НО!!! теперь смотрим, чтобы в плейлисте был только один элемент - наше устройство и делаем Медиа ⇾ Сохранить плейлист как....

Сохраняем плейлист с произвольным именем.

Работа с OBS

Работа со сценами

В разделе сцены создаем сцену. Даем произвольное название.

Работа с источниками

В выбранной сцене добавляем источники:

  • Источник VLC-медиа
    • в плейлист добавляем m3u-файл
    • другие параметры нам не помогут
  • Устройство захвата аудио (ALSA)
    • Выбираем устройство "USB3 Video, USB3 Audio", частоту
    • в "Микшере звука", у "Устройства захвата аудио (ALSA)" в колонке "Прослушивание аудио" выбираем "Прослушивание и вывод"
Дополнительные настройки
  • Настройте разрешение предпросмотра/вывода
  • Растяните холст с выводом видеоустройства "на весь экран"
  • Укажите файл вывода
Запуск
  • В источник VLC видео жмем "плей"
  • Нажимаем кнопку "начать запись"
  • Благодаря настройкам, будет идти запись в файл, но при этом мы будем видеть и слышать звук с магнитофона

Захват видео

Команды для разных стандартов. Я их подобрал команды с помощью AI. Данные команды захватывают и видео и звук.

В этих командах различие только в параметрах частоты: -framerate.

Для PAL (и SECAM, если UPSCALER выдает 25 fps)

$ ffmpeg -f v4l2 -video_size 1920x1080 -framerate 25 -input_format mjpeg -i /dev/video0 -f alsa -ar 48000 -ac 2 -i front:CARD=Video,DEV=0 -c:v libx264 -preset ultrafast -vsync 2 -c:a aac output.mp4

Для PAL/SECAM (если UPSCALER удваивает частоту до 50 fps)

$ ffmpeg -f v4l2 -video_size 1920x1080 -framerate 50 -input_format mjpeg -i /dev/video0 -f alsa -ar 48000 -ac 2 -i front:CARD=Video,DEV=0 -c:v libx264 -preset ultrafast -vsync 2 -c:a aac output.mp4

Для NTSC (если UPSCALER выдает 30 fps)

$ ffmpeg -f v4l2 -video_size 1920x1080 -framerate 30 -input_format mjpeg -i /dev/video0 -f alsa -ar 48000 -ac 2 -i front:CARD=Video,DEV=0 -c:v libx264 -preset ultrafast -vsync 2 -c:a aac output.mp4

Для NTSC (если UPSCALER выдает 60 fps)

$ ffmpeg -f v4l2 -video_size 1920x1080 -framerate 60 -input_format mjpeg -i /dev/video0 -f alsa -ar 48000 -ac 2 -i front:CARD=Video,DEV=0 -c:v libx264 -preset ultrafast -vsync 2 -c:a aac output.mp4

Для NTSC с точной частотой 29.97 (если нужно идеальное соответствие)

$ ffmpeg -f v4l2 -video_size 1920x1080 -framerate 30000/1001 -input_format mjpeg -i /dev/video0 -f alsa -ar 48000 -ac 2 -i front:CARD=Video,DEV=0 -c:v libx264 -preset ultrafast -vsync 2 -c:a aac output.mp4

Скриншоты

Запись в консоли

Ffmpeg-vhs-record.png

Проигрывание готовой записи

Vlc-vhs-play-record.png

Примечания

  • Карта не может работать одновременно в режиме "воспроизведения" и "захвата" - только одно