【问题标题】:Flip video horizontally on x- axis in objective c在物镜 c 的 x 轴上水平翻转视频
【发布时间】:2019-01-02 11:46:42
【问题描述】:

我有两个在一个视图上同时播放两个视频。两个视频都是一样的。

现在,我担心的是右边的视频实际上是要沿 x 轴水平翻转,然后保存在照片库中。我尝试了很多谷歌搜索,发现 CGAFFineRotateTransform 可以提供帮助,但我无法使用它我的代码。请帮助我水平翻转视频,同时保持比例和移动不变。

在此方向上的任何帮助或指导都将不胜感激。提前致谢!

Check the difference between video on left and right,video on left is complete but video on right is showing half video only

【问题讨论】:

    标签: ios avfoundation avvideocomposition


    【解决方案1】:

    要仅水平翻转(镜像)视频,请使用负 x 值进行缩放:

    CGAffineTransform scale = CGAffineTransformMakeScale( -1.0, 1.0);
    

    编辑:关于如何定位轨道的更一般性问题:对于涉及的每个视频轨道:

    • 根据轨道的原始大小构建边界矩形 - 这是源矩形
    • 问问自己轨道应该在哪里结束,就结果视频的来源和大小而言 - 这会给你目标 rect

    然后您可以使用如下函数导出相应的仿射变换:

    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 中我特意选择从单位矩阵开始,然后逐一添加所需的变换。这样可以构建更复杂的变换,包括旋转。正如我所说,尝试掌握仿射变换,它们真的很强大
    • AVAssetTracks naturalSize 有时会为某些具有复杂 SAR/PAR 定义的视频返回令人困惑的结果。为了证明这一点,您必须从相应格式说明中的尺寸得出尺寸,但这是一个全新的话题......

    【讨论】:

    • 但是当我使用这个代码时,视频变小了,就像上面附加的新图片一样。
    • 好吧,您只是要求镜像,没有说明为什么还要缩放轨道,尤其是为什么沿轴不均匀地缩放,以及为什么在两个视频轨道。您可能应该花一些时间来理解仿射变换背后的概念以及如何使用它们,尤其是在串联方面。
    • 这段代码很好地反映了......我是第一次这样做......我已经完成了缩放,只是为了将左视频保持在视图的一半,右视频保持在另一半,并且具有指定的大小.保持相同的值,它没有在屏幕上平均显示视频。如果,我错了......请给予一些指导。感谢您的宝贵时间。
    猜你喜欢
    • 2021-12-04
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 2010-12-19
    • 2022-11-14
    相关资源
    最近更新 更多