Вы можете попробовать OpenCV.У меня есть функции для чтения и изменения видео файла, и он может открывать различные форматы.Он доступен для C ++, но не уверен, что он доступен для JAVA.Также он не будет анализировать аудио.
Вот пример моей реализации, которую я использую в своих проектах машинного зрения
.h файл
#ifndef _VPLAYER_H_
# define _VPLAYER_H_
# include#include #include #include "cv.h" #include "highgui.h"
class VPlayer {
public: VPlayer ();~ VPlayer ();
private:
CvCapture* pAvi;
IplImage* pFrame;
public: int Height;int Width;int fps;int numFrames;double CodecCode;
public:
bool LoadVideo(char * fname);
void GetFrame(int FrameNo);
void GetImage (IplImage* &pOutBuffer);
void GetProperties();
};
# endif
.cpp file
# include "stdafx.h "#include" VideoPlayer_PB_1.h "
bool VPlayer :: LoadVideo (char * fname) {
if(pAvi)cvReleaseCapture(&pAvi);
if(!(pAvi = cvCaptureFromAVI(fname)))return false;
GetProperties();
return true;
}
VPlayer :: VPlayer () {pAvi= 0;pFrame = 0;}
VPlayer :: ~ VPlayer () {
cvReleaseCapture(&pAvi);
}
void VPlayer :: GetFrame (int FrameNo) {
cvSetCaptureProperty(pAvi,CV_CAP_PROP_POS_FRAMES,FrameNo);
if(!cvGrabFrame(pAvi)){ // capture a frame
printf("Could not grab a frame\n\7");
exit(0);
}
pFrame = cvRetrieveFrame(pAvi);
}
void VPlayer :: GetImage (IplImage * & pOutBuffer) {
pOutBuffer = cvCloneImage(pFrame);
}
void VPlayer :: GetProperties () {if (pAvi) {cvQueryFrame (pAvi));// этот вызов необходим для получения правильных свойств захвата
Height = (int) cvGetCaptureProperty(pAvi, CV_CAP_PROP_FRAME_HEIGHT);
Width = (int) cvGetCaptureProperty(pAvi, CV_CAP_PROP_FRAME_WIDTH);
fps = (int) cvGetCaptureProperty(pAvi, CV_CAP_PROP_FPS);
numFrames = (int) cvGetCaptureProperty(pAvi, CV_CAP_PROP_FRAME_COUNT);
CodecCode = cvGetCaptureProperty(pAvi, CV_CAP_PROP_FOURCC);
}
}