环境信息:
操作系统:centos7
编程语言:java
安装ffmpeg
# 安装epel扩展源
sudo yum install -y epel-release
# 安装Nux Dextop Yum 源
sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
# 安装FFmpeg 和 FFmpeg开发包
sudo yum install -y ffmpeg ffmpeg-devel
# 查看安装结果
ffmpeg
视频处理java工具类
- 引入maven配置
<!-- 引入jave多媒体处理包 -->
<dependency>
<groupId>ws.schild</groupId>
<artifactId>jave-core</artifactId>
</dependency>
<!-- linux64位 ffmpeg,视频切割合并Linux环境依赖,根据运行环境Linux64位环境包和window64位环境包只需要依赖一个即可,这个jar包比较大,有21M -->
<dependency>
<groupId>ws.schild</groupId>
<artifactId>jave-native-linux64</artifactId>
</dependency>
<!-- window64位 ffmpeg,视频切割合并Windows环境依赖,根据运行环境Linux64位环境包和window64位环境包只需要依赖一个即可,这个jar包比较大,有20M -->
<dependency>
<groupId>ws.schild</groupId>
<artifactId>jave-native-win64</artifactId>
<version>2.4.5</version>
</dependency>
- java工具类
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ws.schild.jave.MultimediaInfo;
import ws.schild.jave.MultimediaObject;
import java.io.*;
/**
* @Auther: wangzhongxing
* @Date: 2020/12/3 10:21
* @Description:
*/
public class VideoUtil {
private static final Logger LOGGER = LoggerFactory.getLogger(VideoUtil.class);
/**
* 将视频分割为小段,分割精度精确到秒,该方法切割出的小段视频时长会有一定的精度误差,但切割效率较高
*
* @param fileName 视频文件名(带路径)
* @param outputPath 输出文件路径,会在该路径下输出切割后的视频,
* 输出文件名=源视频文件名+下划线+视频开始秒数+源视频格式后缀
* @param periodTime 分割的小段视频时长 单位:秒
* @param merge true=将整个视频结尾部分不足一次分割时间的部分,合并到最后一次分割的视频中,
* false=将整个视频结尾部分不足一次分割时间的部分单独切割成一段视频
*/
public static void videoSplit(String fileName, String outputPath, int periodTime, boolean merge) {
long beginTime = System.currentTimeMillis();
File outputDir = new File(outputPath);
if (!outputDir.exists()) {
outputDir.mkdirs();
}
// 更新视频输出目录
outputPath = outputDir.getPath() + File.separator;
// 获取视频总时长,单位:秒
int videoTime = getDurationSecond(fileName);
// 计算视频分割的个数
int count;
// 不足一次剪辑的剩余时间,单位:秒
int remain = 0;
if (merge) {
count = videoTime / periodTime;
remain = videoTime % periodTime;
} else {
count = videoTime / periodTime + 1;
}
final String FFMPEG = "ffmpeg";
String startTime; // 每段视频的开始时间,格式:HH:mm:ss
String periodVideoName; // 每段视频的名字,名字规则:视频i_时间段xx_yy
int duration; // 每次分割的时长
String command;// 执行的命令
// 得到视频后缀 如.mp4
String videoSuffix = fileName.substring(fileName.lastIndexOf("."));
String videoName = fileName.substring(fileName.