java利用 implementation wsschildjave-core273 实现对音频、视频文件进行剪辑保留源文件的格式码率等原始信息的通时支持只传开始时间截取到最后只传结束时间从头开始剪传开始时间+截取时长传开始时间和结束时间这四种组合方式进行剪辑
Java可以利用Jave库来实现对音频、视频文件进行剪辑。Jave库是一个Java基于FFmpeg的多媒体框架。它提供了一系列的API来处理各种多媒体格式文件。
首先需要在Gradle文件中添加以下依赖:
implementation "ws.schild:jave-core:2.7.3"
接下来,我们可以使用以下代码来实现对音频、视频文件的剪辑:
import ws.schild.jave.Encoder;
import ws.schild.jave.EncoderException;
import ws.schild.jave.InputFormatException;
import ws.schild.jave.MultimediaObject;
import ws.schild.jave.MultimediaObjectException;
import ws.schild.jave.encode.AudioAttributes;
import ws.schild.jave.encode.EncodingAttributes;
import ws.schild.jave.encode.VideoAttributes;
import java.io.File;
public class JaveDemo {
public static void main(String[] args) throws InputFormatException, EncoderException, MultimediaObjectException {
// 原始文件路径
String inputFilePath = "C://test.mp4";
// 剪辑后的文件路径
String outputFilePath = "C://test_cut.mp4";
// 开始时间(单位:毫秒)
Long startTime = 3000L;
// 结束时间(单位:毫秒)
Long endTime = 10000L;
// 获取原始文件的格式,码率等信息
MultimediaObject inputFile = new MultimediaObject(new File(inputFilePath));
AudioAttributes audio = new AudioAttributes();
audio.setCodec(inputFile.getAudio().getCodec());
audio.setBitRate(inputFile.getAudio().getBitRate());
audio.setChannels(inputFile.getAudio().getChannels());
audio.setSamplingRate(inputFile.getAudio().getSamplingRate());
VideoAttributes video = new VideoAttributes();
video.setCodec(inputFile.getVideo().getCodec());
video.setBitRate(inputFile.getVideo().getBitRate());
video.setFrameRate(inputFile.getVideo().getFrameRate());
video.setSize(inputFile.getVideo().getSize());
// 根据剪辑方式设置开始时间和结束时间
Long start = null;
Long end = null;
if (startTime != null && endTime != null) {
start = startTime;
end = endTime;
} else if (startTime != null) {
start = startTime;
end = inputFile.getDuration();
} else if (endTime != null) {
start = 0L;
end = endTime;
}
// 设置剪辑后的格式,码率等信息
EncodingAttributes attrs = new EncodingAttributes();
attrs.setOutputFormat(inputFile.getFormat());
attrs.setAudioAttributes(audio);
attrs.setVideoAttributes(video);
// 进行剪辑
Encoder encoder = new Encoder();
encoder.encode(new MultimediaObject(new File(inputFilePath)), new File(outputFilePath), attrs, start, end);
}
}
以上代码实现了根据传入的开始时间、结束时间进行剪辑。如果只传开始时间,则会从该时间点开始剪辑到文件结束;如果只传结束时间,则会从文件开头剪辑到该时间点。如果同时传入开始时间和截取时长,则会从开始时间开始剪辑指定时长;如果同时传入开始时间和结束时间,则会从开始时间开始剪辑到结束时间。
剪辑完后,保留了原始文件的格式、码率等信息,生成了一个新的剪辑后的文件
原文地址: https://www.cveoy.top/t/topic/hb0q 著作权归作者所有。请勿转载和采集!