3

私はJavaCVを初めて使用し、興味のあるトピックに関するさまざまな問題についての優れたチュートリアルを見つけるのに苦労しています。Webカメラからある種のリアルタイムビデオストリーミングを実装することに成功しましたが、問題は私がネットで見つけたこのコードスニペット:

@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ファイルが作成されます。

私が本当にやりたいのは、Webカメラの入力をキャプチャし、それを表示するとともに、適切なビデオファイルに保存することです。私はそれを知りましたFFmpegFrameRecorderが、それを実装する方法がわかりません。また、私はビデオファイルのフォーマットのさまざまなオプションは何であるか疑問に思っていましflvた。

4

1 に答える 1

4

それはかなりの旅でした。その背後にある意味がわからないことがまだいくつかありますが、JavaCVを使用してWebカメラからビデオをキャプチャおよび記録するための実用的な例を次に示します。

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。このステップについて、すべてのクレジットはkarlphillipに送られます

そして彼の投稿はここにあります

于 2012-12-29T12:26:59.763 に答える