我有两个在视图上同时播放两个视频。两个视频都相同。
现在,我担心的是右侧的视频实际上是沿x轴水平翻转然后保存在照片库中。我尝试了很多搜索,发现CGAFFineRotateTransform可以提供帮助,但我无法在我的代码。请帮助我将视频水平水平翻转,同时保持比例不变并保持不变。
在此方向上的任何帮助或指导都是可取的。谢谢!!
答案 0 :(得分:0)
要水平翻转视频(镜像),请使用负x值进行缩放:
CGAffineTransform scale = CGAffineTransformMakeScale( -1.0, 1.0);
编辑:关于您如何定位轨道的更一般的问题:对于涉及的每个视频轨道:
然后,您可以使用以下函数来导出相应的仿射变换:
CGAffineTransform NHB_CGAffineTransformMakeRectToRect( CGRect srcRect, CGRect dstRect)
{
CGAffineTransform t = CGAffineTransformIdentity;
t = CGAffineTransformTranslate( t, dstRect.origin.x - fmin( 0., dstRect.size.width), dstRect.origin.y - fmin( 0., dstRect.size.height));
t = CGAffineTransformScale( t, dstRect.size.width / srcRect.size.width, dstRect.size.height / srcRect.size.height);
return t;
}
要进行镜像,请为相应的轴提供一个负尺寸(- fmin(,)
部分将补偿偏移量。)
给出一个视频轨道,并假设该轨道应镜像到640x480视频的右半部分,您可以使用以下方法获得相应的变换:
CGSize srcSize = videoTrack.naturalSize;
CGRect srcRect = CGRectMake( 0, 0, srcSize.width, srcSize.height);
CGRect dstRect = CGRectMake( 320, 0, -320, 480);
CGAffineTransform t = NHB_CGAffineTransformMakeRectToRect(srcRect, dstRect);
当然,这可能会拉伸视频轨道;为了保持宽高比,在计算目标矩形时必须考虑源尺寸。
一些评论:
NHB_CGAffineTransformMakeRectToRect
中,我故意选择从单位矩阵开始,然后一一添加所需的变换。这样,可以构建更复杂的变换,包括旋转。正如我所说,尝试掌握仿射变换,它们确实功能强大AVAssetTrack
的{{1}}对于某些具有复杂SAR / PAR定义的视频有时会返回令人困惑的结果。为了证明这一点,您必须从相应格式说明中的尺寸中得出尺寸,但这是一个全新的主题...