записать видео с isight, используя ffmpeg

Итак, для записи видео с веб-камеры с помощью ffmpeg в Linux вы можете использовать что-то вроде...

ffmpeg -f video4linux2 -s 640x480 -i /dev/video0 out.avi

Но на Mac это не работает, поэтому мне было интересно, как вы записываете с помощью isight с ffmpeg на Mac?

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


person alex    schedule 23.09.2013    source источник


Ответы (3)


Обновлено: текущая (август 2014 г.) версия ffmpeg поддерживает платформы QTKit и AVKit:

ffmpeg -f qtkit -video_device_index 0 -i "" out.mpg

or

ffmpeg -f qtkit -i "default" out.mpg

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

ffmpeg -f qtkit -list_devices true -i ""

Старый ответ:

Я решил эту проблему с помощью QuickTime Broadcaster. Это небольшая утилита, которая захватывает видео и аудио, сжимает их, пакетирует сжатый поток в пакеты rtp и передает их в сеть.

Таким образом, обходной путь довольно громоздкий и требует двойного кодирования, но он работает:

  1. Настройте потоки на вкладках Audio и Video QuickTime Broadcaster.

  2. Перейдите на вкладку Network, установите Transmission на "Manual Unicast", Address на "127.0.0.1", Ports на что-то вроде "6000, 6002"

  3. File -> Save Broadcast Settings As... в какой-нибудь файл (например, Untitled.qtbr)

  4. Экспорт файла SDP: File -> Export -> SDP. SDP означает «Протокол описания сеанса», который содержит информацию о том, где найти поток, его параметры и параметры кодека и т. д.

  5. Теперь вы можете запустить/остановить QTB из командной строки:

    osascript -e 'tell application "QuickTime Broadcaster" to start document "Untitled.qtbr"'
    
    osascript -e 'tell application "QuickTime Broadcaster" to stop document "Untitled.qtbr"'
    

После того, как вы запустите QTB, ffmpeg сможет прочитать сжатый поток, используя тот файл sdp, который вы экспортировали на шаге 4 (на самом деле, вы можете открыть его в VLC или проигрывателе QuickTime: open -a vlc stream.sdp).

Таким образом, QTB работает как «агент захвата», который выполняет преобразование «сокета iSight-to-UDP».

ffmpeg -i stream.sdp -vcodec mjpeg -an -vf vflip -y /tmp/q.avi

или передать его на ffserver:

ffmpeg -i stream.sdp http://localhost:1881/feed1.ffm

(imho) Довольно сложно добавить поддержку iSight в ffmpeg/libavdevice. iSight имеет API на основе ObjC (QTKit), который должен быть обернут в статическую библиотеку C, а также ffmpeg должен быть связан со всеми специфическими платформами OS X - это выполнимо, но требует довольно много работы.

person Vadim Kalinsky    schedule 22.10.2013
comment
Качество стрима очень-очень плохое, и низкий fps. Я протестировал stream.sdp на vlc: 'open -a vlc stream.sdp' и на ffserver: 'ffmpeg -i stream.sdp localhost:8090/feed1.ffm", и оба были ужасного качества. Значит, с QTB что-то не так. Я установил настройки в QTB на 30 кадров в секунду и 1000 кбит/с, и это не имеет никакого значения. - person alex; 22.10.2013
comment
Какой размер рамы вы используете? - person Vadim Kalinsky; 22.10.2013
comment
Я сейчас использую 600x480 - person alex; 23.10.2013
comment
большая часть экрана серая, и здесь и там могут быть пиксели, которых нет. Я уверен, что мое зрение тоже работает, потому что оно отлично работает в фотобудке и т.п. - person alex; 23.10.2013
comment
Хм, я использовал 1024x768@15 2000 mbps, все работало нормально (насколько это возможно с iSight). В QTB есть проблема с частотой кадров: кажется, что он просто делает 15 кадров в секунду независимо от настроек пользователя. - person Vadim Kalinsky; 23.10.2013
comment
Кстати, файл sdp следует сохранять (экспортировать) после каждого изменения настроек QTB. - person Vadim Kalinsky; 23.10.2013
comment
Спасибо большое, теперь вроде работает! Просто любопытно, низкий fps из-за iSight, или QTB замедляет fps? - person alex; 23.10.2013
comment
Кстати, было не так уж сложно добавить поддержку iSight в ffmpeg. Выглядит пугающе из-за смеси objC и простого C, но работает. Получите ветку iSight_support из репозитория github github.com/vkalinsky/FFmpeg и используйте -f isight -i qq как исходник ffmpeg. Не знаю, примет ли команда ffmpeg этот запрос на извлечение или нет, но он работает, по крайней мере, в этой ветке. - person Vadim Kalinsky; 28.10.2013
comment
Я попробовал ffmpeg-2.4.7z с evermeet.cx/ffmpeg, но это не сработало (неизвестно формат ввода: 'qtkit'). Есть ли где-то специальная версия? - person Michael Böckling; 23.09.2014
comment
Хорошо, оказывается, вам нужна версия HEAD. Для Homebrew просто введите: brew upgrade --HEAD ffmpeg - person Michael Böckling; 23.09.2014

