Еще про видео захват
Oct. 5th, 2013 10:39 pmКарты видеозахвата и веб-камеры имеют фиксированное количество режимов работы. В смысле разрешений и форматов данных. Посмотреть на них можно с помощью утилиты v4l2-ctl: v4l2-ctl --list-formats-ext
Нумерации или кодовых названий режимы не имеют, при захвате задавать режим следует по трем координатам: Width,Heigth,OutputFormat. При работе с mencoder'ом при этом это выглядит примерно так:
mencoder tv:// -tv driver=v4l2:device=/dev/video0:input=0:outfmt=mjpeg:width=768:height=572
При работе с avconv (ffmpeg)
avconv -f video4linux2 -input_format mjpeg -s 768x576 -i /dev/video0
при этом в работе avconv'е мной обнаружено две мисфичи:
1. Для некоторых карт avconv неправильно инициализирует какие-то параметры и с холодного старта, в результате чего видеозахват не работает. А вот если сначала запустить mencoder (или mplayer, не важно) с правильными параметрами, а потом avconv, то avconv начинает успешно работать. Эта фича в траке ffmpeg'а задокументирована...
2. Конкретно для Mira Video avconv как-то не совсем инициализирует карту при получении mjpeg-сжатого видео (raw в нормальном разрешении не пролазит через PCI) И в результате на выход приходит максимально пожатое видео с квадратиками. Mencoder же наоборот выдает минимальное пожатие. Как обучить avconv делать наоборот -- я так и не разобрался.
Вы конечно можете сказать что зачем avconv, если на mencoder все работает? Проблема в том, что скармливать видеопоток по ТЗ надо в RTMP, а это умеет только avconv :-(
В результате я конечно сконструировал монструозную конструкцию, когда mencoder грабит видео в named-pipe а avconv из него же немедленно видео и раздает. Оно даже работает. Но все это однако не совсем через то место через которое следовало бы...
Нумерации или кодовых названий режимы не имеют, при захвате задавать режим следует по трем координатам: Width,Heigth,OutputFormat. При работе с mencoder'ом при этом это выглядит примерно так:
mencoder tv:// -tv driver=v4l2:device=/dev/video0:input=0:outfmt=mjpeg:width=768:height=572
При работе с avconv (ffmpeg)
avconv -f video4linux2 -input_format mjpeg -s 768x576 -i /dev/video0
при этом в работе avconv'е мной обнаружено две мисфичи:
1. Для некоторых карт avconv неправильно инициализирует какие-то параметры и с холодного старта, в результате чего видеозахват не работает. А вот если сначала запустить mencoder (или mplayer, не важно) с правильными параметрами, а потом avconv, то avconv начинает успешно работать. Эта фича в траке ffmpeg'а задокументирована...
2. Конкретно для Mira Video avconv как-то не совсем инициализирует карту при получении mjpeg-сжатого видео (raw в нормальном разрешении не пролазит через PCI) И в результате на выход приходит максимально пожатое видео с квадратиками. Mencoder же наоборот выдает минимальное пожатие. Как обучить avconv делать наоборот -- я так и не разобрался.
Вы конечно можете сказать что зачем avconv, если на mencoder все работает? Проблема в том, что скармливать видеопоток по ТЗ надо в RTMP, а это умеет только avconv :-(
В результате я конечно сконструировал монструозную конструкцию, когда mencoder грабит видео в named-pipe а avconv из него же немедленно видео и раздает. Оно даже работает. Но все это однако не совсем через то место через которое следовало бы...