【问题标题】:How to generate thumb image for 1 second video in swift?如何快速生成 1 秒视频的拇指图像?
【发布时间】:2021-04-14 12:46:47
【问题描述】:

我无法生成 1 秒视频的缩略图。我试过下面的代码,但它每次都会生成黑色图像。我尝试将时间刻度传递为(0,30),(0,1)。如果视频超过 1.5 秒,它就可以工作。

static func thumbnailFromVideo(videoUrl: URL, time: CMTime) -> UIImage {
    let asset: AVAsset = AVAsset(url: videoUrl) as AVAsset
    let imgGenerator = AVAssetImageGenerator(asset: asset)
    imgGenerator.appliesPreferredTrackTransform = true
    do {
        let cgImage = try imgGenerator.copyCGImage(at: time, actualTime: nil)
        let uiImage = UIImage(cgImage: cgImage)
        return uiImage
    } catch {
        
    }
    return UIImage()
}

【问题讨论】:

    标签: ios swift imageview thumbnails avasset


    【解决方案1】:

    如果您需要帧精确的缩略图,您需要将请求的前后时间公差设置为零:

    来自文档:

    将requestedTimeToleranceBefore和requestedTimeToleranceAfter的值设置为零以请求帧精确的图像生成;这可能会导致额外的解码延迟。


    imgGenerator.requestedTimeToleranceBefore = .zero
    imgGenerator.requestedTimeToleranceAfter = .zero
    

    【讨论】:

      【解决方案2】:

      这对我有用。

          func getvideosnapshot(url : URL , completion : @escaping ((UIImage?) ->())){
          DispatchQueue.global().async {
              let asset: AVAsset = AVAsset(url: url)
              let imageGenerator = AVAssetImageGenerator(asset: asset)
              imageGenerator.appliesPreferredTrackTransform = true
              let timestamp = CMTime(value: 1, timescale: 600)
              do {
                  let thumbnail = try imageGenerator.copyCGImage(at: timestamp, actualTime: nil)
                  DispatchQueue.main.async {
                      completion(UIImage(cgImage: thumbnail))
                  }
              } catch let err as NSError {
                 // print(err)
                  completion(nil)
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-09
        • 2012-03-23
        • 2022-10-15
        • 1970-01-01
        • 2011-08-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多