Платы видеозахвата для linux

Платы видеозахвата в Linux.

Теория (коротко).

Главная микросхема на устройствах аналогово видеоввода — видеокодер. В настоящее время распространены видеокодеры следующих производителей:

Логически, все платы видеозахвата можно выделить 2 класса устройств:

Разработку драйверов video4linux для большинства устройств ведёт(вёл?) Gerd Knorr.

В большинстве дистрибутивов Linux, поставляемое ядро включает драйвера video4linux. По-умолчанию, модули (драйвера) находятся каталоге:

Обычно, для правильной работы устройств(а) в системе необходимо сделать 2 вещи:

Определение типа платы.

Драйвер не всегда автоматически определяет тип платы. Особенно это касается устройств без телевизионного тюнера, используемых для задач видеонаблюдения.

Для определения типа платы вручную нам понадобятся следующие утилиты:

С помощью lscpi определяем тип видеокодера:

Пример вывода lscpi для платы на 4-х видеокодерах BT878

Вот так выглядит тюнер AverMedia Model 307 на одном Philips SAA7130

Далее, смотрим как драйвер определил плату:

Если видим что-то подобное — в большинстве случаев такой вариант Вас не устроит и нужно определить тип платы вручную и «сообщить» об этом драйверу.

Все драйверы (модули):

Видео-декодер Основной модуль (драйвер) Список поддерживаемых устройств
BT878 bttv список
CX2388x cx88xx список
SAA713x saa7134 список
TW68xx tw68 список

принимают параметр card=тип_платы1,тип_платы2…тип_платыN

Покажем пример для плат на BT878 (драйвер bttv):

1. Выгружаем модуль bttv

2. Загружаем модуль с «принудительным» указанием типа платы:

3. Проверяем всё ли правильно сделали:

4. Смотрим видео:

Таким образом, нужно пробежаться по пунктам 1-4 для всех плат из списка, поддерживаемых драйвером.

Если плата нормально заработала, нужно просто прописать параметры для загрузки модуля bttv, согласно правил Вашего дистрибутива.

Модуль в автозагрузку.

Debian/Ubuntu

В Debian/Ubuntu драйвера для видеограбберов загружаются автоматически из initramfs.

Обычно, всё что Вам нужно сделать, так это передать правильные параметры драйверу (тип платы: см. выше).

Нужно создать файл « /etc/modprobe.d/video4linux.conf » и прописать в него одну или несколько строк. Есть нюансы, поэтому несколько примеров:

простая одночиповая плата на BT878, типа Orient SDVR-404

простая одночиповая плата на Techwell TW6805A, типа Orient SDVR-404A

плата Drive (компания DSSL, софт Trassir) — как 4 ProVideo PV143

4-x чиповая плата Kodikom 4400R на BT878

8-x чиповая плата Kodikom KMC-8800R

TIBET_CS16(4xBT878) и AVERMEDIA DVD EZMAKER(1xSAA7134)

для платы семейства Orient SDVR-7008 (8 saa7130)

При долгой загрузке модуля bttv (более 5 сек., обычно сопровождается выводом строк типа »I2C detect»), попробуйте добавить следующие опции:

Большинство современных дистрибутивов Linux используют двухступенчатую загрузку initramfs/initrd(устаревший способ).

В этом случае, большинство модулей устройств подгружается именно из initramfs, и чтобы модули получили наши новые параметры, нужно пересобрать образ initramfs командами:

Дело в том, что начиная с некоторой версии (поправьте) udev обрабатывает устройства параллельно, то есть возможна гонка состояний при обнаружении устройств.

Этот эффект может привести к отличной от ожидаемой/желаемой привязке реальных чипов к устройствам /dev/videoN.

Избежать такого перемешивания можно двумя способами.

Cложный способ через udev.

C помощью правил udev, попытаться по различию некоторых свойств (доступных udev) «раздать» имена устройств в нужном порядке. В качестве примера поищите как это делается для аналогичной проблемы, только с сетевыми платами.

Простой способ — блокировка загрузки модуля из initramfs.

Запрещаем автозагрузку модулей устройств видеоввода:

Источник

Посоветуйте карту видеозахвата совместимую с Linux

Всем доброго времени.

