Swift - 如何获得视频维度?

时间:2017-07-03 06:51:43

标签: ios swift video size

我正在开发一个视频编辑应用程序,其中每个视频都以这样的方式进行平方,即视频的任何部分都不会被裁剪。为此,在纵向视频的情况下,它包含左侧和黑色部分。对于风景视频,它包含顶部和顶部的黑色部分。视频的底部。黑色部分是视频的一部分,不适用于AVPlayerViewController。以下是示例enter image description here

我需要用一些CALayers覆盖这些黑色部分。

  

CALayer的框架( CGRect )是什么?

我正在获取包含黑色部分的naturalSize属性的视频维度。

  

有没有办法获得没有黑色部分的视频尺寸?(我的意思是实际视频内容的尺寸)或   有没有办法获得视频黑色区域的CGRect

2 个答案:

答案 0 :(得分:18)

试试这个:

var mediaAspectRatio: Double! // <- here will be set aspect ratio for video with url

func initAspectRatioOfVideo(with fileURL: URL) {
  let resolution = resolutionForLocalVideo(url: fileURL)

  guard let width = resolution?.width, let height = resolution?.height else { 
     return 
  }

  mediaAspectRatio = Double(height / width)
}

private func resolutionForLocalVideo(url: URL) -> CGSize? {
   guard let track = AVURLAsset(url: url).tracks(withMediaType: AVMediaTypeVideo).first else { return nil }
   let size = track.naturalSize.applying(track.preferredTransform)
   return CGSize(width: fabs(size.width), height: fabs(size.height))
} 

希望有所帮助

答案 1 :(得分:0)

这是弗拉德·普利切夫(Vlad Pulichev)回答的更简洁的版本。

var aspectRatio: CGFloat! // use the function to assign your variable

func getVideoResolution(url: String) -> CGFloat? {
    guard let track = AVURLAsset(url: URL(string: url)!).tracks(withMediaType: AVMediaType.video).first else { return nil }
    let size = track.naturalSize.applying(track.preferredTransform)
    return abs(size.height) / abs(size.width)
}