因此,要在 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 BroadcasterAudio
和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 到 UDP 套接字”。
ffmpeg -i stream.sdp -vcodec mjpeg -an -vf vflip -y /tmp/q.avi
或将其传输到ffserver:
ffmpeg -i stream.sdp http://localhost:1881/feed1.ffm
(恕我直言)很难将 iSight 支持添加到 ffmpeg/libavdevice。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 同步问题。
在 Linux 上,“ffmpeg”使用“ video4linux2 ”捕获 API,在 Windows 上,有一个名为“video4windows”的版本。不幸的是,没有人为 Mac 制作版本。
幸运的是,您仍然可以使用此免费软件从命令行从 iSight 摄像头录制视频:
这是它的用法示例。
哇哇-L
wacaw --video --video-device 2 --video-input 0 --duration 3 --VGA ~/MyMovie
希望这可以帮助!