[IOS] 동영상으로 GIF를 추출 예제

iOS에서 동영상으로 GIF를 추출하는 앱을 만들려면 다음과 같은 코드를 사용할 수 있습니다.

  1. 동영상 파일을 가져오기:
let videoURL = URL(fileURLWithPath: Bundle.main.path(forResource: "exampleVideo", ofType: "mp4")!)` 
  1. AVAsset을 사용하여 동영상에서 GIF 이미지 추출:
let asset = AVAsset(url: videoURL)
let generator = AVAssetImageGenerator(asset: asset)

let duration = asset.duration
let durationTime = CMTimeGetSeconds(duration)

var timePoints = [NSValue]()

for i in 0...9 {
  let seconds = durationTime * Double(i) / 10
  let time = CMTimeMakeWithSeconds(seconds, preferredTimescale: 600)
  timePoints.append(NSValue(time: time))
}

var images = [UIImage]()

generator.generateCGImagesAsynchronously(forTimes: timePoints) { (requestedTime, cgImage, actualTime, result, error) in
  if let cgImage = cgImage {
    images.append(UIImage(cgImage: cgImage))
  }
}` 
  1. 추출한 이미지를 사용하여 GIF 파일 만들기:
let fileProperties = [kCGImagePropertyGIFDictionary as String: [kCGImagePropertyGIFLoopCount as String: 0]]
let frameProperties = [kCGImagePropertyGIFDictionary as String: [kCGImagePropertyGIFDelayTime as String: 0.1]]

let documentsDirectoryURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let fileURL = documentsDirectoryURL.appendingPathComponent("output.gif")

guard let destination = CGImageDestinationCreateWithURL(fileURL as CFURL, kUTTypeGIF, images.count, nil) else { return }

CGImageDestinationSetProperties(destination, fileProperties as CFDictionary)

for image in images {
  CGImageDestinationAddImage(destination, image.cgImage!, frameProperties as CFDictionary)
}

CGImageDestinationFinalize(destination)` 

이 코드는 간단한 예제로, 실제로는 여러가지 오류 상황 및 예외처리를 고려해야합니다. 또한, GIF 파일을 저장할 때 파일명과 저장위치등 다양한 정보를 고려하여 작성해야 합니다.