Проблемы с захватом видео через USB в Linux

Проблемы с захватом видео через USB в Linux

Я приобрел устройство захвата Hauppauge USB-Live 2, поскольку несколько недавних обзоров на Amazon предполагают, что оно должно работать с современными ядрами Linux.

Когда я подключаю его к своему Raspberry Pi 4, на котором установлена ​​последняя версия Raspbian Buster, он, похоже, успешно распознается:

К сожалению, когда я пытаюсь запустить ffmpeg / ffplay для захвата видео с работающего источника VHS, он показывает 0 бит входных данных (сообщите здесь:https://pastebin.com/TAurevCA). Я также пытался захватить кадр с помощью "v4l2-ctl --device /dev/video0 --stream-mmap --stream-to=frame.raw --stream-count=1", а также "vlc v4l2:///dev/video0", и ни один из них не содержит данных.

Я подтвердил техподдержке Hauppauge по электронной почте, что устройство было протестировано с Rpi 4 и должно работать. Пара исправлений, которые я попробовал, но безуспешно:

  • Множество перезагрузок
  • Перемещение устройства в различные порты USB 2 и USB 3
  • Я установил vl42 на NTSC, чтобы он соответствовал моему источнику.
  • Запуск ffmpeg с sudo на случай, если проблема была в правах доступа для /dev/video0 (также пробовал chmod -R 777 /dev/video0)
  • Заменил прошивку на версию, которую нашел по этой ссылке производителя -https://www.hauppauge.de/pctv-faq/doku.php?id=en:linux:usb-live2-how-to(Я думаю, что RPi уже установил это, потому что размер старого файла был точно таким же, как и у нового файла)
  • Написал в техподдержку - они сообщили, что устройство протестировано на совместимость с Rpi 4, и больше ничем помочь не смогли.
  • Заказал на Amazon еще одно такое же устройство, чтобы проверить, неисправно ли оно — результат тот же.
  • Я знаю, что мой видеомагнитофон/подключения работают нормально, потому что аналогичное устройство захвата работает нормально с точно такой же настройкой.

Есть мысли, что еще можно попробовать здесь? Я также попробовал устройство на моем Mac с Ubuntu 18.04.3, запущенным с Live USB, и результат тот же, так что я думаю, может быть, я упускаю что-то элементарное?

Также, на всякий случай, если это будет полезно кому-то еще, вот некоторая информация о других USB-устройствах захвата, которые я пробовал с Raspberry Pi 4:

(1) Я могу подтвердить, что это более дешевое устройство работает довольно хорошо с Pi 4 DIGITNOW USB 2.0 Audio/Video Converter - оцифровка и редактирование видео с любого аналогового источника, включая VCR, VHS, DVD https://smile.amazon.com/gp/product/B06XJKSJZ8/ref=ppx_yo_dt_b_asin_title_o02_s00?ie=UTF8&psc=1

Драйвер отображается как «uvcvideo», а не cx231xx (качество просто приемлемое, поэтому я пытаюсь понять, смогу ли я сделать лучше — этот драйвер выводит только полное разрешение в формате MJPEG, который уже сжат)

(2) НЕ тратьте деньги на это, изображение прыгает и совершенно непригодно для использования: карта видеозахвата UVC Usb2.0, совместимая с Windows/Linux https://www.amazon.com/dp/B00RMYWGWC/ref=cm_sw_r_cp_api_i_P-RpEb9BRFMNR

решение1

Не знаю, пробовали ли вы это, но чтобы заставить Live 2 записывать с помощью ffmpeg, мне пришлось:

v4l2-ctl -d /dev/video0 -s ntsc at every boot

Поэтому я добавил его crontabк

@reboot v4l2-ctl -d /dev/video0 -s ntsc

решение2

Редактирование 1: Я выяснил, почему эти устройства не работают должным образом. Проблема в том, что если вы не инициализируете сопутствующее аудиоустройство, они не будут возвращать видеокадры. Вам не нужно читать все аудиокадры, но вам нужно инициализировать и прочитать первый кадр, остальные можно игнорировать. Вот почему предлагаемая команда mencoder работает, потому что она также инициализирует аудио.

Мне удалось захватить с помощью mencoder, поэтому вот решение:

Попробуйте эту команду:

mencoder \
-v -noskip \
tv:///0 \
-tv norm=NTSC\
:device=/dev/video0\
:driver=v4l2\
:outfmt=i420\
:width=720:height=480\
:fps=29.97\
:alsa\
:adevice=hw.0,0\
:amode=1\
:buffersize=200 \
-ffourcc divx \
-oac mp3lame \
-lameopts cbr:preset=128 \
-ovc lavc \
-lavcopts vcodec=mpeg4\
:vbitrate=1400\
:threads=2\
:autoaspect \
-vf dsize=4/3 \
-vf-add scale \
-vf-add kerndeint=10:0:0:1:1 \
-vf-add softskip,harddup \
-endpos 02:10:00 \
-o ~/usblive2.avi

Это создаст файл с именем usblive2.avi в вашей домашней папке.

Связанный контент