如何获取和使用JavaCV从网络摄像头录制视频(How to capture and record

2019-08-04 22:25发布

我是新来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也许将是对我更有用。

Answer 1:

它已经相当的旅程。 那我不知道什么是他们背后的含义,但这里是捕捉和利用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\binEnviorment variable PATH ,这一切。 关于这一步的所有学分去karlphillip

和他的岗位在这里



文章来源: How to capture and record video from webcam using JavaCV