Как получить кадр за миллисекунду видео - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь получить кадры в миллисекундах видео.но когда я получал кадры из 10 секунд видео с 24 кадрами в секунду, я получал те же 24 кадра в каждую секунду.но на самом деле мне нужно получить кадр в миллисекундах, а не 24 одинаковых кадров.

Я получил 24 кадра в секунду, но эти 24 кадра такие же, как в первый раз.Мне нужно 24 разных кадров.Как выбрать кадр в миллисекундах?

Ниже приведен мой код для обзора:

var generator : AVAssetImageGenerator!
func getAllFrames(_ videoUrl : URL, _ fps : Float)
{
    let asset:AVAsset = AVAsset(url: videoUrl)
    let duration : Float = Float(CMTimeGetSeconds(asset.duration))
    generator = AVAssetImageGenerator(asset:asset)
    generator.appliesPreferredTrackTransform = true
    var frameImages = [UIImage]()
    let totalFrames = (Int(duration) + 1) * Int(fps)
    for index in 0..<totalFrames 
    {
        let time = Float(index) / fps
        if let image = getFrame(fromTime: Float64(time), fps: Int32(fps + 1.0))
        {
            images.append(image)
        }
    }
    generator = nil
    return images
}

// get frame in milli second

private func getFrame(fromTime:Float64, fps : Int32) -> UIImage?
{
    let time:CMTime = CMTimeMakeWithSeconds(fromTime, preferredTimescale: fps)
    let image:CGImage
    do
    {
        try image = generator.copyCGImage(at:time, actualTime:nil)
    }

    catch
    {
        return nil
    }

    return UIImage(cgImage: image)
}
...