ffmpeg在java退出之前不会开始

时间:2014-08-09 15:50:20

标签: java ffmpeg runtime wait

我正在尝试创建一个java程序,它自动将输入文件夹中的wtv文件转换为输出文件夹中的mpg文件。扭曲是我定期运行它,因此它充当同步器。

以下代码适用于将.wtv转换为.dvr-ms,这是ffmpeg所必需的,因为它无法直接转换.wtv文件。

    Process p = Runtime.getRuntime().exec("C:\\Windows\\ehome\\WTVConverter C:\\Users\\Andrew\\Desktop\\test\\input\\input.wtv C:\\Users\\Andrew\\Desktop\\test\\output\\input.dvr-ms");
    p.waitFor();

WTVConverter从java应用程序运行没有问题。 ffmpeg是一个不同的故事。一旦上面一行运行,我就运行这个......

    Process p = Runtime.getRuntime().exec("ffmpeg\\bin\\ffmpeg -y -i \"C:\\Users\\Andrew\\Desktop\\test\\output\\input.dvr-ms'" -vcodec copy -acodec copy -f dvd \"C:\Users\Andrew\Desktop\test\output\input.mpg\"");
    p.waitFor();

突然,出现问题......应用程序ffmpeg显示在任务管理器中,但它的cpu使用率为0,并且没有生成mpeg文件。但是,如果我强制关闭java应用程序,它会突然开始工作!咦?

命令行应用程序在执行之前等待其调用应用程序退出的原因是什么?我没有令人难以置信的命令行精明,所以我真的不知道如何诊断这个问题。

1 个答案:

答案 0 :(得分:1)

呸,这总是发生。我发了一个问题,然后我就自己解决了。事实证明,ffmpeg希望你在加载每一帧之前读入它的文本输出。如果调用程序不这样做,它只是等待。如果没有调用程序,我认为它只是无处输出。我所做的是像往常一样运行程序,但也从过程的输入流中读取文本,如此......

    Process p = Runtime.getRuntime.exec(".....");
    final Scanner in = new Scanner(p.getInputStream());
    new Thread()
    {
        @Override
        public void run()
        {
            System.out.println(in.nextLine());
        }
    }.start();

经验教训,我想。