在安卓系统中,如何翻转前置摄像头拍摄的视频以达到镜像效果?

3
我有一个相机应用程序,可以拍摄照片和录制视频。但是,当使用设备的前置摄像头拍摄照片或录制视频时,结果会翻转,就像您在照镜子一样。我想再次翻转它,使其看起来正常。我通过使用MatrixBitmap翻转来实现了图片翻转。
   public Bitmap flip(Bitmap bitmap) {
        int w = bitmap.getWidth();
        int h = bitmap.getHeight();
        Matrix matrix = new Matrix();
        float[] mirrorY = {-1, 0, 0, 0, 1, 0, 0, 0, 1};
        Matrix matrixMirrorY = new Matrix();
        matrixMirrorY.setValues(mirrorY);
        matrix.postConcat(matrixMirrorY);
        matrix.postRotate(90);
        return Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true);
    }

我无法弄清如何翻转MediaRecorder拍摄的视频,我知道可以运行ffmpeg命令:

-i /pathtooriginalfile/originalfile.mp4 -vf hflip -c:a copy /pathtosave/flippedfile.mp4

但我不知道如何在代码中运行ffmpeg命令,也找不到其他方法。有很多讨论这个问题的主题,但我找不到解决方法。注意:这是可能的,Snapchat 以某种方式使其工作。

谢谢。

P.S 对我的英语表示抱歉。


嗨,你解决了这个问题吗?谢谢。 - dangling_refrenz
@dangling_refrenz 没有,我在这个帖子和我在这里得到的答案之后从未尝试解决这个问题,无论如何祝你好运。 - DAVIDBALAS1
@DAVIDBALAS1 我也遇到了同样的问题。你找到解决方法了吗? - Piyush
1个回答

0

使用前置摄像头捕获图像或录制视频时,始终会得到翻转的图像,这是预期的,因为前置摄像头的工作方式就像你在照镜子一样。

从相机获取图片后,通过将图像绘制到新上下文中将图像翻转回来。

请尝试以下代码片段。参考Android- Taking a picture from front facing camera rotates the photo

Matrix rotateRight = new Matrix();
rotateRight.preRotate(90);

if(android.os.Build.VERSION.SDK_INT>13 && CameraActivity.frontCamera) {
    float[] mirrorY = { -1, 0, 0, 0, 1, 0, 0, 0, 1};
    rotateRight = new Matrix();
    Matrix matrixMirrorY = new Matrix();
    matrixMirrorY.setValues(mirrorY);

    rotateRight.postConcat(matrixMirrorY);

    rotateRight.preRotate(270);

}

final Bitmap rImg= Bitmap.createBitmap(img, 0, 0,
                img.getWidth(), img.getHeight(), rotateRight, true);

你无法直接翻转视频,必须重写 onPreviewFrame() 回调函数并在写入缓冲区之前翻转每一帧。 - Daud Arfin
好的,谢谢。我想这会花费太长时间了。 - DAVIDBALAS1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接