Доступ к потокам веб-камеры через оболочку

1

Я пишу приложение (работающее на ARM Ubuntu), которое должно уметь обрабатывать изображения в видеопотоке с веб-камеры. Самый простой способ получить данные - через поток вывода процесса, поэтому я планирую разместить дочерний процесс, выполнить команду и использовать выходные данные. Мой текущий план - использовать FFMPEG, но я могу использовать любой инструмент командной строки, который работает на ARM. На мой вопрос есть две части:

  1. Какую команду FFMPEG (или другую утилиту, если есть лучшую) мне нужно использовать из командной строки, чтобы получить поток данных пикселей с веб-камеры?
  2. В каком формате будут выводиться данные (желательно только данные RGB, без кодировок или заголовков)? Мне нужно разобрать его в моем приложении, и мне нужно знать формат кодировки.

Будем благодарны вам за любую информацию!

Wasabi Fan
источник

Ответы:

1

С FFmpeg и video4linux2, вы можете получить практически любой вход с веб-камеры , Убедитесь, что вы используете последнюю версию ffmpeg от страница загрузки или компилировать себя , Размеры и частоты кадров вашей камеры можно проверить с помощью:

v4l2-ctl --list-formats-ext

Например, если вы узнали, какую частоту кадров и размер изображения обеспечивает ваша веб-камера:

ffmpeg -f video4linux2 -r 25 -s 640x480 -i /dev/video0 \
-c:v rawvideo -f rawvideo -pix_fmt yuv420p -

Это позволит захватывать видео со скоростью 25 кадров в секунду с разрешением 640 × 480 пикселей с камеры при /dev/video0 и выводит необработанные кадры YUV, закодированные с использованием плоского пиксельного формата YUV 4: 2: 0, в стандартный вывод. rawvideo кодер и формат позаботятся об этом. Там не будет заголовков.

Что вы можете изменить здесь:

  • Установите другую частоту кадров или -size.

  • Здесь - в конце отправляет данные на стандартный вывод, но вы также можете выбрать файл, если хотите.

  • Чтобы увидеть, какие другие форматы пикселей доступны, запустите ffmpeg -pix_fmts, Их порядок байтов объясняется на fourcc.org , Если вам действительно нужны данные RGB (хотя я сомневаюсь, что это выходы вашей камеры по умолчанию), вы можете использовать -pix_fmt rgb24, например.

slhck
источник
Спасибо! это именно то, что я искал. Но разве я не должен увидеть что-то в терминале при запуске? Я еще не пробовал это в своем приложении, но я не должен увидеть что-то?
Wasabi Fan
Да, вы должны увидеть что-то. Если вы не получили никакого вывода, возможно, он не может найти веб-камеру. Зависит от вашей настройки - если вы можете вставить полный неразрезанный вывод консоли куда-нибудь, мы могли бы проверить.
slhck
Вот результат ... не очень захватывающий: pastebin.com/Z2hWV1uL
Wasabi Fan
Мне удалось сделать одно изображение с помощью другой утилиты, поэтому я знаю, что веб-камера работает как / dev / video0
Wasabi Fan
Вы используете ужасно устаревшую версию ffmpeg, Как я уже упоминал в своем посте, пожалуйста, скачайте последний. Тот, который у вас есть, на самом деле даже не от FFmpeg, а от форка, который выпустил его под неправильным именем.
slhck
-1

Обязательно проверьте параметры командной строки VLC. Я не очень знаком с его выходными потоками, но я, кажется, читал, что он может делать в значительной степени то, что вы пытаетесь сделать.

Домашняя страница VLC

tbenz9
источник