Записать видео с помощью isight с помощью ffmpeg

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

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

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

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

Ответ 1

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

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

или

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

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

ffmpeg -f qtkit -list_devices true -i ""

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

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

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

  • Настройка потоков в вкладках QuickTime Broadcaster Audio и Video

  • Перейдите на вкладку Network, установите Transmission на "Ручная одноадресная рассылка", Address на "127.0.0.1", Ports на что-то вроде "6000, 6002"

  • File -> Save Broadcast Settings As... к некоторому файлу (например, Untitled.qtbr)

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

  • Теперь вы можете запустить/остановить 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 socket".

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 - это выполнимо, но требует довольно большой работы.

Ответ 2

Используя последний 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.

Ответ 3

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


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

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


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

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

wacaw -L

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

wacaw --video - видеооборудование 2 - видеовход 0 - duration 3 --VGA ~/MyMovie


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