Вопрос или проблема
Цель – захватить видео с моей старой 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 и устранить ошибку.
Анализ ситуации
-
Сообщение об ошибке:
Cannot find a proper format for codec 'none' (id 0), pixel format 'none' (id -1)
Это сообщение означает, что FFmpeg не может установить правильный цветовой формат для захвата видео. Исходя из вывода
v4l-info
, ваша веб-камера поддерживает только один формат:S505
с разрешением 160×120. -
Проверка поддерживаемых форматов:
Согласно командеffmpeg -list_formats 1 -f v4l2 -i /dev/video2
, поддерживается только форматRaw
, который может не поддерживаться для кодирования в формате MKV. Поэтому необходимо убедиться, что кодек, используемый для записи, поддерживает этот формат.
Рекомендации по записи видео
Используйте следующие шаги для корректной записи видео с веб-камеры:
-
Использование подходящего кодека:
Поскольку ваша камера поддерживает только форматS505
, попробуйте использовать другой контейнер и кодек. Например, попробуйте кодекmjpeg
, что обычно работает с большинством веб-камер.Попробуйте следующую команду:
ffmpeg -f v4l2 -input_format mjpeg -i /dev/video2 -s 160x120 -c:v mjpeg tmp.avi
-
Сохранение в другом формате:
Вместо MKV используйте AVI, чтобы проверить работоспособность:ffmpeg -f v4l2 -input_format mjpeg -i /dev/video2 -s 160x120 tmp.avi
-
Проверка параметров устройства:
Убедитесь, что устройство /dev/video2 правильно указано. Если у вас несколько подключенных камер, убедитесь, что вы обращаетесь к нужной, проверив путь устройства черезls /dev/video*
.
Использование альтернативных утилит
Если команды FFmpeg по-прежнему не работают, попробуйте использовать guvcview
, как вы уже упомянули. Эта программа предлагает графический интерфейс и может автоматически настроить параметры вашей камеры, что может упростить процесс:
sudo apt install guvcview
guvcview
Заключение
Следуя приведенным выше рекомендациям, вы должны быть в состоянии записывать видео с вашей веб-камеры без ошибок. Если вы все еще сталкиваетесь с трудностями, возможно, стоит проверить документацию FFmpeg для обновлений и поддерживаемых кодеков. Если ваша веб-камера все еще не работает с FFmpeg, использование GUI-утилиты, такой как guvcview
, может быть наиболее простым решением.