iphone - 使用 AVMutableVideoCompositionLayerInstruction 旋转视频

标签 iphone ios video-capture avfoundation

我正在使用带有前置摄像头的 iPhone 4 拍摄视频,并将视频与其他一些媒体 Assets 相结合。我希望此视频为纵向 - 所有视频的默认方向均为横向,在某些情况下,您必须手动进行管理。

我正在使用 AVFoundation,特别是 AVAssetExportSession 和 AVMutableVideoComposition。根据 WWDC 视频,很明显,当我将视频组合成新作品时,我必须自己“修复”方向。

所以,我创建了一个附加到我的 AVMutableVideoCompositionLayerInstruction 的 AVMutableVideoCompositionLayerInstruction,我正在使用 setTransform:atTime: 方法来设置旨在旋转视频的转换:

    AVMutableVideoCompositionLayerInstruction *passThroughLayer = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:videoTrack];
CGAffineTransform portraitRotationTransform = CGAffineTransformMakeRotation(degreesToRadians(90.0));
[passThroughLayer setTransform:portraitRotationTransform atTime:kCMTimeZero];

问题是当我查看导出的视频时,屏幕上没有任何实际内容。如果我将旋转角度减小到大约 45 度,我可以在屏幕上看到部分视频 - 就好像它没有在中心点旋转一样。我在下面添加了图片,以便更清楚地说明我在说什么。

视频的自然尺寸恢复为 480x360。我已尝试将其更改为 360x480,但这不会影响核心问题。

0 度旋转:

enter image description here

45 度旋转:

enter image description here

90 度旋转只是全绿色。

无论如何,我希望以前做过这件事的人能给我指明正确的方向。我找不到关于 AVFoundation 组合和导出中一些更高级主题的任何文档。

最佳答案

以目前已回答的内容为基础。我找到了一种非常好的调试方法,可以找出您的转换出了什么问题。使用可用的渐变方法,您可以为变换设置动画,从而更容易查看变换正在做什么。

大多数时候,我发现自己的转换似乎无能为力,直到我意识到仅使用视频轨道的 preferredTransform 属性可能会导致视频源移出渲染屏幕。

AVMutableVideoCompositionLayerInstruction *videoLayerInstruction = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:videoTrack];

[videoLayerInstruction setTransformRampFromStartTransform:CGAffineTransformIdentity
toEndTransform:videoTrack.preferredTransform 
timeRange:CMTimeRangeMake(projectClipStart, projectClipDuration)];

最终,我发现在某些情况下我需要应用转换才能将旋转后的视频带回渲染屏幕。

CGAffineTransformConcat(videoTrack.preferredTransform, CGAffineTransformMakeTranslation(0, renderSize.height))

注意:您的翻译值可能不同。

关于iphone - 使用 AVMutableVideoCompositionLayerInstruction 旋转视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5187789/

相关文章:

ios - 如何创建像照片应用程序一样的延时视频?

ios - 我无法将 AVFoundation 视频保存到本地 URL

iphone - iOS 7 中的 UIView 显示问题

ios - Xamarin iOS UIWebView : How to get custom data attribute values from URL content?

iphone - 以编程方式从服务器检索更新的文件

iphone - 为什么 UIScrollView 会自动重置其 zoomScale 属性?

ios - 多个查询未在 FMDB 中运行

使用opencv进行c++视频捕获

iphone - PhoneGap 应用程序会在应用程序更新时自行重置吗?

ios - UITableView 转换属性在 iOS 8 中不起作用