【问题标题】:optimizing ffmpeg in windows platform for processing with web-cam优化 Windows 平台中的 ffmpeg 以使用网络摄像头进行处理
【发布时间】:2013-08-22 04:09:32
【问题描述】:

我必须在 java 中开发一个从网络摄像头捕获帧的工具,现在我所做的是,我使用 Runtime 类来运行 ffmpeg 和其他命令,当它开始从我的网络摄像头捕获帧时, 我正在使用以下方法。

public class FFMPEGClass {

    private String ffmpegExeLocation, line;
    private final String FRAME_DIGITS = "010";

    public FFMPEGClass(String capturingDName, String outputImagesLocation, int framesPerSecond) {
        ffmpegExeLocation = System.getProperty("user.dir") + "\\bin\\";
        System.out.println(ffmpegExeLocation);
        try {            
            System.out.println(ffmpegExeLocation + "ffmpeg -t 100000 "
                    + "-f vfwcap -s 640x480 -i 0 -r 1/" + framesPerSecond + " -f image2 " + outputImagesLocation + "\\camera%"+FRAME_DIGITS+"d.jpg");
            Process pp = Runtime.getRuntime().exec(ffmpegExeLocation + "ffmpeg -t 100000 "
                    + "-f vfwcap -s 640x480 -i 0 -r 1/" + framesPerSecond + " -f image2 " + outputImagesLocation + "\\camera%"+FRAME_DIGITS+"d.jpg");
            BufferedReader br = new BufferedReader(new InputStreamReader(pp.getErrorStream()));
            while((line = br.readLine()) != null){
                 System.out.println(line);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

在我的例子中 capturingDNameUSB2.0 UVC VGA WebCam
outputImagesLocatione:\myfolder\frames\
framesPerSecond10

此代码运行良好,但无法高效抓帧,换句话说我想说它的处理速度很慢,谁能告诉我如何优化它,以便它可以非常快速地抓帧。

我有 Intel Core i3 处理器和 6 GB RAM

我已经检查了许多来自 google 和 stackoverflow 的答案,但这些都不适用于我的情况

【问题讨论】:

  • 反对的选民,或者希望结束这个问题的人,请把你的cmets。

标签: java ffmpeg video-streaming webcam video-processing


【解决方案1】:

如果你使用 10 fro frameperseconds,下面的调用

Process pp = Runtime.getRuntime().exec(ffmpegExeLocation + "ffmpeg -t 100000 "
                    + "-f vfwcap -s 640x480 -i 0 -r 1/" + framesPerSecond + " -f image2 " + outputImagesLocation + "\\camera%"+FRAME_DIGITS+"d.jpg");

将扩展为:

ffmpeg -t 100000 -f vfwcap -s 640x480 -i 0 -r 1/10 -f image2 output%05d.jpg

您使用-r选项的方式是错误的(请参阅ffmpeg doc),如果您想要每秒10帧,请更新您的代码以删除小数!

Process pp = Runtime.getRuntime().exec(ffmpegExeLocation + "ffmpeg -t 100000 "
                        + "-f vfwcap -s 640x480 -i 0 -r " + framesPerSecond + " -f image2 " + outputImagesLocation + "\\camera%"+FRAME_DIGITS+"d.jpg");

【讨论】:

  • 我正在使用您提供的代码,但是当我第一次使用它时,它并没有打开网络摄像头进行处理,
  • “第一次”是什么意思?这是否意味着另一个(第二次)运行工作?您可以从程序中测试命令行并使用终端输出的副本更新您的问题(查看 ffmpeg 版本等...)吗?
  • 当我使用您建议的命令运行代码时,我使用 netbeans 作为 IDE,然后它会打开一个简单的系统调用,要求从下拉列表中选择网络摄像头,但它不会打开网络摄像头。
  • 我收到此错误检查此链接以获取错误快照 (dropbox.com/s/pkmeel8xhpsg7l3/error.png)
  • 列出您的设备并查看您拥有的设备:ffmpeg -y -f vfwcap -i list
猜你喜欢
  • 2020-10-15
  • 2017-12-27
  • 2018-07-05
  • 1970-01-01
  • 2010-09-18
  • 2011-09-10
  • 1970-01-01
  • 2018-04-27
  • 1970-01-01
相关资源
最近更新 更多