Java 无法使用ffmpeg解析mp4文件

Java 无法使用ffmpeg解析mp4文件,java,ffmpeg,Java,Ffmpeg,我使用ffmpeg合并两个mp4文件,但不包括它们的音频;然而,尽管在许多其他帖子中遵循了格式,我还是无法让我的代码正常工作 //public variables public void test(){ String canonicalPath = new File(".").getCanonicalPath(); String ffmpegPath="/usr/bin/local/ffmpeg"; St

我使用ffmpeg合并两个mp4文件,但不包括它们的音频;然而,尽管在许多其他帖子中遵循了格式,我还是无法让我的代码正常工作

//public variables


public void test(){
        String canonicalPath = new File(".").getCanonicalPath();
        String ffmpegPath="/usr/bin/local/ffmpeg";
        String vidSectPath=canonicalPath.concat("/src/Video-Sections");
        String vidPath=canonicalPath.concat("/src/Videos");
        String tempA=vidSectPath+"/Earth.mp4";
        String tempB=vidSectPath+"/Waves.mp4";
        String tempVidPath=vidPath+"/tvp.mp4";

        String[]cmd1={ffmpegPath,"-i",tempA,"-i",tempB,"-filter_complex","[0:0][1:0]concat=n=2:v=1:a=0[out]","-map","[out]",tempVidPath};
        ProcessBuilder pb = new ProcessBuilder(cmd1);
        boolean exeCmdStatus = executeCMD(pb);
}
private boolean executeCMD(ProcessBuilder pb)
    {
     pb.redirectErrorStream(true);
     Process p = null;

     try {
      p = pb.start();

     } catch (Exception ex) {
     ex.printStackTrace();
     System.out.println("oops");
     p.destroy();
     return false;
    }
    // wait until the process is done
    try {
     p.waitFor();
    } catch (InterruptedException e) {
    e.printStackTrace();
    System.out.println("woopsy");
    p.destroy();
    return false;
    }
    return true;
     }
运行此代码后,我得到一个新的mp4文件,但mp4文件有0个字节,无法在任何媒体播放器中打开。我尝试将“-pix_fmt yuv420p”添加到cmd1中,但这似乎没有任何帮助

我还尝试使用concat demuxer方法,使cmd1 string[]变量等于:

ffmpegPath,"-f","concat","-i","-safe","0","/Users/JL/Documents/workspace/VidTest/src/concat.txt","-vcodec","copy",tempVidPath};
其中concat.txt的内容为

file '/Users/JL/Documents/workspace/VidTest/src/Video-Sections/Earth.mp4'
file '/Users/JL/Documents/workspace/VidTest/src/Video-Sections/MovWaves.mp4'
但是,此方法似乎无法创建连接的mp4文件


我不确定我的代码出了什么问题。我还使用mac来执行代码。

“运行此代码后,我会得到一个新的mp4文件,但mp4文件有0个字节”在将ffmpeg命令添加到代码之前,您是否确保它在命令行界面中运行正常?如果是,则显示ffmpeg进程的完整日志。我通过添加vsync 2解决了这个问题,新命令是String[]cmd={“ffmpeg”、“-vsync”、“2”、“-I”、tempPathA、“-I”、tempPathB、“-filter_complex”、“[0:v]scale=1024:576:force_original_aspect_ratio=1[v0];[1:v]scale=1024:576:force_original_aspect_ratio_ratio=1[v1];[v0][v0]concat=n=2:v=1][vv]“,tempVidPath};