使用google的mp4parser进行MP4视频的合并
前言
最近是饱受折磨,媳妇的单位一直然让她做一些工作视频的合并,在网上找了很多的资源,最后发现都是坑-----------要VIP,果然天底下就没有免费的午餐。
不说了。都是眼泪。
所以决心自己做一个免费的MP4视频合并工具吧。 在网上找了很多资料,最后选定了google的mp4parser工具包来进行视频的处理,NO B B ,SHOW U CODE。
@Slf4j
public class Mp4ParserUtils {
private static final String MP3_HANDLER = "soun";
private static final String MP4_HANDLER = "vide";
public static void mergeMP4(List<String> sourceFiles, File target)
throws IOException {
//添加需要合并的文件
List<Track> videoTracks = new LinkedList<>();
List<Track> audioTracks = new LinkedList<>();
getVideoTracks(sourceFiles, videoTracks, audioTracks);
Movie movie = creatNewMovie(videoTracks, audioTracks);
Container out = new DefaultMp4Builder().build(movie);
FileChannel fc = new RandomAccessFile(target, "rw").getChannel();
out.writeContainer(fc);
fc.close();
}
private static void getVideoTracks(List<String> sourceFiles, List<Track> videoTracks, List<Track> audioTracks) throws IOException {
List<Movie> movieList = new LinkedList<>();
for (String filePath : sourceFiles) {
Movie movie = MovieCreator.build(filePath);
movieList.add(movie);
}
for (Movie m : movieList) {
for (Track t : m.getTracks()) {
if (StrUtil.equals(MP3_HANDLER, t.getHandler())) {
audioTracks.add(t);
}
if (StrUtil.equals(MP4_HANDLER, t.getHandler())) {
videoTracks.add(t);
}
}
}
}
private static Movie creatNewMovie(List<Track> videoTracks, List<Track> audioTracks)
throws IOException {
Movie result = new Movie();
if (audioTracks.size() > 0) {
result.addTrack(new AppendTrack(
audioTracks.toArray(new Track[audioTracks.size()])));
}
if (videoTracks.size() > 0) {
result.addTrack(new AppendTrack(
videoTracks.toArray(new Track[videoTracks.size()])));
}
return result;
}
public static void main(String[] args) throws IOException {
List<String> strings = new ArrayList<>();
strings.add("D:\\temp\\1321695771019579392\\b30369u5j3q.p701.1.mp4.mp4");
strings.add("D:\\temp\\1321695771019579392\\b30369u5j3q.p701.2.mp4.mp4");
File file = new File("D:\\temp\\1321695771019579392\\merge\\merge.mp4");
mergeMP4(strings, file);
}
}
已测试完毕,可以使用。使用要注意的地方是:视频的顺序,要自己控制。根据传入集合的顺序来进行处理。
好了,晚上再也不怕媳妇让我给她合并视频了
本文由 创作,采用 知识共享署名4.0 国际许可协议进行许可。本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为: 2021/01/07 09:43