因此,要在Linux上使用ffmpeg录制网络摄像头视频,您可以使用类似......
的内容ffmpeg -f video4linux2 -s 640x480 -i /dev/video0 out.avi
但是在mac上这不起作用,所以我想知道你如何在Mac上使用ffmpeg记录isight?
我已经研究了很多人说它无法完成,但大多数这些帖子都很老了所以我想知道从那时起它是否有所改变。
答案 0 :(得分:20)
更新:当前(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的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将能够使用您在步骤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)将iSight支持添加到ffmpeg / libavdevice非常困难。 iSight有基于ObjC的API(QTKit),它必须包装在C静态库中,ffmpeg也必须与所有OS X特定的框架链接 - 这是可行的,但需要相当多的工作。
答案 1 :(得分: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
截至撰写时,在录制带有音频的视频时,您仍然可能会遇到AVFoundation sync problems。
答案 2 :(得分:4)
在Linux上'ffmpeg'使用'video4linux2'捕获API,在Windows上有一个名为'video4windows'的版本。不幸的是,没有人为Mac制作过版本。
幸运的是,您仍然可以使用此免费软件从命令行录制iSight摄像头的视频:
<强> Wacaw - Webcam Tools for Mac OS X 强>
以下是其用法示例。
wacaw -L
wacaw --video --video-device 2 --video-input 0 --duration 3 --VGA~ / MyMovie
希望这有帮助!