Android FFmpegFrameGrabber每次为视频提供相同的帧
我试图在Android中使用JavaCV的FFmpegFrameGrabber从视频中提取帧,并获得每个帧的平均颜色。我的输出为所有帧提供了相同的颜色,考虑到我正在处理的视频类型,情况不应该如此。我不知道为什么我得到的所有颜色都是一样的。请帮我解决这个问题Android FFmpegFrameGrabber每次为视频提供相同的帧,android,video,javacv,frames,Android,Video,Javacv,Frames,我试图在Android中使用JavaCV的FFmpegFrameGrabber从视频中提取帧,并获得每个帧的平均颜色。我的输出为所有帧提供了相同的颜色,考虑到我正在处理的视频类型,情况不应该如此。我不知道为什么我得到的所有颜色都是一样的。请帮我解决这个问题 private ArrayList<Bitmap> getFrames(){ try { String path = "/storage/emulated/0/pulse.mp4";
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 getFrames(){
试一试{
字符串路径=“/storage/simulated/0/pulse.mp4”;
InputStream InputStream=新文件InputStream(路径);
ArrayList bitmapArray=新的ArrayList();
bitmapArray.clear();
FFmpegFrameGrabber grabber=新的FFmpegFrameGrabber(路径);
AndroidFrameConverter converterToBitMap=新的AndroidFrameConverter();
grabber.start();
整数计数=0;
框架;
while(true){
frame=grabber.grabFrame();
if(frame==null){
打破
}
if(frame.image==null){
继续;
}
计数++;
Log.i(“帧”、“循环编号”+计数);
位图Bitmap=converterToBitMap.convert(帧);
添加(位图);
}
返回位图数组;
}捕获(例外e){
Log.e(“帧错误:,e.toString());
System.out.println(例如toString());
}
返回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;
}
private ArrayList getAverageColorArray(){
ArrayList bitmapArrayList=getFrames();
ArrayList avgColorArr=新的ArrayList();
长红桶=0;
长绿桶=0;
长蓝袋鼠=0;
长像素计数=0;
用于(位图b:bitmapArrayList){
对于(int y=0;y