Как записать вебкамеру v4l с помощью ffmpeg? Не удается найти подходящий формат для кодека ‘none’

Вопрос или проблема

Цель – захватить видео с моей старой USB-камеры (устройство 0733:0430). При попытке сохранить видео возникает эта ошибка. (Я пробовал как ffmpeg, так и avconv.)

Команда ffmpeg -f v4l2 -i /dev/video2 -s 160x120 tmp.mkv

[video4linux2,v4l2 @ 0x815280] Время на кадр неизвестно
[video4linux2,v4l2 @ 0x815280] Невозможно найти правильный формат для кодека 'none' (id 0), пиксельный формат 'none' (id -1)
Утверждение *codec_id != AV_CODEC_ID_NONE не выполнено в /build/buildd/ffmpeg-2.3/libavdevice/v4l2.c:802

Я знаю, что это может работать на Linux, потому что у меня это работало несколько лет назад. Как заставить это работать сейчас?


Ниже указана информация об устройстве.

Вывод dmesg устройства

[53008.270283] usb 2-1.2: новое полноскоростное USB устройство номер 4 с использованием ehci-pci
[53008.363405] usb 2-1.2: Найдено новое USB устройство, idVendor=0733, idProduct=0430
[53008.363416] usb 2-1.2: Новые строки USB устройства: Mfr=0, Product=0, SerialNumber=0
[53008.779745] gspca_main: v2.14.0 зарегистрирован
[53008.809496] gspca_main: spca505-2.14.0 сканирование 0733:0430
[53008.812508] usbcore: зарегистрирован новый драйвер интерфейса spca505

ffmpeg -list_formats 1 -f v4l2 -i /dev/video2

[video4linux2,v4l2 @ 0xbed5e0] Raw       : Unsupported :                 S505 : 160x120 176x144 320x240 352x288

v4l-info /dev/video2

### информация об устройстве v4l2 [/dev/video2] ###
общая информация
    VIDIOC_QUERYCAP
        драйвер                : "spca505"
        карта                   : "USB Camera (0733:0430)"
        bus_info               : "usb-0000:00:1d.0-1.2"
        версия                 : 3.13.11
        возможности            : 0x85000001 [VIDEO_CAPTURE,READWRITE,STREAMING,(null)]

стандарты

входы
    VIDIOC_ENUMINPUT(0)
        индекс                  : 0
        имя                    : "spca505"
        тип                     : CAMERA
        audioset               : 0
        тюнер                  : 0
        std                     : 0x0 []
        статус                  : 0x0 []

видео захват
    VIDIOC_ENUM_FMT(0,VIDEO_CAPTURE)
        индекс                  : 0
        тип                     : VIDEO_CAPTURE
        флаги                  : 0
        описание               : "S505"
        pixelformat            : 0x35303553 [S505]
    VIDIOC_G_FMT(VIDEO_CAPTURE)
        тип                     : VIDEO_CAPTURE
        fmt.pix.width          : 160
        fmt.pix.height         : 120
        fmt.pix.pixelformat    : 0x35303553 [S505]
        fmt.pix.field          : NONE
        fmt.pix.bytesperline   : 160
        fmt.pix.sizeimage      : 28800
        fmt.pix.colorspace     : SRGB
        fmt.pix.priv           : 0

управления
    VIDIOC_QUERYCTRL(BASE+0)
        id                     : 9963776
        тип                    : INTEGER
        имя                    : "Яркость"
        минимум                : 0
        максимум                : 255
        шаг                    : 1
        значение по умолчанию  : 127
        флаги                  : 32

Я думаю, вы можете использовать guvcview. Вот как я заставил работать свою старую веб-камеру (модель Creative CT6840).

Хотя я всё еще не смог заставить её работать с ffmpeg и ffplay. Надеюсь, кто-то сможет нам помочь…

Ответ или решение

Для записи видео с веб-камеры через интерфейс Video4Linux (v4l) с использованием FFmpeg на Linux важно правильно настроить команду ввода. Ошибка, с которой вы столкнулись, указывает на наличие неподдерживаемого формата или кодека. Давайте разберемся, как правильно связать вашу веб-камеру с FFmpeg и устранить ошибку.

Анализ ситуации

  1. Сообщение об ошибке:

    Cannot find a proper format for codec 'none' (id 0), pixel format 'none' (id -1)

    Это сообщение означает, что FFmpeg не может установить правильный цветовой формат для захвата видео. Исходя из вывода v4l-info, ваша веб-камера поддерживает только один формат: S505 с разрешением 160×120.

  2. Проверка поддерживаемых форматов:
    Согласно команде ffmpeg -list_formats 1 -f v4l2 -i /dev/video2, поддерживается только формат Raw, который может не поддерживаться для кодирования в формате MKV. Поэтому необходимо убедиться, что кодек, используемый для записи, поддерживает этот формат.

Рекомендации по записи видео

Используйте следующие шаги для корректной записи видео с веб-камеры:

  1. Использование подходящего кодека:
    Поскольку ваша камера поддерживает только формат S505, попробуйте использовать другой контейнер и кодек. Например, попробуйте кодек mjpeg, что обычно работает с большинством веб-камер.

    Попробуйте следующую команду:

    ffmpeg -f v4l2 -input_format mjpeg -i /dev/video2 -s 160x120 -c:v mjpeg tmp.avi
  2. Сохранение в другом формате:
    Вместо MKV используйте AVI, чтобы проверить работоспособность:

    ffmpeg -f v4l2 -input_format mjpeg -i /dev/video2 -s 160x120 tmp.avi
  3. Проверка параметров устройства:
    Убедитесь, что устройство /dev/video2 правильно указано. Если у вас несколько подключенных камер, убедитесь, что вы обращаетесь к нужной, проверив путь устройства через ls /dev/video*.

Использование альтернативных утилит

Если команды FFmpeg по-прежнему не работают, попробуйте использовать guvcview, как вы уже упомянули. Эта программа предлагает графический интерфейс и может автоматически настроить параметры вашей камеры, что может упростить процесс:

sudo apt install guvcview
guvcview

Заключение

Следуя приведенным выше рекомендациям, вы должны быть в состоянии записывать видео с вашей веб-камеры без ошибок. Если вы все еще сталкиваетесь с трудностями, возможно, стоит проверить документацию FFmpeg для обновлений и поддерживаемых кодеков. Если ваша веб-камера все еще не работает с FFmpeg, использование GUI-утилиты, такой как guvcview, может быть наиболее простым решением.

Оцените материал
Добавить комментарий

Капча загружается...