Swift4.2 从视频中抓取屏幕截图

标签 swift avasset

在 Swift 4.2 中,我试图从视频中抓取屏幕截图

func thumbnailImageFor(fileUrl:URL) -> UIImage? {

        let asset = AVAsset(url: fileUrl)
        let assetImgGenerate = AVAssetImageGenerator(asset: asset)
        assetImgGenerate.appliesPreferredTrackTransform = true

        let time = CMTimeMakeWithSeconds(1.0, preferredTimescale: 600)
        do {
            let img = try assetImgGenerate.copyCGImage(at: time, actualTime: nil)
            let thumbnail = UIImage(cgImage: img)
            return thumbnail
        } catch {
            print(error)
            return nil
        }   
 }

但出现错误:

Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo={NSLocalizedFailureReason=An unknown error occurred (-12792), NSLocalizedDescription=The operation could not be completed, NSUnderlyingError=0x600000f46580 {Error Domain=NSOSStatusErrorDomain Code=-12792 "(null)"}}

视频的网址: https://firebasestorage.googleapis.com/v0/b/lailaichatapp.appspot.com/o/message_movies%2F8A61AC4E-4A08-4EC7-BC78-A5D861BE48C5.mov?alt=media&token=8906971d-59d7-4880-988e-135615c10f22

我错过了什么吗?

最佳答案

我认为这可能是电影文件类型的问题,因为这是可行的:

import UIKit
import AVFoundation

func thumbnailImageFor(fileUrl:URL) -> UIImage? {

    let video = AVURLAsset(url: fileUrl, options: [:])
    let assetImgGenerate = AVAssetImageGenerator(asset: video)
    assetImgGenerate.appliesPreferredTrackTransform = true

    let videoDuration:CMTime = video.duration
    let durationInSeconds:Float64 = CMTimeGetSeconds(videoDuration)

    let numerator = Int64(1)
    let denominator = videoDuration.timescale
    let time = CMTimeMake(value: numerator, timescale: denominator)

    do {
        let img = try assetImgGenerate.copyCGImage(at: time, actualTime: nil)
        let thumbnail = UIImage(cgImage: img)
        return thumbnail
    } catch {
        print(error)
        return nil
    }
}

let url: URL = URL(string: "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4")!

let image: UIImage? = thumbnailImageFor(fileUrl: url)
print("Image: \(image)")

关于Swift4.2 从视频中抓取屏幕截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52611157/

相关文章:

ios - AVAssetExportSessionStatusFailed : Video exporting failed with error -16364

ios - AVPlayer/AVPlayerItem 如何通知我的应用程序无法访问的网络故障?

Swift - 此代码提示的含义是什么?

ios - insertTimeRange:ofTrack:atTime:error:(类AVMutableCompositionTrack)在iPhone上失败

ios - 谷歌地图整个世界地图适合屏幕(0缩放级别)-IOS

swift - 将 swift 文件添加到 xCode 中的新 View Controller ? (简单的)

ios - 从使用 AVAssetImageGenerator 获得的视频或拇指获取方向

ios - 使用 AVAssetExportSession 合成和导出后视频持续时间发生变化

swift - animateWithDuration 未显示

iOS:didCompleteWithError、didReceive 响应未通过 URLSession.uploadTask 触发