【问题标题】:how to capture frames every 5 seconds from real time video in swift如何快速从实时视频中每5秒捕获一帧
【发布时间】:2021-08-11 22:00:17
【问题描述】:

我是 swift 新手,想分析实时视频中的图像,但大多数答案都解释了如何捕获每一帧视频,代码如下,我想每 5(或 N)个提取图像秒,如何修改代码。

   func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
        DispatchQueue.main.async {[unowned self] in
            guard let uiImage = self.imageFromSampleBuffer(sampleBuffer: sampleBuffer) else { return }
        }
    }

【问题讨论】:

  • 使用AVAssetImageGenerator提取图像帧。

标签: swift avfoundation intervals image-capture


【解决方案1】:

也许你可以通过做这样的事情来自己跟踪经过的时间?

var lastSampleDate = Date.distantPast
let sampleInterval: TimeInterval = 5 // 5 seconds

func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
    let currentDate = Date()
    guard currentDate.timeIntervalSince(lastSampleDate) >= sampleInterval else {
        return
    }

    lastSampleDate = currentDate
    DispatchQueue.main.async { [unowned self] in
        guard let uiImage = self.imageFromSampleBuffer(sampleBuffer: sampleBuffer) else { return }
    }
}

【讨论】:

  • 为什么不简单地使用 timeIntervalSinceNow?
  • @LeoDabus 也可以,但无论如何您都需要实例化一个Date 以分配给lastSampleDate
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
  • 1970-01-01
  • 2020-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多