java利用wsschildjave-core273对音视频文件进行剪辑支持只传开始时间截取到最后只传结束时间从头开始剪传开始时间+截取时长传开始时间和结束时间几种方式操作
以下是利用ws.schild:jave-core:2.7.3对音视频文件进行剪辑的示例代码:
import ws.schild.jave.*;
import java.io.File;
public class VideoCutter {
/**
* 利用Jave库对视频进行剪辑
*
* @param sourceFile 源视频文件
* @param targetFile 目标视频文件
* @param startTime 开始时间(单位:秒)
* @param duration 截取时长(单位:秒)
* @param endTime 结束时间(单位:秒)
* @throws Exception 异常
*/
public static void cutVideo(File sourceFile, File targetFile, int startTime, int duration, int endTime) throws Exception {
// 创建视频编码器
final Encoder encoder = new Encoder();
// 创建视频编码参数
final EncodingAttributes encodingAttributes = new EncodingAttributes();
// 设置视频格式
encodingAttributes.setFormat("mp4");
// 创建视频编码器参数
final VideoAttributes videoAttributes = new VideoAttributes();
// 设置视频编码器参数
videoAttributes.setCodec("h264");
// 创建音频编码器参数
final AudioAttributes audioAttributes = new AudioAttributes();
// 设置音频编码器参数
audioAttributes.setCodec("aac");
// 设置编码参数
encodingAttributes.setVideoAttributes(videoAttributes);
encodingAttributes.setAudioAttributes(audioAttributes);
// 创建视频处理对象
final MultimediaObject multimediaObject = new MultimediaObject(sourceFile);
// 获取视频时长(单位:毫秒)
final long durationMillis = multimediaObject.getInfo().getDuration();
// 计算开始时间和结束时间(单位:毫秒)
final long startMillis = startTime * 1000;
final long endMillis = (endTime > 0 ? endTime : durationMillis) - (duration > 0 ? 0 : startMillis);
// 创建视频剪辑器
final MultimediaObject audioTrim = multimediaObject.trim(startMillis, endMillis);
// 计算截取时长(单位:毫秒)
final long durationMillisCut = duration * 1000;
// 如果截取时长大于0,则对视频进行裁剪
if (durationMillisCut > 0) {
final MultimediaObject videoTrim = audioTrim.crop(0, 0, durationMillisCut, 0);
// 编码视频文件
encoder.encode(videoTrim, targetFile, encodingAttributes);
} else {
// 编码音频文件
encoder.encode(audioTrim, targetFile, encodingAttributes);
}
}
public static void main(String[] args) {
try {
// 测试剪辑视频文件
final File sourceFile = new File("input.mp4");
final File targetFile = new File("output.mp4");
// 剪辑方式1:只传开始时间(截取到最后)
cutVideo(sourceFile, targetFile, 10, 0, 0);
// 剪辑方式2:只传结束时间(从头开始剪)
cutVideo(sourceFile, targetFile, 0, 0, 20);
// 剪辑方式3:传开始时间+截取时长
cutVideo(sourceFile, targetFile, 30, 10, 0);
// 剪辑方式4:传开始时间和结束时间
cutVideo(sourceFile, targetFile, 40, 0, 50);
} catch (Exception e) {
e.printStackTrace();
}
}
}
上述示例代码中,我们利用Jave库对视频进行剪辑,支持了多种剪辑方式:
- 只传开始时间(截取到最后):
cutVideo(sourceFile, targetFile, 10, 0, 0),表示从视频的第10秒开始剪辑,剪辑到视频的最后。 - 只传结束时间(从头开始剪):
cutVideo(sourceFile, targetFile, 0, 0, 20),表示从视频的开头开始剪辑,剪辑到视频的第20秒。 - 传开始时间+截取时长:
cutVideo(sourceFile, targetFile, 30, 10, 0),表示从视频的第30秒开始剪辑,剪辑时长为10秒。 - 传开始时间和结束时间:
cutVideo(sourceFile, targetFile, 40, 0, 50),表示从视频的第40秒开始剪辑,剪辑到视频的第50秒。
在剪辑视频时,我们使用了MultimediaObject类的trim()方法和crop()方法对视频进行剪辑和裁剪。同时,我们还使用了Encoder类来对剪辑后的视频进行编码,并将编码后的视频保存到目标文件中
原文地址: https://www.cveoy.top/t/topic/hbYO 著作权归作者所有。请勿转载和采集!