Используя последнюю версию ffmpeg, вы можете записывать видео iSight со звуком микрофона в файл:

# List available AVFoundation input devices:
ffmpeg -f avfoundation -list_devices true -i ""

# Record video at 30 fps from device 0:
ffmpeg -r 30 -f avfoundation -i 0 out.mp4

# Record from video device 0 and audio device 0:
ffmpeg -r 30 -f avfoundation -i 0:0 out.mp4

На момент написания статьи при записи видео со звуком вы все еще могли столкнуться с проблемами синхронизации AVFoundation.

person Duvrai    schedule 21.07.2014

В Linux 'ffmpeg' использует API захвата 'video4linux2, а в Windows есть версия, называемая 'видео4виндовс.' К сожалению, никто не сделал версию для Mac.


К счастью, вы по-прежнему можете записывать видео с камеры iSight из командной строки, используя это бесплатное программное обеспечение:

Wacaw – инструменты веб-камеры для Mac OS X


Вот пример его использования.

  • Шаг 1) Просмотрите, какое видеооборудование установлено:

вакав -L

  • Шаг 2) Запишите видео в файл. На моем MacBook он сообщает о моей внутренней камере iSight как о USB-устройстве с идентификатором «2» с входным идентификатором «0». Вот как это выглядит для моего MacBook. «Видео-устройство» может отличаться для вашего компьютера, и вы также можете опустить раздел «--video-input 0»:

wacaw --video --video-device 2 --video-input 0 --duration 3 --VGA ~/MyMovie


Надеюсь это поможет!

person original_username    schedule 20.10.2013
comment
Могу ли я использовать wacaw для прямой трансляции моего sight на ffserver, например, video4linux2? - person alex; 21.10.2013
comment
или просто прямой эфир в целом - person alex; 22.10.2013
comment
Если вам нужна прямая трансляция, вам нужно будет использовать что-то еще. Я не использовал «жуткую камеру» chazlever, но она может работать в зависимости от ваших потребностей. Он находится здесь: github.com/chazlever/creepycam. Для этого требуется установить 'imagesnap' (и поэтому также «HomeBrew»). Я не думаю, что «creepycam» будет приближаться к 24 кадрам в секунду, потому что он работает, многократно вызывая «imagesnap» для отдельных изображений. - person original_username; 22.10.2013
comment
Есть также собственный QTSS от Apple, хотя я считаю, что это платное предложение. Приложение VLC имеет потоковую передачу на основе графического интерфейса (см.: tag/" rel="nofollow noreferrer">autonome.wordpress.com/2009/05/31/ ), но если вы идете по этому пути, вы, вероятно, могли бы взломать что-то вместе с веб-технологиями, поскольку Flash также предоставляет захват видео. - person original_username; 22.10.2013
comment
В качестве примера того, как работает прямая трансляция с помощью ffmpeg: ffmpeg -f avfoundation -i 0 -s 320x240 -f flv -r 30.0 ‹rtmp-url› - person Christof; 15.11.2014