拍摄的时候是竖屏,结果添加水印之后导出是横屏播放了。或者还是竖屏播放但是画面颠倒等等视频方向不对,那该怎么办呢?先确认视频角度:
+ (NSUInteger)degressFromVideoFileWithURL:(NSURL *)url {
NSUInteger degress = 0;
AVAsset *asset = [AVAsset assetWithURL:url];
NSArray *tracks = [asset tracksWithMediaType:AVMediaTypeVideo];
if([tracks count] > 0) {
AVAssetTrack *videoTrack = [tracks objectAtIndex:0];
CGAffineTransform t = videoTrack.preferredTransform;
if(t.a == 0 && t.b == 1.0 && t.c == -1.0 && t.d == 0){
// Portrait
degress = 90;
}else if(t.a == 0 && t.b == -1.0 && t.c == 1.0 && t.d == 0){
// PortraitUpsideDown
degress = 270;
}else if(t.a == 1.0 && t.b == 0 && t.c == 0 && t.d == 1.0){
// LandscapeRight
degress = 0;
}else if(t.a == -1.0 && t.b == 0 && t.c == 0 && t.d == -1.0){
// LandscapeLeft
degress = 180;
}
}
return degress;
}
如果只是用来预览录制的视频,只需要更改GPUImageView的方向。
switch (_degress) {
case 90:
[filterView setInputRotation:kGPUImageRotateRight atIndex:0];
break;
case 180:
[filterView setInputRotation:kGPUImageRotate180 atIndex:0];
break;
case 270:
[filterView setInputRotation:kGPUImageRotateLeft atIndex:0];
break;
default:
break;
}
如果需要预览同时点击滤镜切换滤镜,那么设置滤镜的方向即可,不用去改GPUImageView的方向。
-(void)setRotaionForFilter:(GPUImageOutput<GPUImageInput>*)filter{
if(_degress==90){
[filter setInputRotation:kGPUImageRotateRight atIndex:0];
}
else if (_degress==180){
[filter setInputRotation:kGPUImageRotate180 atIndex:0];
}
else if (_degress==270){
[filter setInputRotation:kGPUImageRotateLeft atIndex:0];
}
}
另外,如果使用GPUImageMovieWriter录制视频,方向可以这样设定:
[movieWriter startRecordingInOrientation:CGAffineTransformMakeRotation(_degress/180.0*M_PI)];
其他文章请查看个人博客:http://zhangqq166.cn/
本文提供了解决拍摄视频方向错误的方法,包括如何通过检测视频文件的角度并调整GPUImageView或滤镜的方向来修正视频方向,适用于竖屏拍摄后出现的横屏播放或画面颠倒等问题。
9544

被折叠的 条评论
为什么被折叠?



