2016-06-30 9 views
1

私はビデオの方向を確認することに大きな問題があります。 1080x1920と360x640:AVSsetのNaturalSizeがビデオファイルと異なっています

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 
    } 
} 

私は2つのビデオファイルを持っている:ビデオファイルは、ポートレートモードであるかどうかを確認するためのコードがあります。要点は、コードがファイルのさまざまな次元を返すため、私はビデオの方向性が何であるかを認識できないということです。

< AVAssetTrack:0x157dee9a0、trackID = 2、MEDIATYPE =見よ>

CGAffineTransform(: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)

< AVAssetTrack:0x1593643c0、trackID = 2、MEDIATYPE =見よ>

CGAffineTransform(: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)

ビデオの正しい寸法を確認するにはどうすればよいですか?私は助けてうれしい。

答えて

0

ビデオの実際の自然なサイズを取得する方法を考えて何日もした後、私は自分の戦略を変えました。

今、私はビデオのサムネイルを使ってフィルムの寸法を確認しています。

問題はAVAssetExportSessionにあります。これはpreferredTransformを破棄し、ランドスケープ値を使用します。その理由は、AVAssetExportPreset640x480に隠れる可能性があります。

溶液コードがスイフト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 
} 
関連する問題