因为公司项目的部分需求,需要将已经录制好的视频,从固定时间开始截取,到固定时间结束.并且将视频截取成相对平均的若干段视频.目前demo实现了,后续还会继续优化,在视频截取的时候,从关键帧开始或结束.
1.首先需要安装FFmpeg.
2.直接上代码了
//分割视频的大小
private long blockSize = 1 * 1024 * 1024;
@Test
public void Test1() throws Exception {
List<String> lists = cutVideo("/Users/wangge/Desktop/erge.mp4");
System.out.println(lists);
}
视频切割规则计算,切割命令组装
/**
* @param filePath 要处理的文件路径
* @return 分割后的文件路径
* @throws Exception 文件
*/
List<String> cutVideo(String filePath) throws Exception {
File file = new File(filePath);
if (!file.exists()) {
throw new FileNotFoundException(filePath + "文件不存在");
}
if (!filePath.endsWith(".mp4")) {
throw new Exception("文件格式错误");
}
//从ffmpeg获得的时间长度00:00:00格式
String videoTimeString = getVideoTime(file);
log.info("从ffmpeg获得的时间长度00:00:00格式:{}",videoTimeString);
//将时长转换为秒数
int videoSecond = parseTimeToSecond(videoTimeString);
log.info("将时长转换为秒数:{}",videoSecond);
//视频文件的大小
long fileLength = getVideoFileLength(file);
log.info("视频文件的大小:{}",fileLength);
List<String> cutedVideoPaths = new ArrayList<String>();
if (fileLength <= blockSize) {
log.info("如果视频文件大小不大于预设值,则直接返回原视频文件");
cutedVideoPaths.add(filePath);
} else {
log.info("超过预设大小,需要切割");