man qvidcap |
![]() |
Добавил(а) microsin | ||||||||||||
qvidcap - просмотрщик видео, захваченного v4l2. Утилита qvidcap используется для тестирования устройств видеозахвата video4linux [1], используя либо video-устройство, либо файл, либо через сетевое подключение. Это приложение также может работать как обычное приложение вьюера video/TV. qvidcap не поддерживает (пока) сжатые видеопотоки, отличные от MJPEG. Статус выхода: при успешном завершении возвратит 0. Иначе вернет код ошибки. [Опции] -d, --device=< dev> Использовать < dev> в качестве video-устройства. Если < dev> это номер, то используется /dev/video< dev>. -f, --file=< file> Читать сырые данные кадров (raw frame data) из файла < file>. -p, --port[=< port>] Прослушивать сетевое соединение на указанном порту. По умолчанию используется порт 8362. -T, --tpg Использовать генератор тестового видео (test pattern generator). Если не указано ни -d, ни -f, ни -T, то используется /dev/video0. -c, --count=< cnt> Остановиться после < cnt> захваченных кадров. -b, --buffers=< bufs> Запрос < bufs> буферов (по умолчанию 4), когда происходит стриминг из video-устройства. -s, --single-step[=< frm>] Начиная с кадра < frm> (по умолчанию 1), пауза после каждого кадра, пока не будет нажата клавиша Space. -C, --colorspace=< c> Переназначить цветовое пространство. Здесь < c> может быть одним из следующих цветовых пространств: smpte170m, smpte240m, rec709, 470m, 470bg, jpeg, srgb, oprgb, bt2020, dcip3. -X, --xfer-func=< x> Переназначить функцию преобразования. Здесь < x> может быть одной из следующих функций преобразования: default, 709, srgb, oprgb, smpte240m, smpte2084, dcip3, none. Transfer Function (функция передачи) - это математическая функция, которая определяет, как линейные значения света (сцены) преобразуются в нелинейные значения сигнала для хранения и передачи, и наоборот. Transfer function - критически важный параметр для обеспечения точной цветопередачи и соответствия между различными устройствами отображения и стандартами. [Основная концепция] Проблема: - Человеческое зрение нелинейно - мы более чувствительны к темным тонам. Решение: - Gamma коррекция - нелинейное кодирование света. Для этого используются различные функции преобразования. Default - по умолчанию для стандарта. 709 (BT.709), Rec. ITU-R BT.709 - Стандарт для HDTV Пример для для HDTV (1080p, 720p): $ v4l2-ctl --set-xfer-func=709
sRGB, Standard Red Green Blue - Для компьютерной графики, веб-браузеров Пример для компьютерных мониторов, web: $ v4l2-ctl --set-xfer-func=srgb
opRGB, Optical RGB - Для профессиональной графики $ v4l2-ctl --set-xfer-func=oprgb
smpte240M, устаревший стандарт SMPTE 240M - Предшественник BT.709 $ v4l2-ctl --set-xfer-func=smpte240m
smpte2084 (PQ), Perceptual Quantizer - Для HDR контента (High Dynamic Range) $ v4l2-ctl --set-xfer-func=smpte2084
dcip3, DCI-P3 - Для цифрового кино $ v4l2-ctl --set-xfer-func=dcip3
none, линейный режим (без коррекции) - Линейная передача $ v4l2-ctl --set-xfer-func=none
[Математическая основа] Общая формула gamma коррекции: V_out = V_in ^ (1/gamma) // кодирование Пример для sRGB на Python: # Линейный свет → sRGB [Практическое применение в qvidcap] Для HDTV контента: $ qvidcap --xfer-func=709
Для web-стриминга: $ qvidcap --xfer-func=srgb
Для HDR записи: $ qvidcap --xfer-func=smpte2084
Для профессиональной обработки: $ qvidcap --xfer-func=oprgb
[Визуальные различия] Сравнение gamma кривых: - sRGB (2.2): ярче средних тонов, для мониторов [Совместимость с цветовыми пространствами] HDTV настройки: $ qvidcap --colorspace=709 --xfer-func=709 --ycbcr=709
sRGB настройки: $ qvidcap --colorspace=srgb --xfer-func=srgb
HDR настройки: $ qvidcap --colorspace=2020 --xfer-func=smpte2084 --quantization=lim_range
[Проверка текущих настроек] В v4l2-ctl: $ v4l2-ctl --get-fmt-video | grep -i xfer
Или полная информация: $ v4l2-ctl --all | grep -A5 -B5 "Transfer"
[Когда важно устанавливать transfer function] Корректный случаи использования: - Захват для ТВ вещания → BT.709 Если не устанавливать: - Возможны "неправильные цвета" [Пример полной настройки] Для профессионального видео производства: qvidcap \ -Y, --ycbcr-enc=< y> Переназначить кодирование Y'CbCr. Здесь < y> может быть одним из следующих кодирований Y'CbCr: default, 601, 709, xv601, xv709, bt2020, bt2020c, smpte240m. Y'CbCr - метод кодирования цветовой информации в видео сигналах, который отделяет яркость от цветности. Это фундаментальный параметр, который определяет, как цветная информация представляется в цифровом видео, и критически важен для обеспечения точной цветопередачи между различными устройствами и стандартами. [Основная концепция Y'CbCr] Компоненты: - Y' (Luma) - информация о яркости (черно-белое изображение). Y'CbCr-кодирование используется по следующим причинам: - Эффективное сжатие информации - человеческий глаз менее чувствителен к цветности. [Основные стандарты кодирования] default - по умолчанию для устройства 601 (BT.601), ITU-R BT.601 - Стандарт для SDTV (стандартное разрешение) $ v4l2-ctl --set-ycbcr=601
709 (BT.709), ITU-R BT.709 - Стандарт для HDTV (высокое разрешение) $ v4l2-ctl --set-ycbcr=709
xv601 и xv709 - Extended Gamut версии $ v4l2-ctl --set-ycbcr=xv601
$ v4l2-ctl --set-ycbcr=xv709
bt2020 (BT.2020), ITU-R BT.2020 - Стандарт для UHDTV (4K/8K) $ v4l2-ctl --set-ycbcr=bt2020
bt2020c (BT.2020 Constant Luminance) - Constant Luminance версия BT.2020 $ v4l2-ctl --set-ycbcr=bt2020c
smpte240M, устаревший стандарт - Предшественник BT.709 $ v4l2-ctl --set-ycbcr=smpte240m
[Математические различия] Коэффициенты преобразования RGB → Y'CbCr следующие. BT.601 (SDTV): Y' = 0.299R + 0.587G + 0.114B BT.709 (HDTV): Y' = 0.2126R + 0.7152G + 0.0722B BT.2020 (UHDTV): Y' = 0.2627R + 0.6780G + 0.0593B [Практическое применение в qvidcap] Для SDTV контента: $ qvidcap --ycbcr-enc=601
Для HDTV контента: $ qvidcap --ycbcr-enc=709
Для 4K HDR: $ qvidcap --ycbcr-enc=bt2020
Полная настройка для HDTV: $ qvidcap \
--ycbcr-enc=709 \
--colorspace=709 \
--xfer-func=709 \
--output=hdtv_capture.avi
[Цветовые охваты (Gamut)] Сравнение охватов: - BT.601: наименьший охват (~72% NTSC) [Совместимость с разрешениями]
[Проверка текущих настроек] В v4l2-ctl: $ v4l2-ctl --get-fmt-video
Или детальная информация: $ v4l2-ctl --all | grep -i "ycbcr\|encoding"
[Важность правильного выбора] Последствия неправильного выбора: - Неправильные цвета (сдвиг оттенков) [Примеры использования] Захват с камеры наблюдения (SD): $ qvidcap --ycbcr-enc=601 --size=720x576
Захват с HD камеры: $ qvidcap --ycbcr-enc=709 --size=1920x1080
Захват HDR контента: $ qvidcap --ycbcr-enc=bt2020 --xfer-func=smpte2084
Связь с другими параметрами. Обычно используется вместе (согласованная настройка для HDTV): $ qvidcap \
--ycbcr-enc=709 \ # Кодирование цветности
--colorspace=709 \ # Цветовое пространство
--xfer-func=709 \ # Функция передачи
--quantization=lim_range # Диапазон квантования
-Q, --quant=< q> Переназначение квантования (quantization). Здесь < q> может быть одним из следующих методов: default, full-range, lim-range. -P, --pixelformat=< p> Для video-устройств: установит формат точки. Для чтения из файла данные интерпретируются с использованием этой настройки. Для других режимов эта опция игнорируется. Используйте -l для просмотра списка поддерживаемых форматов точки. -l, --list-formats Просмотр поддерживаемых форматов. -h, --help Отобразит подсказку. -t, --timings Сообщит о таймингах рендера кадров. -v, --verbose Выводить более подробные сообщения. -R, --raw Открыть устройство в "сыром" режиме. --opengl Принудительно использовать openGL для отображения video. --opengles Принудительно использовать openGL ES для отображения video. Следующие опции игнорируются при захвате из video-устройства: -W, --width=< width> Установка ширины. -H, --height=< height> Установка высоты кадра (не поля!). Frame (кадр) и Field (поле) - два разных способа представления видео, связанные с чересстрочной разверткой (interlacing). [Основные понятия] Frame (кадр): - Полное изображение в определенный момент времени Field (поле): - Половина кадра - только четные или нечетные строки Прогрессивный кадр (Frame): Строка 1: ██████████████ Строка 2: ██████████████ Строка 3: ██████████████ Строка 4: ██████████████ Чересстрочные поля (Fields): Поле 1 (нечетные строки): Строка 1: ██████████████ Строка 3: ██████████████ Строка 5: ██████████████ Поле 2 (четные строки): Строка 2: ██████████████ Строка 4: ██████████████ Строка 6: ██████████████ Для Frame полная частота кадров: 25/30/50/60 fps, каждый кадр содержит полное изображение. Для Field частота полей 50/60 полей в секунду. Каждое поле - половина изображения, но с удвоенной следования. Могут быть проблемы при неправильном понимании этих терминов. Если перепутать: - Установка высоты поля вместо кадра: разрешение будет в 2 раза меньше. [Практическое значение в v4l2-ctl] Устанавливает полную высоту кадра (все строки): $ v4l2-ctl --set-fmt-video=width=1920,height=1080
Или через отдельный параметр: $ v4l2-ctl --height=1080
Что НЕ делает эта команда: она не устанавливает высоту поля. НЕ работает: $ v4l2-ctl --height=540 # для поля 1080i
Примеры разрешений для прогрессивных форматов (Frame). 720p - кадр 1280×720: $ v4l2-ctl --width=1280 --height=720
1080p - кадр 1920×1080: $ v4l2-ctl --width=1920 --height=1080
Для чересстрочных форматов (Field). 1080i - кадр 1920×1080 состоит из двух полей по 1920×540, но устанавливается ВСЯ высота кадра: $ v4l2-ctl --width=1920 --height=1080
[Определение типа развертки] Проверка в v4l2-ctl: $ v4l2-ctl --get-fmt-video
Пример вывода: Pixel Format: 'YUYV'
Width/Height: 1920/1080
Field: Interlaced # или: Field: None (для progressive)
Просмотр всех форматов: $ v4l2-ctl --list-formats-ext
[Работа с полями в программировании] V4L2 API (язык C): struct v4l2_format fmt = {0}; fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; [Современные тенденции] Переход от Field к Frame: - Чересстрочная развертка (Field) - устаревающий стандарт Причины перехода: - Лучшее качество при быстром движении [Практические примеры] Захват прогрессивного видео 1080p60 - 60 полных кадров в секунду: $ v4l2-ctl --set-fmt-video=width=1920,height=1080,pixelformat=YUYV
$ v4l2-ctl --set-parm=60
Захват чересстрочного видео, 1080i50 - 50 "полукадров" (полей) в секунду. Поле автоматически определяется как INTERLACED: $ v4l2-ctl --set-fmt-video=width=1920,height=1080,pixelformat=YUYV
Указание `--height` устанавливает полную высоту кадра, независимо от того, является ли видео прогрессивным или чересстрочным. Для чересстрочного видео это означает, что каждое поле будет иметь высоту в 2 раза меньше. -A, --padding=< bytes> Установит дополнение по горизонтали (после ширины). --fps=< fps> Установит количество кадров в секунду (frames-per-second; по умолчанию 30). Следующая опция действует только при чтении из файла: -F, --field=< f> Переназначает настройку поля. Здесь < f> может быть одной из следующих компоновок поля: any, none, top, bottom, interlaced, seq_tb, seq_bt, alternate, interlaced_tb, interlaced_bt. Следующие опции специфичны для генератора тестового видео (test pattern generator): --list-patterns Перечислит доступные шаблоны для использования вместе с --pattern. --pattern=< pat> Выберет тестовый шаблон, по умолчанию 0. --square Покажет квадрат в середине выходного тестового шаблона. --border Покажет бордюр вокруг видео, в стиле pillar (черные полосы справа и слева) / letterboxed (черные полосы сверху и снизу). --sav Вставка SAV кода в каждую строку. Это относится к вставке SAV кодов (Start of Active Video) в видео данные. Это низкоуровневая функция, связанная с аналоговыми и цифровыми видеостандартами. --eav Вставка EAV кода в каждую строку EAV (End of Active Video), маркер конца активной видео области. Работает в паре с SAV. --pixel-aspect=< aspect> Установит соотношение сторон точки (pixel aspect ratio), по умолчанию действует автоопределение (autodetect). Здесь < aspect> может быть одним из следующего: square, ntsc, pal. --video-aspect=< aspect> Установит соотношение сторон видео, по умолчанию используется соотношение сторон кадра (frame ratio). Здесь < aspect> может быть одним из следующих значений: 4 x3, 14x9, 16x9, anamorphic. --alpha=< alpha-value> Значение для использования альфа-компонента, диапазон 0-255, по умолчанию 0. --alpha-red-only Использовать значение --alpha только для красных цветов, все другие используют 0. --rgb-lim-range Кодировать значения RGB как ограниченные [16-235] вместо полного диапазона. --hor-speed=< speed> Выбрать скорость для горизонтального перемещения, по умолчанию 0, и диапазон [-3...3]. --vert-speed=< speed> Выбрать скорость для вертикального перемещения, по умолчанию 0, и диапазон [-3...3]. --perc-fill=< percentage> Процент фактически заполняемого кадра. Значение по умолчанию - 100%. Эти опции используют генератор тестового видо (test pattern generator) для тестирования OpenGL: --test=< count> Проверить все форматы, каждый тест генерирует < count> кадров. --test-mask=< mask> Маска, с которой выполняются тесты. Здесь < mask> это битовая маска из следующих значений: 0x01: итерация по форматам точки [Горячие клавиши] Q Выход из приложения. P Цикл вперед через все поддерживаемые форматы точки. С нажатым Shift: цикл обратно. С нажатым Ctrlp: восстановит оригинальный формат точки. Доступно только с --file. I Цикл вперед через все доступные настройки чередования полей (interlaced field). С нажатым Shift: цикл обратно. С нажатым Ctrlp: восстановит оригинальную настройку. Доступно только с --file. C Цикл вперед через все поддерживаемые пространства цветов. С нажатым Shift: цикл обратно. С нажатым Ctrlp: восстановит оригинальную настройку. X Цикл вперед по всем поддерживаемым функциям преобразования. С нажатым Shift: цикл обратно. С нажатым Ctrlp: восстановит оригинальную настройку. Y Цикл вперед по всем поддерживаемым кодированиям Y'CbCr. С нажатым Shift: цикл обратно. С нажатым Ctrlp: восстановит оригинальную настройку. H Цикл вперед по всем поддерживаемым кодированиям HSV. С нажатым Shift: цикл обратно. С нажатым Ctrlp: восстановит оригинальную настройку. R Цикл вперед по всем поддерживаемым диапазонам квантования. С нажатым Shift: цикл обратно. С нажатым Ctrlp: восстановит оригинальную настройку. Правый клик Откроет меню. Двойной левый клик Переключение в полный экран и обратно. F Переключение в полный экран и обратно. ESC Выход из полноэкранного режима. Space В режиме теста (--test) нажатие пробела пропустит текущий тест и перейдет к следующему. При single-stepping, продолжит на следующем кадре. Up Уменьшит разрешение на 2 точки по высоте. Доступно только когда разрешено "Override resolution". Down Увеличит разрешение на 2 точки по высоте. Доступно только когда разрешено "Override resolution". Left Уменьшит разрешение на 2 точки по ширине. Доступно только когда разрешено "Override resolution". Right Увеличит разрешение на 2 точки по ширине. Доступно только когда разрешено "Override resolution". [Ссылки] 1. man v4l2-ctl. |