gpt4 book ai didi

ios - AVAsset 的 NaturalSize 与视频文件不同

转载 作者:可可西里 更新时间:2023-11-01 01:35:35 25 4
gpt4 key购买 nike

我在检查视频方向时遇到了很大的问题。有一个代码可以检查视频文件是否处于纵向模式:

private func checkIfVideoIsPortrait(videoURL: NSURL) -> Bool {

let videoAsset = AVAsset.init(URL: videoURL)
let videoTrack = videoAsset.tracksWithMediaType(AVMediaTypeVideo)[0]
let size = videoTrack.naturalSize
let txf = videoTrack.preferredTransform

let realSize = CGSizeApplyAffineTransform(size, txf)

print(videoTrack)
print(txf)
print(size)
print(realSize)

if (size.width == txf.tx && size.height == txf.ty) {
return false
} else if (txf.tx == 0 && txf.ty == 0) {
return false
} else if (txf.tx == 0 && txf.ty == size.width) {
return true
} else {
return true
}
}

我有两个视频文件:1080x1920 和 360x640。关键是代码返回文件的不同尺寸,我无法识别视频方向。

有一个日志:

CGAffineTransform(a: 1.0, b: 0.0, c: 0.0, d: 1.0, tx: 0.0, ty: 0.0)

(320.0, 568.0)

(320.0, 568.0)

CGAffineTransform(a: 0.0, b: 1.0, c: -1.0, d: 0.0, tx: 720.0, ty: 0.0)

(1280.0, 720.0)

(-720.0, 1280.0)

如何正确检查视频的尺寸?我很乐意提供帮助。

最佳答案

经过多日的尝试和思考如何获得视频的真实自然尺寸后,我改变了策略。

现在我正在使用从视频创建的缩略图来检查电影的尺寸。

问题出在 AVAssetExportSession 中。它会破坏 preferredTransform 并使用横向值。原因可能隐藏在 AVAssetExportPreset640x480 中。

Swift 2.0中有解决代码:

func checkIfVideoIsPortrait(videoURL: NSURL) -> Bool {

let videoAsset = AVAsset.init(URL: videoURL)

let generator = AVAssetImageGenerator.init(asset: videoAsset)
let imageRef: CGImageRef!

do {
try imageRef = generator.copyCGImageAtTime(kCMTimeZero, actualTime: nil)

let thumbinal = UIImage.init(CGImage: imageRef)

if thumbinal.size.width < thumbinal.size.height {
return true
} else if thumbinal.size.width > thumbinal.size.height{
return false
}

} catch let error as NSError {
print("Failed to check video portrait")
print(error.localizedDescription)
}
return false
}

关于ios - AVAsset 的 NaturalSize 与视频文件不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38123253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com