FFmpegFrameGrabber每次为视频提供相同的帧

问题描述

我正在尝试使用Android中JavaCV的FFmpegFrameGrabber从视频中提取帧并获取每个帧的平均颜色。我的输出为我提供了所有帧相同的颜色,考虑到我正在处理的视频类型,情况则不会如此。我不能说为什么我在 avgColorArr 中获得所有相同的颜色。请帮我解决这个问题。

private ArrayList<Bitmap> getFrames(){
    try {
        String path = "/storage/emulated/0/pulse.mp4";
        InputStream inputStream = new FileInputStream(path);
        ArrayList<Bitmap> bitmapArray = new ArrayList<>();
        bitmapArray.clear();
        FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(path);
        AndroidFrameConverter converterToBitMap = new AndroidFrameConverter();
        grabber.start();
        int count = 0;
        Frame frame;
        while(true){
            frame = grabber.grabFrame();
            if (frame == null) {
                break;
            }
            if (frame.image == null) {
                continue;
            }
            count++;
            Log.i("frame","loop number" + count);
            Bitmap bitmap = converterToBitMap.convert(frame);
            bitmapArray.add(bitmap);
        }
        return bitmapArray;
    } catch(Exception e) {
        Log.e("frame error: ",e.toString());
        System.out.println(e.toString());
    }
    return null;
}

对于平均颜色

private ArrayList<Integer> getAverageColorArray(){
    ArrayList<Bitmap> bitmapArrayList = getFrames();
    ArrayList<Integer> avgColorArr = new ArrayList<Integer>();
    long redBucket = 0;
    long greenBucket = 0;
    long blueBucket = 0;
    long pixelCount = 0;
    for(Bitmap b: bitmapArrayList){
        for (int y = 0; y < b.getHeight(); y++) {
            for (int x = 0; x < b.getWidth(); x++) {
                int c = b.getPixel(x,y);
                pixelCount++;
                redBucket += Color.red(c);
                greenBucket += Color.green(c);
                blueBucket += Color.blue(c);
            }
        }
        int red = (int)(redBucket / pixelCount);
        int green = (int)(greenBucket / pixelCount);
        int blue = (int)(blueBucket / pixelCount);
        int avgColor = Color.rgb(red,green,blue);
        avgColorArr.add(avgColor);
    }
    return avgColorArr;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)