ローカルビデオファイルからSwiftでサムネイルを作成するには?
たとえば、ビデオファイルのパスが次の場所にある場合:
file:///Users/Dev/Library/Developer/CoreSimulator/Devices/F33222DF-D8F0-448B-A127-C5B03C64D0DC/data/Containers/Data/Application/4BC62DBF-0108-453C-9324-5BC0E356FE24/tmp/trim.059D11E6-F0EF-43DB-9E97-CA4F1F95D6B6.MOV
ありがとうございました。
以下の編集を加えて翻訳:
var err: NSError? = nil
let asset = AVURLAsset(URL: NSURL(fileURLWithPath: "/that/long/path"), options: nil)
let imgGenerator = AVAssetImageGenerator(asset: asset)
let cgImage = imgGenerator.copyCGImageAtTime(CMTimeMake(0, 1), actualTime: nil, error: &err)
// !! check the error before proceeding
let uiImage = UIImage(CGImage: cgImage)
let imageView = UIImageView(image: uiImage)
// lay out this image view, or if it already exists, set its image property to uiImage
BaseZenの回答の翻訳Swift 3/Swift 4
次のように、URLアセットパスとしてサムネイルを作成する動画の場所を設定する必要があります。
import AVFoundation
を忘れないでください
func generateThumbnail(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(value: 0, timescale: 1), actualTime: nil)
let thumbnail = UIImage(cgImage: cgImage)
return thumbnail
} catch let error {
print("*** Error generating thumbnail: \(error.localizedDescription)")
return nil
}
}
これに問題があるすべての人のために、私は Github でホストされている例で次のドロップを作成しました
これは、Davidの回答のクリーンアップバージョンであり、iOS 11/Swift 4.x.
使用しているSwiftのバージョンに基づいて初期時間を処理するためのさまざまな呼び出しに注意してください。
func generateThumbnail(url: URL) -> UIImage? {
do {
let asset = AVURLAsset(url: url)
let imageGenerator = AVAssetImageGenerator(asset: asset)
imageGenerator.appliesPreferredTrackTransform = true
// Select the right one based on which version you are using
// Swift 4.2
let cgImage = try imageGenerator.copyCGImage(at: .zero,
actualTime: nil)
// Swift 4.0
let cgImage = try imageGenerator.copyCGImage(at: kCMTimeZero,
actualTime: nil)
return UIImage(cgImage: cgImage)
} catch {
print(error.localizedDescription)
return nil
}
}
AVURLAsset
からURL
を作成しますAVAssetImageGenerator
を使用してAVURLAsset
を作成し、サムネイルを作成しますCGImage
を作成しようとしますUIImage
を作成し、それを返しますBaseZenの回答は、Swift 2:
import UIKit
import AVFoundation
do {
let asset = AVURLAsset(URL: NSURL(fileURLWithPath: "/that/long/path"), options: nil)
let imgGenerator = AVAssetImageGenerator(asset: asset)
imgGenerator.appliesPreferredTrackTransform = true
let cgImage = try imgGenerator.copyCGImageAtTime(CMTimeMake(0, 1), actualTime: nil)
let uiImage = UIImage(CGImage: cgImage)
let imageView = UIImageView(image: uiImage)
// lay out this image view, or if it already exists, set its image property to uiImage
} catch let error as NSError {
print("Error generating thumbnail: \(error)")
}
理解するために、より少ない単純なコードを記述する方が良いでしょう。これは、私がSwift(3.1 ... 4.2)
import AVFoundation
func videoPreviewUIImage(moviePath: URL) -> UIImage? {
let asset = AVURLAsset(url: moviePath)
let generator = AVAssetImageGenerator(asset: asset)
generator.appliesPreferredTrackTransform = true
let timestamp = CMTime(seconds: 2, preferredTimescale: 60)
if let imageRef = try? generator.copyCGImage(at: timestamp, actualTime: nil) {
return UIImage(cgImage: imageRef)
} else {
return nil
}
}
それが誰かを助けることを願っています。