java利用wsschildjave-core273对音视频文件进行剪辑支持只传开始时间截取到最后只传结束时间从头开始剪传开始时间+截取时长传开始时间和结束时间几种方式操作同时保留源文件的格式码率等信息
以下是一个使用ws.schild:jave-core:2.7.3库进行音视频剪辑的示例代码:
import ws.schild.jave.*;
import java.io.File;
public class VideoCutter {
public static void cut(String inputFile, String outputFile, Integer startTime, Integer endTime) throws EncoderException {
File source = new File(inputFile);
File target = new File(outputFile);
MultimediaObject multimediaObject = new MultimediaObject(source);
AudioInfo audioInfo = multimediaObject.getAudio().getInfo();
VideoInfo videoInfo = multimediaObject.getVideo().getInfo();
EncodingAttributes encodingAttributes = new EncodingAttributes();
encodingAttributes.setFormat(videoInfo.getCodec());
encodingAttributes.setAudioAttributes(new AudioAttributes());
encodingAttributes.setVideoAttributes(new VideoAttributes());
if (startTime != null && endTime != null) {
int duration = endTime - startTime;
encodingAttributes.setDuration(duration);
MultimediaObject trimmedObject = new MultimediaObject(multimediaObject, encodingAttributes);
trimmedObject.trim(startTime, endTime);
Encoder encoder = new Encoder();
encoder.encode(trimmedObject, target, encodingAttributes);
} else if (startTime != null) {
encodingAttributes.setDuration(audioInfo.getDuration() - startTime);
MultimediaObject trimmedObject = new MultimediaObject(multimediaObject, encodingAttributes);
trimmedObject.trim(startTime, audioInfo.getDuration());
Encoder encoder = new Encoder();
encoder.encode(trimmedObject, target, encodingAttributes);
} else if (endTime != null) {
encodingAttributes.setDuration(endTime);
MultimediaObject trimmedObject = new MultimediaObject(multimediaObject, encodingAttributes);
trimmedObject.trim(0, endTime);
Encoder encoder = new Encoder();
encoder.encode(trimmedObject, target, encodingAttributes);
} else {
throw new IllegalArgumentException("Either start time or end time must be provided.");
}
}
}
该代码中的cut方法接受四个参数:输入文件路径、输出文件路径、开始时间和结束时间。开始时间和结束时间都以毫秒为单位。可以将其中的任意一个或两个参数设为null来实现不同的剪辑方式。
该方法首先使用MultimediaObject类从原始文件中读取音视频流信息。然后,它根据传入的参数创建一个新的EncodingAttributes对象,并设置音频和视频编码属性,以及剪辑后的总时长(如果提供了开始和结束时间)。接下来,使用trim方法从原始MultimediaObject中剪辑出一个新的MultimediaObject,然后使用Encoder类将其编码为目标文件。
剪辑后的文件将保留与原始文件相同的格式和码率等信息
原文地址: https://www.cveoy.top/t/topic/hbY7 著作权归作者所有。请勿转载和采集!