缩放和旋转后合并视频 objective C
Combine videos after scale and rotate objective C
这是我的问题:我想生成一个包含多个视频片段的视频。
对于使用后置摄像头创建的视频,一切正常,但是当我尝试介绍来自自拍相机的视频时,我的屏幕有一半是黑色的。
这是我用来旋转、缩放、重新居中视频的代码。我想我也必须应用其他转换,但我找不到什么..
CGAffineTransform orientationTransform = videoAssetTrack.preferredTransform;
CGSize naturalSize = CGSizeApplyAffineTransform(videoAssetTrack.naturalSize, orientationTransform);
naturalSize.width = fabs(naturalSize.width);
naturalSize.height = fabs(naturalSize.height);
// Make sure the video is transformed properly - Apply Aspect Fill
float scale = naturalSize.width < naturalSize.height ? _renderSize.width / naturalSize.width : _renderSize.height / naturalSize.height;
CGPoint recenter;
recenter.x = (_finalSize.width - naturalSize.width * scale) * 0.5;
recenter.y = (_finalSize.height - naturalSize.height * scale) * 0.5;
// If orientationTransform rotated the video in a way that changed the orientation, switch recenter
if ((videoAssetTrack.naturalSize.width > videoAssetTrack.naturalSize.height) != (naturalSize.width > naturalSize.height)) {
typeof(recenter.x) temp = recenter.x;
recenter.x = recenter.y;
recenter.y = temp;
}
CGAffineTransform transform = CGAffineTransformConcat(CGAffineTransformConcat(CGAffineTransformMakeScale(scale, scale), CGAffineTransformMakeTranslation(recenter.x, recenter.y)), orientationTransform);
[layerInstruction setTransform:transform atTime:timeOffset];
您需要分别对纵向和横向进行变换。
这是我的问题:我想生成一个包含多个视频片段的视频。 对于使用后置摄像头创建的视频,一切正常,但是当我尝试介绍来自自拍相机的视频时,我的屏幕有一半是黑色的。 这是我用来旋转、缩放、重新居中视频的代码。我想我也必须应用其他转换,但我找不到什么..
CGAffineTransform orientationTransform = videoAssetTrack.preferredTransform;
CGSize naturalSize = CGSizeApplyAffineTransform(videoAssetTrack.naturalSize, orientationTransform);
naturalSize.width = fabs(naturalSize.width);
naturalSize.height = fabs(naturalSize.height);
// Make sure the video is transformed properly - Apply Aspect Fill
float scale = naturalSize.width < naturalSize.height ? _renderSize.width / naturalSize.width : _renderSize.height / naturalSize.height;
CGPoint recenter;
recenter.x = (_finalSize.width - naturalSize.width * scale) * 0.5;
recenter.y = (_finalSize.height - naturalSize.height * scale) * 0.5;
// If orientationTransform rotated the video in a way that changed the orientation, switch recenter
if ((videoAssetTrack.naturalSize.width > videoAssetTrack.naturalSize.height) != (naturalSize.width > naturalSize.height)) {
typeof(recenter.x) temp = recenter.x;
recenter.x = recenter.y;
recenter.y = temp;
}
CGAffineTransform transform = CGAffineTransformConcat(CGAffineTransformConcat(CGAffineTransformMakeScale(scale, scale), CGAffineTransformMakeTranslation(recenter.x, recenter.y)), orientationTransform);
[layerInstruction setTransform:transform atTime:timeOffset];
您需要分别对纵向和横向进行变换。