如果您想在Linux上使用FFmpeg来录制网络摄像头视频,可以尝试以下命令...
ffmpeg -f video4linux2 -s 640x480 -i /dev/video0 out.avi
但在Mac上,这种方法不起作用,所以我想知道如何在Mac上使用ffmpeg录制isight?我进行了研究,很多人说这是不可能的,但是大多数帖子都非常古老,所以我想知道自那时以来是否有改变。更新:当前(2014年8月)版本的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 的“音频”和“视频”选项卡中设置流
转到“网络”选项卡,将“传输”设置为“手动单播”,将“地址”设置为“127.0.0.1”,将“端口”设置为“6000、6002”之类的内容
选择“文件 -> 将广播设置保存为...”并将其保存到某个文件中(例如 Untitled.qtbr)
导出 SDP 文件:选择“文件 -> 导出 -> 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将能够使用您在第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
或将其传输到ffserver:
ffmpeg -i stream.sdp http://localhost:1881/feed1.ffm
(imho) 给ffmpeg/libavdevice添加iSight支持是相当困难的。iSight具有基于ObjC的API(QTKit),必须将其包装在C静态库中,同时ffmpeg必须链接所有特定于OS X的框架-这是可行的,但需要相当多的工作。
使用最新的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同步问题。
幸运的是,你仍然可以使用这个免费软件从命令行录制iSight相机的视频:
这里是使用方法的示例。
wacaw -L
wacaw --video --video-device 2 --video-input 0 --duration 3 --VGA ~/MyMovie