13

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

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

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

我已经研究过,很多人说不能这样做,但是这些帖子中的大多数都很旧,所以我想知道从那时起它是否发生了变化。

4

3 回答 3

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 数据包并将它们传输到网络。

所以解决方法非常麻烦,需要双重编码,但它有效:

  1. 在 QuickTime BroadcasterAudioVideo选项卡中设置流

  2. 转到Network选项卡,设置Transmission为“手动单播”,设置Address为“127.0.0.1”,设置为“ Ports6000、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"'
    

启动 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 特定框架链接——这是可行的,但需要大量工作。

于 2013-10-22T16:59:55.853 回答
11

使用最新的 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 同步问题

于 2014-07-21T17:27:24.197 回答
4

在 Linux 上,“ffmpeg”使用“ video4linux2 ”捕获 API,在 Windows 上,有一个名为“video4windows”的版本。不幸的是,没有人为 Mac 制作版本。


幸运的是,您仍然可以使用此免费软件从命令行从 iSight 摄像头录制视频:

Wacaw - Mac OS X 的网络摄像头工具


这是它的用法示例。

  • 步骤 1)查看存在哪些视频硬件

哇哇-L

  • 步骤 2)将视频捕获到文件。在我的 MacBook 上,它会将我的内部 iSight 摄像头报告为 ID 为“2”的 USB 设备,输入为 ID“0”。这是我的 MacBook 的外观。'video-device' 可能因您的计算机而异,您也可以省略 '--video-input 0' 部分:

wacaw --video --video-device 2 --video-input 0 --duration 3 --VGA ~/MyMovie


希望这可以帮助!

于 2013-10-20T23:18:05.147 回答