【问题标题】:How to generate thumbnail from Video url?如何从视频网址生成缩略图?
【发布时间】:2018-06-14 04:37:40
【问题描述】:

正如this answer 中提到的,我正在使用以下代码从视频 URL 生成缩略图:

//MARK: - - Generate Thumbnail
func getThumbnailFrom(path: URL) -> UIImage? {

    do {

        let asset = AVURLAsset(url: path, options: nil)

        let imgGenerator = AVAssetImageGenerator(asset: asset)
        imgGenerator.appliesPreferredTrackTransform = true

        let cgImage = try imgGenerator.copyCGImage(at: CMTimeMake(0, 1), actualTime: nil)
        let uiImage = UIImage.init(cgImage: cgImage)

        return uiImage


    } catch let error as NSError {

        print("Error generating thumbnail: \(error.localizedDescription)")
        return nil
    }
}

但它抛出了一个错误:

生成缩略图时出错:操作无法完成

【问题讨论】:

  • CMTimeMake(0, 1) 来自哪里?
  • 我直接通过了
  • 您的代码在我的情况下完美运行。检查文件管理器中的 URL 和视频文件。视频是否真的存在?
  • 我也为此使用了 youtube url
  • @SandipGill,视频页面或视频文件的 url?你能告诉我们这个网址吗?

标签: ios swift


【解决方案1】:

使用以下代码从视频网址生成缩略图。

DispatchQueue.global().async {
    let asset = AVAsset(url: "**your url of video**")
    let assetImgGenerate : AVAssetImageGenerator = AVAssetImageGenerator(asset: asset)
     assetImgGenerate.appliesPreferredTrackTransform = true
    let time = CMTimeMake(1, 2)
    let img = try? assetImgGenerate.copyCGImage(at: time, actualTime: nil)
    if img != nil {
    let frameImg  = UIImage(cgImage: img!)
                    DispatchQueue.main.async(execute: {
    // assign your image to UIImageView
                    })
            }
    }

【讨论】:

    【解决方案2】:

    嘿,我也对视频缩略图使用了相同的逻辑。

            do {
                let videoUrl = "Url"
    
                let asset = AVURLAsset(url: videoUrl, options: nil)
                let imgGenerator = AVAssetImageGenerator(asset: asset)
    
                let cgImage = try imgGenerator.copyCGImage(at: CMTimeMake(0, 1), actualTime: nil)
    
                // Rotate image before proceeding
                let uiImage = UIImage(cgImage: cgImage, scale: CGFloat(1.0), orientation: .right)
    
                image = uiImage
    
            } catch let error as NSError {
    
                print("Error occurred: \(error)")
            }
    

    它对我有用。得到CGImage 后,图像方向不正确,因此方向正确。看看它是否适合你。

    【讨论】:

    • file:///var/mobile/Containers/Data/Application/007D2DC0-99F5-4C13-90D6-B58E8BB61E14/Documents/video.mp4 这是我的文件网址
    猜你喜欢
    • 2017-02-16
    • 2012-12-06
    • 1970-01-01
    • 2014-05-22
    • 2013-10-22
    • 2015-07-25
    • 2017-10-15
    • 2017-03-01
    相关资源
    最近更新 更多