【问题标题】:record a video with isight using ffmpeg使用 ffmpeg 用 isight 录制视频
【发布时间】:2013-09-28 19:21:17
【问题描述】:

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

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

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

我研究过,很多人说不能做,但是这些帖子大部分都太旧了,所以我想知道从那以后它是否改变了。

【问题讨论】:

    标签: macos video ffmpeg ffserver isight


    【解决方案1】:

    更新:当前(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 Broadcaster 的 AudioVideo 选项卡中设置流

    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"'
      

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

    【讨论】:

    • 流的质量非常非常差,而且fps很低。我在 vlc: 'open -a vlc stream.sdp' 和 ffserver: 'ffmpeg -i stream.sdp localhost:8090/feed1.ffm' 上测试了 stream.sdp,两者的质量都很糟糕。所以QTB一定有问题。我将 QTB 中的设置设置为 30 fps 和 1000 kbps,并没有任何区别。
    • 你使用的框架尺寸是多少?
    • 我目前使用的是 600x480
    • 大部分屏幕是灰色的,可能有一个像素在这里和那里没有。我确定我的 isight 也能正常工作,因为它在照相亭等上工作得很好。
    • 嗯,我使用了 1024x768@15 2000 mbps,它工作得很好(与 iSight 一样好)。 QTB 中的帧速率存在问题:无论用户的设置如何,它似乎都只能达到 15 fps。
    【解决方案2】:

    使用最新的 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

    【讨论】:

      【解决方案3】:

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


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

      Wacaw - Webcam Tools for 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


      希望这会有所帮助!

      【讨论】:

      • 我可以使用 wacaw 像 video4linux2 一样将我的 isight 直播到 ffserver 吗?
      • 或者只是一般的直播
      • 如果你需要直播,你将需要使用其他东西。我没有使用过 chazlever 的“creepycam”,但它可能会根据您的需要起作用。它位于这里:github.com/chazlever/creepycam 它需要安装“imagesnap”(因此也需要安装“HomeBrew”)。不过,我认为“creepycam”不会接近 24fps,因为它通过反复调用“imagesnap”来获取单个图像。
      • Apple 也有自己的 QTSS,不过我相信这是付费产品。 VLC 应用程序具有基于 GUI 的流式传输(请参阅:autonome.wordpress.com/2009/05/31/…),但如果您走这条路,您可能会使用网络技术破解一些东西,因为 Flash 也提供视频捕获。
      • 作为使用 ffmpeg 进行直播的示例:ffmpeg -f avfoundation -i "0" -s 320x240 -f flv -r 30.0 ""
      猜你喜欢
      • 1970-01-01
      • 2021-04-12
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 2012-09-14
      • 2019-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多