使用Java怎么样实现一个合并MP4视频功能

  介绍

今天就跟大家聊聊有关使用Java怎么样实现一个合并MP4视频功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

<强>局限性

只支持MP4文件
经过尝试对于一些MP4文件分割不了

<强>依赖

& lt; !——mp4文件操作jar——比;   & lt; !——https://mvnrepository.com/artifact/com.googlecode.mp4parser/isoparser——比;   & lt; dependency>   & lt; groupId> com.googlecode.mp4parser   & lt; artifactId> isoparser   & lt; version> 1.1.22   & lt;/dependency>

<强>工具类

包com.example.demo;
  
  
  进口com.coremedia.iso.boxes.Container;
  进口com.googlecode.mp4parser.authoring.Movie;
  进口com.googlecode.mp4parser.authoring.Track;
  进口com.googlecode.mp4parser.authoring.builder.DefaultMp4Builder;
  进口com.googlecode.mp4parser.authoring.container.mp4.MovieCreator;
  进口com.googlecode.mp4parser.authoring.tracks.AppendTrack;
  进口com.googlecode.mp4parser.authoring.tracks.CroppedTrack;
  
  进口java.io.File;
  进口java.io.FileOutputStream;
  进口java.io.IOException;
  进口java.nio.channels.FileChannel;
  进口java.util.ArrayList;
  进口java.util.Arrays;
  进口java.util.LinkedList;
  进口并不知道;
  
  公开课Mp4ParserUtils {/* *
  *合并视频
  *
  * @param videoList:所有视频地址集合
  * @param mergeVideoFile:目标文件
  * @return
  */公共静态字符串mergeVideo (ListvideoList文件mergeVideoFile) {
  FileOutputStream安全系数=零;
  FileChannel fc=零;
  尝试{
  List,sourceMovies=new ArrayList<的在();
  (字符串视频:videoList) {
  sourceMovies.add (MovieCreator.build(视频));
  }
  
  List,videoTracks=new LinkedList<的在();
  List,audioTracks=new LinkedList<的在();
  
  (电影电影:sourceMovies) {
  (跟踪跟踪:movie.getTracks ()) {
  如果“soun" .equals (track.getHandler ())) {
  audioTracks.add(跟踪);
  }
  
  如果“vide" .equals (track.getHandler ())) {
  videoTracks.add(跟踪);
  }
  }
  }
  
  电影mergeMovie=新电影();
  如果(audioTracks.size()在0) {
  mergeMovie。addTrack(新AppendTrack (audioTracks。toArray(新跟踪[audioTracks.size ()))));
  }
  
  如果(videoTracks.size()在0) {
  mergeMovie。addTrack(新AppendTrack (videoTracks。toArray(新跟踪[videoTracks.size ()))));
  }
  
  容器=新DefaultMp4Builder () .build (mergeMovie);
  安全系数=new FileOutputStream (mergeVideoFile);
  fc=fos.getChannel ();
  out.writeContainer (fc);
  fc.close ();
  fos.close ();
  返回mergeVideoFile.getAbsolutePath ();
  }捕捉(异常e) {
  e.printStackTrace ();
  最后}{
  如果(fc !=null) {
  尝试{
  fc.close ();
  }捕捉(IOException e) {
  e.printStackTrace ();
  }
  }
  
  如果(安全系数!=null) {
  尝试{
  fos.close ();
  }捕捉(IOException e) {
  e.printStackTrace ();
  }
  }
  }
  
  返回null;
  }/* *
  *剪切视频
  * @param srcVideoPath
  * @param dstVideoPath
  * @param倍
  * @throws IOException
  */srcVideoPath公共静态孔隙cutVideo(字符串,字符串dstVideoPath,双[])抛出IOException {
  int dstVideoNumber=3ざ?2;
  String [] dstVideoPathes=新的字符串(dstVideoNumber);
  for (int i=0;我& lt;dstVideoNumber;我+ +){
  dstVideoPathes[我]=dstVideoPath +“cutOutput产生绯闻;+我+“.mp4";
  }
  int timesCount=0;
  
  for (int idst=0;idst & lt;dstVideoPathes.length;idst + +) {//电影电影=new MovieCreator ()。构建(新RandomAccessFile (“/home/珊妮/suckerpunch-distantplanet_h2080p/suckerpunch-distantplanet_h2080p.mov",“r") .getChannel ());
  电影电影=MovieCreator.build (srcVideoPath);
  
  List跟踪=movie.getTracks ();
  电影。setTracks(新LinkedList ());//删除所有跟踪我们将创建新的跟踪从旧的
  
  
  双startTime1=* (timesCount);
  双endTime1=* (timesCount + 1);
  timesCount=timesCount + 2;
  
  布尔timeCorrected=false;//这里我们试图找到一个跟踪样品同步。因为我们可以>看完上述内容,你们对使用Java怎么样实现一个合并MP4视频功能有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

使用Java怎么样实现一个合并MP4视频功能