1,引入需要的包
<dependency> <groupId>com.googlecode.mp4parser</groupId> <artifactId>isoparser</artifactId> <version>1.1.22</version> </dependency>
2,代码献上,希望对需要的人有帮助
package com.jiuyi.util; import com.alibaba.fastjson.JSON; import com.coremedia.iso.boxes.Container; import com.googlecode.mp4parser.authoring.Movie; import com.googlecode.mp4parser.authoring.Track; import com.googlecode.mp4parser.authoring.builder.DefaultMp4Builder; import com.googlecode.mp4parser.authoring.container.mp4.MovieCreator; import com.googlecode.mp4parser.authoring.tracks.AppendTrack; import lombok.extern.slf4j.Slf4j; import java.io.File; import java.io.FileNotFoundException; import java.io.RandomAccessFile; import java.nio.channels.FileChannel; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedList; import java.util.List; @Slf4j public class Mp4ParserUtils { private Mp4ParserUtils() { } public static void main(String[] args) { List<String> filePaths = new ArrayList<>(5); filePaths.add("C:\\Users\\hankui\\Desktop\\1\\387702304397835807.mp4"); filePaths.add("C:\\Users\\hankui\\Desktop\\1\\387702304397837443.mp4"); filePaths.add("C:\\Users\\hankui\\Desktop\\1\\387702304397840726.mp4"); mergeVideoNew(filePaths, new File("C:\\Users\\hankui\\Desktop\\1\\147.mp4")); } public static String mergeVideoNew(List<String> filePaths, File resultFile) { try { Collections.sort(filePaths); log.info("filePaths=" + JSON.toJSONString(filePaths)); Movie[] inMovies = new Movie[filePaths.size()]; for (int i = 0; i < filePaths.size(); i++) { log.info("filePaths=" + filePaths.get(i)); File f = new File(filePaths.get(i)); if (f.exists() && f.isFile() && f.length() > 0) { log.info("filePaths real:" + f.getAbsolutePath()); inMovies[i] = MovieCreator.build(filePaths.get(i)); } } // 分别取出音轨和视频 List<Track> videoTracks = new LinkedList<>(); List<Track> audioTracks = new LinkedList<>(); for (Movie m : inMovies) { for (Track t : m.getTracks()) { if ("soun".equals(t.getHandler())) { audioTracks.add(t); } if ("vide".equals(t.getHandler())) { videoTracks.add(t); } } } // 合并到最终的视频文件 Movie outMovie = new Movie(); if (audioTracks.size() > 0) { outMovie.addTrack(new AppendTrack(audioTracks.toArray(new Track[audioTracks.size()]))); } if (videoTracks.size() > 0) { outMovie.addTrack(new AppendTrack(videoTracks.toArray(new Track[videoTracks.size()]))); } Container mp4file = new DefaultMp4Builder().build(outMovie); // 将文件输出 if (resultFile.exists() && resultFile.isFile()) { resultFile.delete(); } FileChannel fc = new RandomAccessFile(resultFile, "rw").getChannel(); mp4file.writeContainer(fc); fc.close(); // 合成完成后把原片段文件删除 for (String filePath : filePaths) { File file = new File(filePath); file.delete(); } return resultFile.getAbsolutePath(); } catch (FileNotFoundException e) { log.error("mergeVideo has error: " + e.getMessage()); } catch (Exception e) { log.error("mergeVideo has error1: " + e.getMessage()); } return null; } }