Оцифровка видеокассет в ALT Linux
Ранее более-менее доступная оцифровка VHS-кассет был уделом Windows-пользователей. Для оцифровки использовались ТВ-тюнеры, доступные дешевые модели которых, работающие по USB, требовали свои проприетарные драйвера, которые в большинстве своем, работали только под Windows.
Устройства
Но, на август 2026 года, я Petr-akhlamov, нашел следующую комбинацию:
- VHS-магнитофон
- av2hdmi upscaler 1080 (HDMI Конвертер RCA AV для ТВ) - маленькое устройство - аппаратный конвертер из Китая
- принимающий на вход "тюльпан"
- выдающий HDMI
- с переключателем 720/1080p
- питание от MINI!!!-USB
- в России стоит 500р / Алиэкспресс 130р
- Китайская "Карта видеозахвата 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
Делаем Медиа ⇾ Открыть устройство захвата
Настраиваем:
- Видеоустройство: /dev/video0
- Аудиоустройство: hw:3,0
- Стандарт видео: по-умолчанию
Жмем Воспроизвести - в плеере начнется воспроизведение с магнитофона.
Захват видео в OBS
Теория
Карта видеозахвата не позволяет технически одновременно и записывать и проигрывать видео - устройство может использовать только одна программа.
Т.е. команда вида:
$ ffmpeg -i input -c:v libx264 -f flv output.flv | ffplay -
работать не будет.
Так бы, эта команда записывала в файл, и одновременно выводила в маленьком окошке результат видео и звука. Но, увы технически так нельзя.
Я нашел другой способ.
Практика
Пред-подготовка через 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
Скриншоты
Запись в консоли
Проигрывание готовой записи
Примечания
- Карта не может работать одновременно в режиме "воспроизведения" и "захвата" - только одно