【java】视频拼接

286 阅读1分钟

把多个视频合并成一个

  1. 需要先安装 软件 ffmpeg,需要注意windows跟linux区别。相当于通过java执行命令,操作ffmpeg合并视频。
  2. java代码 先把文件路径写到txt文件中(不写txt里也行,命令里拼文件地址就行)
public static void writeTxt(String name,List<String> values){
    try {
        File writename = new File(name+".txt"); // 相对路径,如果没有则要建立一个新的output。txt文件
        writename.createNewFile(); // 创建新文件
        BufferedWriter out = new BufferedWriter(new FileWriter(writename));
        for (String v : values){
            out.write("file '"+v+"'\r\n"); // \r\n即为换行
        }
        out.flush(); // 把缓存区内容压入文件
        out.close(); // 最后记得关闭文件
    }catch (Exception e){
        e.printStackTrace();
    }
}

传入文件地址txt,输出的文件地址

/**
 * 合并多个Avi文件
 * @param txtPath 待合并的文件每行一个保存的txt文件里
 * @param outPath 合并后的avi保存路径
 */
public static void mergeAvis(String txtPath,String outPath){
    System.out.println("merge:"+txtPath+"   "+outPath);
    List<String> commend = new ArrayList<>();
    //下面写成G:\ffmpeg-6.1.1-essentials_build\bin\ffmpeg 这样是因为windows中调用有时候找不到ffmpeg
    commend.add("G:\ffmpeg-6.1.1-essentials_build\bin\ffmpeg");
    commend.add("-f");//合成音视频
    commend.add("concat");
    commend.add("-safe");
    commend.add("0");
    commend.add("-i");
    commend.add(txtPath);
    commend.add("-c");
    commend.add("copy");
    commend.add(outPath);

    try {
        ProcessBuilder builder = new ProcessBuilder(commend);
        builder.command(commend);
        Process p = builder.start();
        doWaitFor(p);
        p.destroy();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

调用方法

    public static void main(String[] args) {
        mergeAvis("C:\Users\FangYang\Videos\合并目录.txt", "C:\Users\FangYang\Videos\test.avi");
    }