Есть ли у кого-нибудь опыт работы с картами видеозахвата на Linux? Засматриваюсь на AVerMedia Technologies Live Gamer HD 2 с подключением по PCIe-x1, но что-то с отзывами на линь совсем-совсем глухо. Ещё я ограничен рамками PCIe-x1, так как остальные PCIe-x16 заняты видеокартами. Как последний вариант, возможно USB 3.Х, но PCIe конечно же предпочтительнее.

не помню конкретную модель, но помню что вроде как авермедия, подключается по усб, выглядит как бааальшая флешка, цена вопроса около 10к деревянных, на тытрубе есть обзор, в том числе и по работе в линуксе — пашет.

с тлф не удобно, сам найдешь.

Спасибо, конечно, но этож надо лопатить спецификации устройств и сравнивать их со списком из ссылки. Слишшшшшком муторно и не раскрывает какие-либо подводные камни (например как лет 7-8 назад положение с usb-модемами, которые как бы были в списке поддерживаемых, но на деле запускались через адские танцы с бубном). Именно поэтому я адресовал вопрос тем, у кого есть конкретные железки с конкретным опытом запуска на лине.

Эти файлы тебе желательно просмотреть. Если выбранная модель в н х не грипается, брать не советую!

Эти файлы тебе желательно просмотреть. Если выбранная модель в н х не грипается, брать не советую!

Источник

Захват видео с USB камер на устройствах под управлением Linux

Предыстория

  1. Видео в разрешении FullHD (1920Х1080) или HD (1280х720) и нормальная частота кадров (чтобы можно было играть).
  2. Игрушку я планировал отдать детям, поэтому нужен был автостарт и поддержка подключения/отключения камеры.

В общем хотелось что-то вроде этого:

Ограничения

Я не собирался искать решение, которое работает всегда и везде. Следующие ограничения меня вполне устраивали:

  1. Хороший WiFi сигнал.
  2. Ограниченное число подключений, приоритет отдавался случаю, когда есть всего один клиент.
  3. Камера поддерживает режим MJPG.

HW и SW

Предварительный анализ

Код UVC драйвера оказался готов к добавлению различного рода “специальных” решений, и я легко нашел место, где надо скорректировать размер буфера (функция uvc_fixup_video_ctrl()). Более того, драйвер поддерживает набор quirks, которые позволяют поддерживать камеры с разного рода отклонениями от стандарта UVC. В общем, разработчики драйвера сделали лучшее, что возможно для поддержки зоопарка камер.

Добавив коррекцию размера буфера, я получил стабильную работу в режиме 1280х720 и даже в режиме 1920х1080. Ура! Половина задачи решена!

В поисках новых приключений

Немного порадовавшись первой удаче, я вспомнил, что mjpg-streamer далек от совершенства. Наверняка можно сделать что-то простое, не такое универсальное как mjpg-streamer, но более подходящее для моих условий. Так я решил сделать uvc2http.

Читайте также:  Темы приветствия для windows

В mjpg-streamer мне не понравилось использование нескольких потоков и копирование буферов. Это определило архитектуру решения: 1 поток и никакого копирования. Используя non-blocking IO, это делается достаточно просто: захватываем кадр и без копирования отсылаем его клиенту. Есть небольшая проблема: пока мы отсылаем данные из буфера, мы не можем вернуть буфер обратно в очередь. А пока буфер не в очереди, драйвер не может положить в него новый кадр. Но если размер очереди > 1, то это становится возможным. Число буферов определяет максимальное количество подключений, которое можно гарантированно обслуживать. Т.е., если я хочу гарантированно поддерживать 1 клиента, то 3-х буферов достаточно (в один буфер пишет драйвер, из второго отсылаем данные, третий в запасе, чтобы избежать конкуренции с драйвером за буфер при попытке получить новый кадр).

Uvc2http

Uvc2http состоит из двух компонентов: UvcGrabber и HttpStreamer. Первый отвечает за получение буферов (кадров) из очереди и возврат их обратно в очередь. Второй отвечает за обслуживание клиентов по HTTP. Есть еще немного кода, который связывает эти компоненты. Подробности можно посмотреть в исходниках.

Неожиданная проблема

