UIImages to Video с AVAssetWriter производит мерцание черных рамок для <800 изображений - PullRequest
0 голосов
/ 01 июня 2018

Я застрял на несколько недель!

Я испробовал все решения там, на stackoverflow, которые отлично работают примерно от 0 до 500 изображений или 50 секунд на 12 кадров в секунду, но для более длинных видео есть черныймигает через ~ 50 секунд, в зависимости от того, какой iphone, с iphone 6 происходит через 50 секунд на iphone 8, это происходит после 1:30

Я попробовал принятый ответ от эта ссылка writeImagesAsMovie() функция

иногда возникают проблемы с выделением памяти, иногда нет, но мерцание черного сохраняется.

 // MARK: - Fill Pixel Buffer -

private func fillPixelBufferFromImage(image: UIImage, pixelBuffer: CVPixelBuffer) {
    CVPixelBufferLockBaseAddress(pixelBuffer, CVPixelBufferLockFlags(rawValue: 0))
    let pixelData = CVPixelBufferGetBaseAddress(pixelBuffer)
    let rgbColorSpace = CGColorSpaceCreateDeviceRGB()

    // Create CGBitmapContext
    let context = CGContext(
      data: pixelData,
      width: Int(720),
      height: Int(720),
      bitsPerComponent: 8,
      bytesPerRow: CVPixelBufferGetBytesPerRow(pixelBuffer),
      space: rgbColorSpace,
      bitmapInfo: CGImageAlphaInfo.premultipliedFirst.rawValue
    )


    // Draw image into context"
    context?.draw(image.cgImage!, in: CGRect(x: 0, y: 0, width: 720, height: 720))

    CVPixelBufferUnlockBaseAddress(pixelBuffer, CVPixelBufferLockFlags(rawValue: 0))


    //UIGraphicsEndImageContext()
}

1 Ответ

0 голосов
/ 01 июня 2018

Вещи, которые помогли получить желаемый результат ... используя UIImageJPEGRepresentation вместо PNG, размеры должны быть кратны 16 ... :), и более новые iphone могут обрабатывать больше изображений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...