使用ffmpeg录制带有isight的视频

roa*_*eef 12 macos video isight ffmpeg ffserver

因此,要在Linux上使用ffmpeg录制网络摄像头视频,您可以使用类似...

ffmpeg -f video4linux2 -s 640x480 -i /dev/video0 out.avi
Run Code Online (Sandbox Code Playgroud)

但是在Mac上这不起作用,所以我想知道你如何用mac上的ffmpeg与isight进行记录?

我已经研究了很多人说它无法完成,但大多数这些帖子都很老了所以我想知道从那以后它是否有所改变.

Vad*_*sky 20

更新:当前(2014年8月)ffmpeg版本支持QTKit和AVKit框架:

ffmpeg -f qtkit -video_device_index 0 -i "" out.mpg
Run Code Online (Sandbox Code Playgroud)

要么

ffmpeg -f qtkit -i "default" out.mpg
Run Code Online (Sandbox Code Playgroud)

您还可以获取可用设备列表:

ffmpeg -f qtkit -list_devices true -i ""
Run Code Online (Sandbox Code Playgroud)

老答案:

我用QuickTime Broadcaster解决了这个问题.它是一个小实用程序,它捕获视频和音频,压缩它,打包rtp数据包中的压缩流并将它们传输到网络.

所以解决方法非常麻烦,需要双重编码,但它的工作原理如下:

  1. 在QuickTime Broadcaster Audio和Video选项卡中设置流

  2. 转到Network选项卡,设置Transmission为"手动单播",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"'
    
    Run Code Online (Sandbox Code Playgroud)

启动QTB后,ffmpeg将能够使用您在步骤4中导出的sdp文件读取压缩流(实际上,您可以在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
Run Code Online (Sandbox Code Playgroud)

或者将其传送给ffserver:

ffmpeg -i stream.sdp http://localhost:1881/feed1.ffm
Run Code Online (Sandbox Code Playgroud)

(imho)将iSight支持添加到ffmpeg/libavdevice非常困难.iSight有基于ObjC的API(QTKit),它必须包装在C静态库中,ffmpeg也必须与所有OS X特定的框架链接 - 这是可行的,但需要相当多的工作.


Duv*_*rai 8

使用最新的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
Run Code Online (Sandbox Code Playgroud)

写作时,在录制带有音频的视频时,您仍然可能遇到AVFoundation同步问题.