Все было замечательно: приложение работало и в разрешении 1280х720 выдавало 20+ кадров/сек. Я делал косметические изменения в коде. После очередной порции изменений я замерил частоту кадров. Результат был удручающий — меньше 15 кадров. Я бросился искать, что же привело к деградации. Я потратил, наверное, 2 часа в течение которых частота уменьшалась с каждым замером до значения 7 кадров/сек. В голову лезли разные мысли о деградации из-за долгой работы роутера, из-за его перегрева. Это было что-то непонятное. В какой-то момент я отключил стримминг и увидел, что просто один захват (без стримминга) давал те же 7 кадров. Я даже начал подозревать проблемы с камерой. В общем какая-то чушь. Дело было вечером и камера, повернутая в окно, показывала что-то серое. Дабы сменить мрачное изображение я повернул камеру внутрь комнаты. И, о чудо! Частота кадров увеличилась до 15 и я все понял. Камера автоматически подстраивала время экспозиции и в какой-то момент это время стало больше длительности кадра при заданной частоте. За эти два часа случилось следующее: сначала плавно темнело (это был вечер), а потом я повернул камеру внутрь освещенной комнаты. Направив камеру на люстру я получил 20+ кадров/сек. Ура.

Другие проблемы и нюансы использования

Результаты

Ниже табличка с результатами сравнения mjpg-streamer и uvc2http. Если коротко — есть значительный выигрыш в потреблении памяти и небольшой выигрыш в частоте кадров и загрузке CPU.

1280×720 1920×1080
VSZ, KB, 1 client VSZ, KB, 2 clients CPU, %, 1 client CPU, %, 2 clients FPS, f/s, 1 client FPS, f/s, 2 clients VSZ, KB, 1 client VSZ, KB, 2 clients CPU, %, 1 client CPU, %, 2 clients FPS, f/s, 1 client FPS, f/s, 2 clients
Mjpg-streamer 16860 19040 26 43 17.6 15 25456 25812 28 50 13.8 10
uvc2http 3960 3960 26 43 22 19.6 7576 7576 28 43 15.5 12.2

Ну и конечно же видео, которое я сделал вместе с детьми:

Фото получившегося танка (получилось что-то вроде цыганской телеги):

Использование

