質問編集履歴

1 修正

KaneChan

KaneChan score 15

2017/09/18 22:55  投稿

AVFoundationを使って動画加工した際の動画サイズ反転について
AVFoundationを使って動画と画像をしているのですが、動画の方が90度左に反転してしまいます。
AVFoundationを使って動画と画像を加工しているのですが、動画の方が90度左に反転してしまいます。
画像の方は反転せずに加工されるのですが一体何故でしょうか?
また加工した際に、レイヤーの右端と下に緑の線が出てしまうのですがこれも何故だかわかりません。
ご回答よろしくお願いします。
```swift
func ComposeUIImageAndVideo(image: UIImage, videoAsset: AVURLAsset) {
       
       
       //ベースvideoのコンポジション、トラック作成
       let mixComposition : AVMutableComposition = AVMutableComposition()
       let compositionVideoTrack: AVMutableCompositionTrack = mixComposition.addMutableTrack(withMediaType: AVMediaTypeVideo, preferredTrackID: kCMPersistentTrackID_Invalid)
       let videoTrack: AVAssetTrack = videoAsset.tracks(withMediaType: AVMediaTypeVideo)[0]
       
       //コンポジションの設定
       try! compositionVideoTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero, videoAsset.duration), of: videoTrack, at: kCMTimeZero)
       compositionVideoTrack.preferredTransform = videoAsset.tracks(withMediaType: AVMediaTypeVideo)[0].preferredTransform
       
       
       //imageのCALayer作成
       let imageLayer = CALayer()
       imageLayer.contents = image.cgImage
       imageLayer.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)
       
       
       //親レイヤーの作成
       let parentLayer = CALayer()
       let videoLayer = CALayer()
       parentLayer.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)
       videoLayer.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)
       parentLayer.addSublayer(videoLayer)
       parentLayer.addSublayer(imageLayer)
       
       
       //合成用コンポジション作成
       let videoComp: AVMutableVideoComposition = AVMutableVideoComposition()
       videoComp.renderSize = CGSize(width: self.view.frame.width, height: self.view.frame.height)
       videoComp.frameDuration = CMTimeMake(1, 30)
       videoComp.animationTool = AVVideoCompositionCoreAnimationTool.init(postProcessingAsVideoLayer: videoLayer, in: parentLayer)
       
       
       //インストラクション作成
       let instruction: AVMutableVideoCompositionInstruction = AVMutableVideoCompositionInstruction()
       instruction.timeRange = CMTimeRangeMake(kCMTimeZero, mixComposition.duration)
       let layerInstruction: AVMutableVideoCompositionLayerInstruction = AVMutableVideoCompositionLayerInstruction.init(assetTrack: videoTrack)
       instruction.layerInstructions = [layerInstruction]
       
       
       //インストラクションを合成用コンポジションに設定
       videoComp.instructions = [instruction]
       
}
       
       
```
  • Xcode

    7436 questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

  • Swift

    12955 questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る