我正在尝试裁剪视频,这是用iPhone相机拍摄的,然后将其放在UIImageView上。我一直在关注这个问题如何在iOS中将视频裁剪为圆圈?我现在可以拍摄视频并将其置于另一个以前录制过的视频之上。现在我希望背景为图像,前景为裁剪视频。我现在的主要问题是在我想裁剪的部分裁剪视频。我不能在这里发布所有代码,但这里是github repo的地方,修改的类叫做CustomVideoCompositor.m https://github.com/mayoff/stackoverflow-28258270-video-in-oval-on-video/tree/master/video。我无法将其编辑成我想要的圆形,我希望它是一个椭圆形,位于下半部分,而不是更宽的部分。
修改
我想进行剪切,以便只有圆角矩形的这一部分中的东西才会被裁剪和可用。
答案 0 :(得分:2)
如果您只想要裁剪视频的视觉效果而不修改视频文件,则只需在视频图层中添加遮罩即可。我的意思是CALayer mask
属性。
您可以像这样创建圆形遮罩:绘制黑色矩形,然后在其上绘制透明圆圈。
答案 1 :(得分:1)
您需要使用AVPlayer,因为这样您就可以一次播放多个视频,或者让您的视频显示在另一个视图的顶部。此外,通过使用AVPlayer和AVPlayerLayer,它很容易使视频显示为圆形。 (这是一个很好的教程,可以了解更多信息:http://jacopretorius.net/2013/02/playing-video-in-ios.html)
这是代码(针对Objective-C):
在您的视图控制器.h文件中:
#import <AVFoundation/AVFoundation.h>
然后在viewDidLoad
:
[super viewDidLoad];
// Set up the image view first (the imageView is an IBOutlet)
self.imageView.image = [UIImage imageNamed:@"image"];
self.imageView.alpha = 0.2;
NSURL *url = [[NSBundle mainBundle] URLForResource:@"video" withExtension:@"mp4"];
AVPlayer *player = [AVPlayer playerWithURL:url];
CGFloat diameter = MIN(self.view.frame.size.width, self.view.frame.size.height) * 0.8;
AVPlayerLayer *layer = [AVPlayerLayer playerLayerWithPlayer:player];
layer.videoGravity = AVLayerVideoGravityResizeAspectFill;
layer.frame = CGRectMake((self.view.frame.size.width - diameter) / 2,
(self.view.frame.size.height - diameter) / 2,
diameter, diameter);
layer.cornerRadius = diameter / 2;
layer.masksToBounds = YES;
// Put the AVPlayerLayer on top of the image view.
[self.view.layer addSublayer:layer];
[player play];