AVAssetとAVMutableComposition(AVFoundation)の記事まとめ

## AVFoundationの基本
基本全て必読。これ全部読めば基本はわかる
**・[AVFoundationを使ったiOSの動画編集 - Qiita](https://qiita.com/tastas/items/225eb3c6aa864d950f65)**
**・[iosの動画再生周りの基礎を調べた - Qiita](https://qiita.com/yakimeron/items/34a65397c1041c0b2a0c)**
**・[UIViewの背景に動画を流す簡単な方法 - Qiita](https://qiita.com/tattn/items/499b5f49fb11f55b3df7)**

以下、**同じ筆者のシリーズ記事**
**・[AV Foundationを使った動画編集(Asset) - Qiita](https://qiita.com/croquette0212/items/c92d7c0cf651f41c4b2e)**
->この記事はバージョンが古いので[変換ツール](https://objectivec2swift.com/#/converter/code/)にかけると良い。

**・[AV Foundationを使った動画編集(Composition) - Qiita](https://qiita.com/croquette0212/items/8912053e616e575a4d4a)**

**・[AVFoundationを使った動画編集(簡単なフェード処理) - Qiita](https://qiita.com/croquette0212/items/59b637ba0050aaa220e8)**
->`AVMutableComposition`とかのごっちゃになりそうなものの違いがわかりやすくまとまっている

**・[AVFoundationを使った動画編集(2つの動画をフェードで重ねる) - Qiita](https://qiita.com/croquette0212/items/0b60bac59b9c21b0d2ad)**


## AVAssetとAVMutableCompositionの基本
**・[＜AVFoundation＞動画編集の基本的なしくみを理解する - Qiita](https://qiita.com/Yuchi/items/c59d22bd4bd51c064ab1)**
**・[AVMutableVideoCompositionLayerInstructionの使い方 - おじさんは生きている](http://nakajijapan.github.io/blog/2014/01/19/avmutablevideocompositionlayerinstruction%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/)**


## 回転がおかしい系
**・[ios - ビデオがカメラロールから来たときのAVAssetExportSession回転エラー - 答えた](https://kotaeta.com/57360034)**
**・[ios – videoCompositionの回転とメタデータの削除を無視したAVAssetExportSession - コードログ](https://codeday.me/jp/qa/20190319/390196.html)**
**・[ios - ポートレートモードでキャプチャされたAVMutableVideoComposition回転ビデオ - 答えた](https://kotaeta.com/54428820)**
**・[AVFoundationで動画をリサイズ + 反転する - 木木木](http://source.hatenadiary.jp/entry/2014/03/18/155930)**
**・[ios – AVMutableVideoCompositionLayerInstructionを使用してビデオが回転していない - コードログ](https://codeday.me/jp/qa/20190515/831819.html)**
->`AVMutableVideoCompositionLayerInstruction`のトラックのID(引数)には`AVAssetTrack`ではなく**`AVMutableCompositionTrack`を指定しましょう**という話(`AVAssetTrack`を指定しても実行できてしまうので要注意)

```swift
//これはダメ
let assetTrack: AVAssetTrack = tracks[0] as AVAssetTrack
var layerInstruction = AVMutableVideoCompositionLayerInstruction(assetTrack: assetTrack)
//これはOK
let trackVideo: AVMutableCompositionTrack = composition.addMutableTrackWithMediaType(AVMediaTypeVideo, preferredTrackID: CMPersistentTrackID())
var layerInstruction = AVMutableVideoCompositionLayerInstruction(assetTrack: trackVideo)

//指定するトラックのIDを間違えると回転の検知とかがおかしくなる
//これダメ
rotater.setTransform(assetTrack.preferredTransform, atTime: insertTime)
//これならOK
layerInstruction.setTransform(assetTrack.preferredTransform, atTime: insertTime)
```
**・[AVAssetExportSessionビデオが縦向きとして保存されない | 翻訳QAサービス | code adviser](https://www.code-adviser.com/detail_30262905)**
**・[AVAssetExportSessionビデオが縦向きとして保存されない | 翻訳QAサービス | code adviser](https://www.code-adviser.com/detail_30262905)**
->上の記事と似たような話

**・[iOSで動画の回転方向を調べる - Qiita](https://qiita.com/tastas/items/b992885a02af90031fda)**
->`prefferedTransform`で検出した動画の向きに合わせて回転させるやり方

**・[縦横比 ビデオ ファイルが縦向きまたは iOS の横向きで記録されたかどうかを検出する方法 - 初心者入門サンプル](https://code-examples.net/ja/q/469de4)**
`MPMoviePlayerController`, `AVAssetImageGenerator`の`.appliesPreferredTrackTransform`プロパティとかで回転制御する方法もあるよという話(あんまわかってない)

## 使わないかも
**・[AVAssetExportSessionにおけるカスタムトランジションを用いた動画合成 - Qiita](https://qiita.com/imk2o/items/3ed544b13520e099e4da)**