Wenn ich ein Video-Asset über AVAssetExportSession exportiere, befindet sich die Ergebnisdatei im Landscape-Modus. (Datei packte via iTunes-> Apps-> Dateifreigabe-> meine App). Wie kann ich das Video-Asset im Hochformat exportieren (drehen)?So exportieren Sie Video-Asset über AVAssetExportSession im Hochformat
Antwort
Das vom iPhone-Aufnahmegerät kommende Video ist immer landschaftsorientiert, unabhängig von der Geräteausrichtung beim Aufnehmen.
Wenn Sie Ihr Video drehen möchten, besteht die "einfache" Lösung darin, der Videospur der exportierten Sitzung eine Transformation zuzuweisen.
erstellen 2 wandelbar Spuren in Ihrem AVComposition Objekt:
AVMutableCompositionTrack *videoTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
AVMutableCompositionTrack *audioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
Fügen Sie Ihre Medien-Tracks auf die Tracks Ihrer Komposition:
...
BOOL videoResult = [videoTrack insertTimeRange:sourceCMTime
ofTrack:[tracks objectAtIndex:0]
atTime:currentTime
error:&error];
BOOL audioResult = [audioTrack insertTimeRange:sourceCMTime
ofTrack:[tracks objectAtIndex:0]
atTime:currentTime
error:&error];
...
Nachdem Sie alle Ihre Tracks hinzugefügt, übernehmen Sie die auf die Videospur umwandeln Ihrer Zusammensetzung:
CGAffineTransform rotationTransform = CGAffineTransformMakeRotation(M_PI_2);
// CGAffineTransform rotateTranslate = CGAffineTransformTranslate(rotationTransform,360,0);
videoTrack.preferredTransform = rotationTransform;
(seien Sie vorsichtig, dass die transf Orm hatte die obere linke Ecke als Ursprung, so dass die Übersetzung nach der Drehung benötigt wurde, aber auf iPhone 4S, iOS 5.1 getestet, scheint es, dass die Drehung jetzt um das Zentrum gemacht wird.)
Wenn U die Strecke inzwischen transformieren sollte Stellen Sie die Komposition renderSize ein, da sie nicht mehr mit dem Rahmen oder mit einem schwarzen Block angezeigt werden kann:
self.mutableVideoComposition.renderSize = CGSizeMake(assetVideoTrack.naturalSize.height,assetVideoTrack.naturalSize.width);