7

当我通过 AVAssetExportSession 导出视频资产时,结果文件处于陆地空间模式。(通过iTunes->应用程序->文件共享->我的应用程序抓取的文件)。如何以纵向模式导出视频资产(旋转它)?

4

2 回答 2

22

来自 iPhone 捕获设备的视频始终是横向的,无论捕获时设备的方向是什么。

如果要旋转视频,“简单”的解决方案是为导出会话的视频轨道分配一个变换。

在 AVComposition 对象中创建 2 个可变轨道:

AVMutableCompositionTrack *videoTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
AVMutableCompositionTrack *audioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];

将您的媒体曲目添加到您的作品的曲目中:

...        
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];
...

添加所有轨道后,将变换应用到合成的视频轨道:

    CGAffineTransform rotationTransform = CGAffineTransformMakeRotation(M_PI_2);
//    CGAffineTransform rotateTranslate = CGAffineTransformTranslate(rotationTransform,360,0);
    videoTrack.preferredTransform = rotationTransform;

(注意transform是以左上角为原点的,所以旋转后需要平移,但在iPhone 4S,iOS 5.1上测试,现在似乎是围绕中心进行旋转。)

于 2012-04-06T12:15:47.423 回答
0

同时 U 变换轨道时应设置合成 renderSize,因为它可能超出框架或出现黑色块:

self.mutableVideoComposition.renderSize = CGSizeMake(assetVideoTrack.naturalSize.height,assetVideoTrack.naturalSize.width);
于 2017-02-24T10:04:10.873 回答