我正在使用AlAssetsGroup enumerateAssetsAtIndexes
列出照片(相机)应用程序中的资源。对于给定的视频资源,我希望确定它是以纵向模式还是横向模式拍摄的。
在下面的代码中,资产是AlAsset
,我已经测试了它是否是视频资产[asset valueForProperty:ALAssetPropertyType]
是AlAssetTypeVideo
,那么:
int orientation = [[asset valueForProperty:ALAssetPropertyOrientation] intValue];
在这种情况下,orientation
总是0,也就是ALAssetOrientationUp
。也许这是意料之中的,所有的视频都是正确的,但肖像视频在MPEG-4中表示为旋转90度的风景视频(即所有的视频实际上都是风景,如果你不相信我,试试Mac上的MediaInfo应用程序)。
文件中的什么位置和/或我如何访问信息,这些信息告诉我它实际上是在纵向拿着手机时录制的?
我也尝试过这样做,给定资产的URL:
AVURLAsset *avAsset = [[AVURLAsset alloc] initWithURL:url options:nil];
CGSize size = [avAsset naturalSize];
NSLog(@"size.width = %f size.height = %f", size.width, size.height);
CGAffineTransform txf = [avAsset preferredTransform];
NSLog(@"txf.a = %f txf.b = %f txf.c = %f txf.d = %f txf.tx = %f txf.ty = %f",
txf.a, txf.b, txf.c, txf.d, txf.tx, txf.ty);
这总是产生宽度〉高度,因此对于iPhone 4,宽度=1280高度=720,变换a和d值为1.0
,其他值为0.0
,无论捕获方向如何。
我已经用Mac上的MediaInfo应用程序查看了 meta数据,我做了一个Hexdump,到目前为止还没有发现横向和纵向视频之间有任何区别。但QuickTime知道并垂直显示纵向视频,如果你在播放时以横向方向拿着手机,手机会通过旋转纵向视频来知道,如果你以纵向方向拿着手机,手机会正确显示它。
顺便说一句,我不能使用ffmpeg
(不能与许可证限制生活)。有一个iPhone SDK原生的方式来做到这一点?
9条答案
按热度按时间vwhgwdsa1#
根据前面的答案,您可以使用以下方法确定视频方向:
jljoyd4f2#
有人在苹果开发者论坛上建议转换视频轨道,这就完成了工作,你可以从下面的日志中看到,对于这些方向,结果是有意义的,我们的网络开发者现在能够旋转各种视频,使它们都匹配并合成为一个视频。
日志使用4 iPhone 4视频与正常凸轮:(1)横向摄像头在右侧(主页按钮在左侧)(2)横向左(3)纵向倒置(4)纵向右上(主页按钮在底部)
传输x f.d = 1.000000传输x f.传输x = 0.000000
运输量= 0.000000
运输因子d = 0.000000运输因子tx = 0.000000运输因子ty = 1280.000000
运输因子d = 0.000000运输因子tx = 720.000000运输因子ty = 0.000000
fcipmucu3#
在我的用例中,我只需要知道视频是纵向的还是横向的。
这已经用前置和后置摄像头进行了测试,适用于所有方向。
tjrkku2a4#
AV资产图像生成器
如果您使用
AVAssetImageGenerator
从AVAssets
生成图像,您只需将AVAssetImageGenerator
的.appliesPreferredTrackTransform
属性设置为true
,它将以正确的方向从资产返回图像!:)雨燕3号
但要扩展@onmyway133在Swift 3中的回答:
zazmityj5#
如果您不想使用AVFoundation Framework来获取录制视频的方向,请尝试一下
mcvgt66p6#
虽然这里有几个答案是正确的,但它们并不全面。例如,你可能还需要知道使用哪种相机设备来应用适当的变换。我创建了一个要点来做这件事;提取UI接口方向和AV捕获设备位置。
Extract AVAsset Orientation and Camera Position
6rqinv9w7#
syqv5f0l8#
对Swift 2中乔治回答的扩展
UIInterfaceOrientation
与UIImageOrientation
相同ha5z0ras9#
在swift 5中尝试此操作