我是 JavaCV 新手,我很难找到关于我感兴趣的主题的不同问题的好教程。我已经成功地从我的网络摄像头实现了某种实时视频流,但问题是我使用我在网上找到的这段代码片段:
@Override
public void run() {
FrameGrabber grabber = new VideoInputFrameGrabber(0); // 1 for next
// camera
int i = 0;
try {
grabber.start();
IplImage img;
while (true) {
img = grabber.grab();
if (img != null) {
cvFlip(img, img, 1);// l-r = 90_degrees_steps_anti_clockwise
cvSaveImage((i++) + "-aa.jpg", img);
// show image on window
canvas.showImage(img);
}
这会产生多个 jpg 文件。
我真正想做的是捕获我的网络摄像头输入,并在显示它的同时将其保存在正确的视频文件中。我了解到FFmpegFrameRecorder
但不知道如何实施。另外我一直想知道视频文件格式有哪些不同的选项,因为flv
也许对我来说更有用。
这是一段相当长的旅程。还有一些事情我不确定它们背后的含义,但这里有一个使用 JavaCV 从网络摄像头捕获和录制视频的工作示例:
import com.googlecode.javacv.CanvasFrame;
import com.googlecode.javacv.FFmpegFrameRecorder;
import com.googlecode.javacv.OpenCVFrameGrabber;
import com.googlecode.javacv.cpp.avutil;
import com.googlecode.javacv.cpp.opencv_core.IplImage;
public class CameraTest {
public static final String FILENAME = "output.mp4";
public static void main(String[] args) throws Exception {
OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
grabber.start();
IplImage grabbedImage = grabber.grab();
CanvasFrame canvasFrame = new CanvasFrame("Cam");
canvasFrame.setCanvasSize(grabbedImage.width(), grabbedImage.height());
System.out.println("framerate = " + grabber.getFrameRate());
grabber.setFrameRate(grabber.getFrameRate());
FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(FILENAME, grabber.getImageWidth(),grabber.getImageHeight());
recorder.setVideoCodec(13);
recorder.setFormat("mp4");
recorder.setPixelFormat(avutil.PIX_FMT_YUV420P);
recorder.setFrameRate(30);
recorder.setVideoBitrate(10 * 1024 * 1024);
recorder.start();
while (canvasFrame.isVisible() && (grabbedImage = grabber.grab()) != null) {
canvasFrame.showImage(grabbedImage);
recorder.record(grabbedImage);
}
recorder.stop();
grabber.stop();
canvasFrame.dispose();
}
}
对我来说,完成这项工作有点困难,因此除了那些可能有相同问题的人之外,如果您遵循有关如何在 Windows 7/64 位上设置 JavaCV 的官方指南,并且想要使用上面的代码捕获视频,您应该创建中的一个新目录C:\
: C:\ffmpeg
并从中提取文件ffmped
官方指南中要求您下载的版本。那么你应该添加C:\ffmpeg\bin
给你的Enviorment variable PATH
就这样。关于此步骤,所有学分都转到卡尔·菲利普 https://stackoverflow.com/users/176769/karlphillip
和他的帖子here https://stackoverflow.com/questions/10790613/javacv-unsatisfiedlinkerror-in-windows-7
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)