Исходники находятся здесь. Для использования на PC Linux надо всего лишь собрать (при условии что вы не хотите патчить драйвер UVC). Утилита собирается с помощью CMake стандартным способом. Если же надо использовать в OpenWRT, то надо сделать дополнительные шаги:

  1. Скопировать содержимое директории OpenWrt-15.05 в корень репозитория OpenWRT. Эти файлы только для OpenWRT 15.05. Они описывают новый пакет для OpenWRT и патч для драйвера UVC.
  2. Если ваша камера также возвращает завышенный размер необходимого буфера, то надо добавить использование quirk UVC_QUIRK_COMPRESSION_RATE для вашей камеры в файле uvc_driver.c. Для этого надо сделать собственный патч для драйвера UVC. Как это сделать, описано здесь wiki.openwrt.org/doc/devel/patches. Вам необходимо добавить описание вашей камеры в массив uvc_ids. В качестве примера можно посмотреть на описание моей камеры:
  • Настроить сборку OpenWRT стандартный методом (http://wiki.openwrt.org/doc/howto/build). При настройке необходимо выбрать пакет uvc2http в меню Multimedia.
  • Собрать пакет uvc2http или полный образ (обязательно если вам необходим патч драйвера) для вашей целевой платформы. Если установить утилиту как пакет, то она будет запускаться при старте.
  • Установить пакет на устройство/обновить систему
  • Что дальше

    Решение состоит из двух частей: патч драйвера и другой алгоритм стримминга. Патч драйвера можно было бы включить в новую версию ядра линукса, но это спорное решение, так как оно основано на предположении о минимальном коэффициенте сжатия. Утилита же, на мой взгляд, хорошо подходит для использования на слабых системах (игрушках, домашних системах видеонаблюдения), и ее можно немного улучшить, добавив возможность задавать настройки камеры через параметры.

    Алгоритм стримминга можно улучшить так как есть запас по загрузке CPU и по ширине канала (я легко получал с роутера 50+ MBit подключая десяток клиентов). Также можно добавить поддержку звука.

    Источник

    itpress

    Олег Скрипкин

    Сейчас цифровые технологии все больше проникают в нашу жизнь, с каждым днем число счастливых обладателей цифровых фотоаппаратов и камер увеличивается, а место на полках под новые диски с фильмами и музыкой стремительно уменьшается :). Вспомни, когда ты последний раз смотрел видеокассету на своем старом добром видеомагнитофоне? Но у многих из нас все же сохранились кусочки от той старой «аналоговой» жизни в виде кассет с домашними записями, передачами или фильмами, которые очень хотелось бы переписать на CD или DVD-диск и пользоваться всеми благами цифровых носителей информации и фичами ее обработки и воспроизведения. Многим покажется, что осуществить эту задачу в Linux очень сложно, если вообще возможно. Данная статья поможет читателю разобраться в теме видеозахвата и убедиться, что реализовать эту задачу в GNU/Linux вполне возможно, и для этого не требуется каких-то экстраординарных усилий.

    Физика

    Под видеозахватом понимается процесс преобразования аналогового видеосигнала, исходящего из его источника, в цифровой вид, с возможностью сохранения полученной информации на цифровой носитель. В роли источников видеосигнала могут выступать камера, видеомагнитофон, телевизионная антенна, а под устройствами видеозахвата подразумеваются всевозможные TV-tuner’ы или просто видеокарты с реализацией функций VIVO и соответствующими видеовходами. Для соединения источника с устройством видеозахвата используются кабели двух типов: композитный кабель (Сomposite, VHS) и S-Video(S-VHS) кабель. Для подключения композитного кабеля используется разъем RCA («тюльпан»), а для кабеля S-VHS – разъем S-Video. Если на источнике есть выход S-Video, то лучше использовать для подключения именно его, так как такое подключение позволяет добиться наилучшего качества передаваемого видеосигнала, и, как следствие, получаем более хорошее качество захваченного видеоизображения. На некоторых картах видеозахвата отсутствует композитный вход, тогда нужно воспользоваться переходником с RCA на S-Video.

    Читайте также:  Lenovo ideapad yoga 11 установка windows 10

    Звуковой выход на источнике как правило выполнен в виде того же RCA-разъема, при помощи которого его можно подключить к RCA-разъему устройства видеозахвата. Если использовать подключение к звуковой карте, то потребуется переходник с RCA на mini-jack. Аудиопоток можно оцифровывать как с помощью средств карты видеозахвата, так и с помощью звуковой карты. Предпочтительнее все же использовать для этой цели звуковуху. Хочу предупредить, что если используется один кабель RCA, то аудиопоток передается в mono-формате, а если два – то в stereo, поэтому настройки аудиокодека стоит подбирать под соответствующий поток. При кодировании mono-звука как stereo качество не улучшится, но зато объем будет существенно больше.

    Условия задачки

    Итак, мы имеем какой-то внешний источник видеосигнала (видеомагнитофон), который соединен одним из двух типов кабелей (композитным) с нашим устройством видеозахвата (TV Tuner’ом). Нам требуется настроить поддержку данного устройства видеозахвата в Linux-системе и осуществить захват видеоизображения в файл, пользуясь каким-нибудь программным пакетом.

    На данный момент подавляющее большинство карт видеозахвата собраны на чипсетах Bt848/Bt848a/Bt849/Bt878/Bt879 (Brooktree) фирмы Conexant, поэтому именно настройку карт на этих чипах мы рассмотрим подробно, но некоторые общие моменты одинаковы для всех чипсетов. Узнать модель чипа карточки можно из прилагаемой к ней документации, или прямо прочитав маркировку микросхемы на карточке.

    Компиляция ядра системы

    Перед тем как приступать к работе с каким-либо устройством, необходимо прежде всего, чтобы наше оборудование поддерживалось ядром системы. Для этого потребуется скомпилировать его, включив эту поддержку. Работа с устройствами аудио- и видеозахвата в Linux осуществляется с помощью системы Video for Linux (v4l), в которую входят как аппаратная поддержка устройств, так и программный интерфейс для работы с ними. Ее-то и необходимо включить в ядро. Чтобы скомпилировать ядро нам потребуются его исходные тексты. Скорее всего, они уже есть в системе в каталоге /usr/src/linux-[version], где [version] – номер версии ядра. Но если вдруг их там не оказалось, то как вариант можно скачать последнее ядро с официального сайта www.kernel.org или посмотреть на CD своего дистрибутива, в каталоге /kernel.

    После того как ты нашел исходные тексты ядра и распаковал их в нужный каталог, перед компиляцией я тебе советую заглянуть в файл /usr/src/linux-[version]/Documentation/v ideo4linux/bttv/Cards и найти там модель своей карты, чтобы точно удостовериться в ее поддержке.

    Большая часть команд, которые я буду описывать далее, требуют привилегий root’а, поэтому если ты пока – не su, то настало самое время им стать.

    Переходим в каталог с исходными текстами ядра и запустим меню программы настройки командами:

    Драйвера, которые нам необходимы для поддержки устройств видеозахвата, лучше компилировать в виде модулей . Это нужно потому, что нет необходимости в постоянной поддержке устройств видеозахвата, а модуль будет загружаться только тогда, когда она возникнет. Да и настройку модулей делать гораздо удобнее.

    Сперва нужно включить поддержку шины I2C (Inter-Integrated Circuit) – она необходима для поддержки драйверов Video for Linux.

    I2C bit-banging interfaces (NEW)

    Теперь можно включить поддержку самих драйверов (Video for Linux) и поддержку конкретных чипсетов Bt848/878.

    Video For Linux

    BT848 Video For Linux

    Для поддержки аудио входа карты видеозахвата надо также включить поддержку аудиочасти чипсета.

    Sound card support

    BT878 audio dma

    После настройки ядра выйди из menuconfig’а с сохранением. Программа создаст необходимые конфигурационные файлы. Теперь для компиляции ядра последовательно ты должен ввести следующие команды:

    Создание зависимостей между компонентами ядра.

    Удаление объектных файлов и всяких ненужных вещей, которые остал8сь от предыдущей компиляции.

    Непосредственная компиляция ядра.

    Компиляция модулей ядра.

    Установка модулей в директорию /lib/modules/[kernel version]

    Установка самого ядра. После этой команды ядро и системный map-файл скопируются в корневой каталог раздела и будут иметь названия /vmlinuz и /System.map.

    Я советую переименовать и перенести эти файлы в специальный каталог /boot, чтобы не возникло путаницы в дальнейшем, только не удали другие ядра в этом каталоге, они могут тебе пригодиться, если возникнут какие-нибудь ошибки в процессе загрузки с новым ядром.

    # mv /vmlinuz /boot/vmlinuz-new

    # mv /System.map /boot/System.map-new

    Когда уже ядро и модули скомпилированы и установлены, необходимо наше новое ядро прописать в системный загрузчик, чтобы можно было с этим ядром загружаться. Привожу пример настройки конфигурационного файла самого популярного загрузчика, lilo (Linux Loader). Для этого в файл /etc/lilo.conf прописываем следующие строки:

    # путь, где находиться наше свежескомпилированное ядро.

    # корневой раздел, где установлен Linux.

    # метка, которой будет обозначено ядро в загрузочном меню.

    Чтобы изменения вступили в силу, обновляем загрузчик командой:

    Настройка карты видеозахвата в Linux

    Как ты уже наверное знаешь, устройства в Linux представлены в виде, так называемых файлов-устройств в каталоге /dev, через которые и происходит взаимодействие внешнего программного обеспечения с этим устройством. Так вот, файлы устройств для карт видеозахвата называются /dev/video[0,1,2..]. Для нашей карточки файл будет называться /dev/video0, если карточек несколько, то им присваиваются имена video1, video2 и т.д.

    Зачастую эти файлы уже имеются в большинстве дистрибутивов, но все же для уверенности это лучше проверить. Выполняем команду:

    Если вдруг данного устройства не оказалось, тогда воспользуемся специальным скриптом MAKEDEV, который есть в исходных текстах ядра. Для этого перейдем в каталог, где он находится, установим права для запуска и выполним его с параметрами video 0:

    # cd /usr/src/linux-[version]/Documentation/v ideo4linux/bttv

    # chmod 711 ./MAKEDEV

    Поскольку части ядра, отвечающие за поддержку нашего устройства, мы компилировали в виде отдельных модулей, то их надо настроить, хотя это и не обязательно. Возможно, модуль во время загрузки сам сможет определить, какая у тебя модель карточки видеозахвата, и подберет параметры самостоятельно, но все же, если возникнут проблемы, то придется вручную устанавливать нужные параметры – это не так уж и сложно.

    Для этого необходимо отредактировать файл /etc/modules.conf – он должен иметь примерно следующее содержание:

    alias char-major-89 i2c-dev

    options i2c-core i2c_debug=1

    options i2c-algo-bit bit_test=1

    Читайте также:  Назначит сочетание клавиш windows

    alias char-major-81 videodev

    alias char-major-81-0 bttv

    options bttv card=2 radio=1

    options tuner type=3 debug=1

    Параметры модулей управления шиной I2C: i2c-core, i2c-algo-bit изменять не стоит. А вот в параметрах модулей настройки карточки следует кое-что поменять. Первый важный параметр – это «card», который определяет модель карты. Для того чтобы выяснить, чему он должен быть равен, следует заглянуть в файл: /usr/src/linux-[version]/Documentation/v ideo4linux/bttv/CARDLIST и найти значение, которое соответствует модели твоей карты. Если там ее нет, то установи значение «card=0» которое соответствует совместимой с данным чипсетом карте.

    Второй важный параметр – это «type», который устанавливает стандарт передаваемого сигнала. Существует три типа стандарта – это: PAL, SECAM и NTSC. PAL – используется в странах Европы, SECAM – используется на просторах бывшего CCCР, а NTSC – в Японии и США. Стандарты PAL и SECAM очень схожи: оба они передают сигнал с частотой 25 кадров/cек (у NTSC – 30), поэтому большая часть нашей техники поддерживает оба этих стандарта. Так что параметр «type» надо устанавливать в зависимости от типа передаваемого сигнала источником. Список значений можно посмотреть в том же файле CARDLIST, кроме того, значение type=3 подойдет для большинства аппаратуры, работающей в системах PAL и SECAM.

    Параметр «radio» определяет поддержку устройством радио. Если карта его не поддерживает, то надо установить значение «radio=0».

    Итак, после всех процедур нужно загрузить систему с новым ядром и внимательно изучить системные журнальные файлы на предмет возможных ошибок.

    Проверка полученных результатов

    Все, что происходит во время загрузки Linux, фиксируется в специальном журнальном файле /var/log/messages. Я советую его внимательно изучить, так как можно получить очень много полезной информации, касающейся системы в целом. Вот кусочек файла messages, из которого видно, что система нашла и определила PCI-карту видеозахвата AverMedia TVCapture. Что-то подобное ты должен найти и в своем журнале:

    midian kernel: Linux video capture interface: v1.00

    bttv: Bt8xx card found (0).

    PCI: Found IRQ 12 for device 02:01.0

    PCI: Sharing IRQ 12 with 02:01.1

    midian kernel: bttv: driver version 0.7.106 loaded

    midian kernel: bttv0: detected: AVerMedia TVCapture

    video AVerMedia [card=13], PCI subsystem ID is 1851:1850

    midian kernel: bttv0: using: BT878(AVerMedia TVCapture) [card=13,insmod option]

    i2c-core.o: driver generic i2c audio driver registered.

    i2c-core.o: driver i2c TV tuner driver registered.

    Если ты обнаружил какие-то ошибки, то попробуй загружать модули постепенно – тем самым ты сможешь локализовать проблему и устранить ее. Вот последовательность загрузки:

    # modprobe bttv card=0

    # modprobe tuner type=3

    Все, на этом разборки с ядром закончились. Надеюсь, что у тебя не возникло больших проблем, и ты можешь спокойно начать читать следующий раздел, в котором будет рассказано, как и какими средствами осуществить этот самый видеозахват в GNU/Linux.

    Программное обеспечение

    Выбор программных средств для оцифровки видеоизображения в Linux не столь велик, но даже существующие тулзы вполне подойдут для полноценной работы с видеопотоком. Одним из таких средств является программный пакет xawtv (http://bytesex.org/xawtv), который есть в большинстве популярных дистрибутивов. В состав пакета входят различные программы как для просмотра телевизионных программ (xawtv), так и для кодирования видео и видеозахвата (streamer).

    Допустим, нам нужно сделать видеозахват в файл. Тогда можно воспользоваться такой командой:

    # streamer -c /dev/video0 -f mjpeg -F mono 64 -r 25 -o test.avi

    Разберемся с параметрами: -с /dev/video0 определяет устройство, с которого необходимо сделать видеозахват; -f mjpeg – выбор метода сжатия изображения; mjpeg, -F mono 64 – формат аудиоданных; -r 25 – частота кадров, -o test.avi – имя выходного файла.

    Возможно, возникнет необходимость выводить видео через X-сервер, например, с использованием программы xawtv для просмотра телевизионных программ, тогда нужно включить в X-сервер поддержку video4linux. Для этого в секции «Module», конфигурационного файла X-сервера /etc/X11/xorg.conf надо прописать: Load «v4l» и перегрузить X-сервер.

    Для просмотра телевизионных передач отлично подходит программа tvtime (http://tvtime.net/) — она очень удобна в использовании, да и качество картинки мне понравилось больше, чем в xawtv. Недостатком ее является отсутствие возможности делать захват в файл.

    Mplayer

    Про следующий пакет я расскажу поподробнее, так как возможности его в принципе неограниченны и совершенствуются с каждым днем. Это mplayer (www.mplayerhq.hu). Помимо популярного видеопроигрывателя mplayer в него входит прекрасная программа-кодировщик mencoder. C помощью этой утилиты можно осуществлять видеозахват и сжатие видеопотока «на лету» большим набором видеокодеков, а также использовать различные фильтры для улучшения качества изображения. В качестве примера приведем команду:

    # mencoder tv:// -tv driver=v4l:device=/dev/video0:width=640:h eight=480:norm=secam:amode=0

    -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=950 -vf crop=624:272:8:42 -sws 2 -oac mp3lame

    -lameopts cbr:br=64:mode=3 -o vc.avi

    Опишем назначение параметров: -tv – режим видеозахвата; driver=v4l – использование драйверов Video for Linux; width=640:height=480 – вертикальное и горизонтальное разрешение; norm=secam – стандарт видео сигнала SECAM; amode=0 mono – параметры аудиосигнала. Вторая строчка: -ovc lavc – команда кодировать видеопоток кодеками библиотеки libavcodec; -lavcopts – задает параметры для видеокодека; vcodec=mpeg4 mpeg4 – кодек (DivX 4/5); vbitrate=950 – установка битрейта; -vf crop=624:272 – удаление пустых мест вокруг видеоизображения для сокращения размера файла и улучшения качества; -sws 2 – программное сглаживание для улучшения качества изображения. Третья строчка: -oac mp3lame – команда кодировать аудиопоток кодеком mp3lame; -lameopts – опции для кодека mp3lame; cbr – кодирование с постоянным битрейтом; br=64 – установка битрейта; mode=3 mono – тип сигнала.

    Если ты собираешься после видеозахвата производить различные манипуляции с захваченным видео в других программах, например, добавлять фильтры в avidemux или использовать пакет cinelerra для создания видеоэффектов и нелинейного монтажа, то рекомендуется при захвате либо отказаться от сжатия вообще, но тогда одна секунда несжатого видео будет занимать 21 Мб на жестком диске, что, наверное, не очень здорово, либо, как вариант, использовать метод сжатия MJPEG (в mencoder установить vcodec=mjpeg), который позволяет хорошо сжимать видеопоток без явных искажений. А уже для финальной компрессии можно использовать какой-нибудь из MPEG4 кодеков DivX или XVid, например.

    Выводы

    Как видно, поддержка устройств видеозахвата в Linux реализована на достаточно хорошем уровне, и при желании настройка системы занимает не так много времени и не вызывает серьезных проблем. И с программным обеспечением тоже все хорошо: программный пакет mplayer с его огромными возможностями сможет удовлетворить самые изысканные пользовательские запросы. Удачных захватов :)!

    Источник

    Оцените статью