把多个视频合并成一个
- 需要先安装 软件 ffmpeg,需要注意windows跟linux区别。相当于通过java执行命令,操作ffmpeg合并视频。
- 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");
}