在Android

时间:2016-08-05 01:49:50

标签: android ffmpeg

我有一个能够捕捉图像和录制视频的相机应用程序。但是,当从设备前置摄像头捕获图像或录制视频时,结果会翻转,就像您正在看镜子一样。我想再翻一遍,看起来很正常。我设法通过使用Bitmap

翻转Matrix来处理图片
   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抱歉我的英文

1 个答案:

答案 0 :(得分: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);