首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >)_错误(是否调用了javacv ()?javacv

)_错误(是否调用了javacv ()?javacv
EN

Stack Overflow用户
提问于 2015-01-18 19:24:52
回答 1查看 2.7K关注 0票数 2

嗨,我正在制作用javacv录制视频和音频的程序,但我得到了一些错误。有什么建议吗?

lib版本: jdk 1.8 javacv 0.8 opencv 2.4.9

代码语言:javascript
运行
复制
Exception in thread "main" org.bytedeco.javacv.FrameGrabber$Exception: avformat_open_input() error -2: Could not open input "output.mp4". (Has setFormat() been called?)
    at org.bytedeco.javacv.FFmpegFrameGrabber.startUnsafe(FFmpegFrameGrabber.java:362)
    at org.bytedeco.javacv.FFmpegFrameGrabber.start(FFmpegFrameGrabber.java:312)
    at com.unomic.securobot.javacv.main(javacv.java:14)

我的代码

代码语言:javascript
运行
复制
FFmpegFrameGrabber grabber1 = new FFmpegFrameGrabber("output.mp4");
                FFmpegFrameGrabber grabber2 = new FFmpegFrameGrabber("test.mp3"); 
                grabber1.setFormat("mp4");
                grabber1.start(); 
                grabber2.start(); 
                FFmpegFrameRecorder recorder = new FFmpegFrameRecorder("outputFinal.mp4", 
                        grabber1.getImageWidth(), grabber1.getImageHeight(), 
                        grabber2.getAudioChannels()); 
                recorder.setFrameRate(grabber1.getFrameRate()); 
                recorder.setSampleFormat(grabber2.getSampleFormat()); 
                recorder.setSampleRate(grabber2.getSampleRate()); 

                recorder.start(); 
                Frame frame1;
                Frame  frame2 = null; 
                while ((frame1 = grabber1.grabFrame()) != null || 
                       (frame2 = grabber2.grabFrame()) != null) { 
                    recorder.record(frame1); 
                    recorder.record(frame2); 
                } 
                recorder.stop(); 
                grabber1.stop(); 
                grabber2.stop(); 
}
EN

回答 1

Stack Overflow用户

发布于 2017-02-22 15:42:20

我试着用帧捕获器从视频中获取缩略图。我得到了相同的错误,但我只是尝试给出文件的完整路径,瞧,它起作用了。以前,我使用的是不起作用的相对路径。当我给出完整的路径时,它开始工作了。

代码语言:javascript
运行
复制
package com.tape.controller;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.imageio.ImageIO;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.OpenCVFrameGrabber;

public class VideoThumbTaker {

    protected String ffmpegApp;

    public VideoThumbTaker(String ffmpegApp)
    {
        this.ffmpegApp = ffmpegApp;
    }

    public void getThumb(String videoFilename, String thumbFilename, int width, int height,int hour, int min, float sec)
      throws IOException, InterruptedException
    {
        ProcessBuilder processBuilder = new ProcessBuilder(ffmpegApp, "-y", "-i", videoFilename, "-vframes", "1",
    "-ss", hour + ":" + min + ":" + sec, "-f", "mjpeg", "-s", width + "*" + height, "-an", thumbFilename);
        Process process = processBuilder.start();
        InputStream stderr = process.getErrorStream();
        InputStreamReader isr = new InputStreamReader(stderr);
        BufferedReader br = new BufferedReader(isr);
        String line;
        while ((line = br.readLine()) != null);
        process.waitFor();
    }

    public static void main(String[] args) throws Exception, IOException
    {
         //Both case work

        FFmpegFrameGrabber g = new FFmpegFrameGrabber("C:\\JavaEE\\New Project\\tape\\src\\main\\webapp\\web-resources\\videos\\vid.mp4");
        g.setFormat("mp4");
        g.start();

        for (int i = 0 ; i < 50 ; i++) {
            ImageIO.write(g.grab().getBufferedImage(), "png", new File("C:\\JavaEE\\New Project\\tape\\src\\main\\webapp\\web-resources\\thumbnails\\video-frame-" + System.currentTimeMillis() + ".png"));
        }

         g.stop();
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28009139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档