Android Studio使用mp4parser进行视频的分割

1.1 MP4
MP4 是上开源的一个视频处理项目 。
链接
1.2功能及使用场景
使用该项目能实现视频剪切、视频合并、视频转码等效果 。在本博客中,只对视频编辑代码进行讲解,在你的项目中加入开源项目的核心代码后,即可对视频文件进行剪辑处理 。
二下载方法
2.1 下载流程
1)先进入地址
2)点击如下图按钮

Android Studio使用mp4parser进行视频的分割

文章插图
3)点击如下图按钮
Android Studio使用mp4parser进行视频的分割

文章插图
4)选择如下图文件下载
Android Studio使用mp4parser进行视频的分割

文章插图
5)将下载下来的jar包放入项目的libs文件夹下
6)在build.中添加框中的代码
Android Studio使用mp4parser进行视频的分割

文章插图
7)在.xml中添加框中的权限
Android Studio使用mp4parser进行视频的分割

文章插图
三视频编辑代码
3.1 源码中的剪辑视频例子仓库源码中的视频剪辑例子 3.2 源码中的剪辑视频代码中文解释
1)代码块1----对需要剪辑的视频的开始时间和结束时间进行校正
Android Studio使用mp4parser进行视频的分割

文章插图
2)代码块二----根据校正后的时间得到剪辑开始和结束的位置
Android Studio使用mp4parser进行视频的分割

文章插图
3)代码块三----根据剪辑开始和结束的位置保存视频
Android Studio使用mp4parser进行视频的分割

文章插图
3.3 基于源码的剪辑代码类使用方法
1)实例化类
= new ();
2)设置被编辑视频的文件路径
.(url);
Android Studio使用mp4parser进行视频的分割

文章插图
3)设置被编辑的视频输出路径
.();
4)设置剪辑开始的时间
.();
5)设置剪辑结束的时间
.();
6)设置输出的文件名称
.();
7)调用剪辑并保存视频文件方法(建议作为点击保存时的操作并加入等待对话框)
.clip();
四 基于源码的视频剪辑代码
.java
import com.R;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.CroppedTrack;import java.io.File;import java.io.FileOutputStream;import java.nio.channels.FileChannel;import java.util.LinkedList;import java.util.List;/*** @ClassName: VideoClip* @Description:* @version: V2.0* @Copyright: X-Force* @author: foryou* @Date: 2017/2/20 14:24*/public class VideoClip {private static final String TAG = "VideoClip";private String filePath;//视频路径private String workingPath;//输出路径private String outName;//输出文件名private double startTime;//剪切起始时间private double endTime;//剪切结束时间public void setFilePath(String filePath) {this.filePath = filePath;}public void setWorkingPath(String workingPath) {this.workingPath = workingPath;}public void setOutName(String outName) {this.outName = outName;}public void setEndTime(double endTime) {this.endTime = endTime / 1000;}public void setStartTime(double startTime) {this.startTime = startTime / 1000;}public void clip() {try {//将要剪辑的视频文件Movie movie = MovieCreator.build(filePath);List tracks = movie.getTracks();movie.setTracks(new LinkedList());//时间是否修正boolean timeCorrected = false;//计算并换算剪切时间for (Track track : tracks) {if (track.getSyncSamples() != null&& track.getSyncSamples().length > 0) {if (timeCorrected) {throw new RuntimeException("The startTime has already been corrected by another track with SyncSample. Not Supported.");}//true,false表示短截取;false,true表示长截取startTime = VideoHelper.correctTimeToSyncSample(track, startTime, false);//修正后的开始时间endTime = VideoHelper.correctTimeToSyncSample(track, endTime, true);//修正后的结束时间timeCorrected = true;}}//根据换算到的开始时间和结束时间来截取视频for (Track track : tracks) {long currentSample = 0; //视频截取到的当前的位置的时间double currentTime = 0; //视频的时间长度double lastTime = -1;//上次截取到的最后的时间long startSample1 = -1;//截取开始的时间long endSample1 = -1;//截取结束的时间//设置开始剪辑的时间和结束剪辑的时间避免超出视频总长for (int i = 0; i