待完善
概述
<!-- https://mvnrepository.com/artifact/net.bramp.ffmpeg/ffmpeg --><dependency>
<groupId>net.bramp.ffmpeg</groupId>
<artifactId>ffmpeg</artifactId>
<version>0.6.2</version>
</dependency>
食用
package cn.edu.hnuahe.mountain.gateway;
import lombok.extern.slf4j.Slf4j;
import net.bramp.ffmpeg.FFmpeg;
import net.bramp.ffmpeg.FFmpegExecutor;
import net.bramp.ffmpeg.FFmpegUtils;
import net.bramp.ffmpeg.FFprobe;
import net.bramp.ffmpeg.builder.FFmpegBuilder;
import net.bramp.ffmpeg.job.FFmpegJob;
import net.bramp.ffmpeg.probe.FFmpegProbeResult;
import net.bramp.ffmpeg.probe.FFmpegStream;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
* @author 颖
*/
@Slf4j
public class FfmpegTest {
public FfmpegTest() throws Exception {
String filename = "F:\\.zyy\\2.avi";
FFmpeg ffmpeg = new FFmpeg("D:\\Program Files\\ffmpeg\\bin\\ffmpeg");
FFprobe ffprobe = new FFprobe("D:\\Program Files\\ffmpeg\\bin\\ffprobe");
// 分析媒体文件信息
final FFmpegProbeResult probe = ffprobe.probe(filename);
final List<FFmpegStream> streams = probe.getStreams().stream().filter(fFmpegStream -> fFmpegStream.codec_type != null).collect(Collectors.toList());
final Optional<FFmpegStream> audioStream = streams.stream().filter(fFmpegStream -> FFmpegStream.CodecType.AUDIO.equals(fFmpegStream.codec_type)).findFirst();
if (audioStream.isEmpty()) {
log.error("未发现音频流");
}
FFmpegExecutor executor = new FFmpegExecutor(ffmpeg, ffprobe);
FFmpegBuilder builder = new FFmpegBuilder()
.setInput(filename)
.overrideOutputFiles(true)
.addOutput("./libraries/2.m3u8")
.setAudioBitRate(audioStream.map(fFmpegStream -> fFmpegStream.bit_rate).orElse(0L))
.setAudioChannels(1)
.setAudioCodec("aac")
.setAudioSampleRate(audioStream.get().sample_rate)
.setAudioBitRate(audioStream.get().bit_rate)
.setStrict(FFmpegBuilder.Strict.STRICT)
.setFormat("hls")
.addExtraArgs("-hls_time", "5", "-hls_list_size", "0")
.done();
FFmpegJob job = executor.createJob(builder, progress -> {
log.debug("[{}%] status:{} frame:{} time:{} fps:{} speed:{}",
(progress.out_time_ns / (probe.getFormat().duration * TimeUnit.SECONDS.toNanos(1))) * 100,
progress.status,
progress.frame,
FFmpegUtils.toTimecode(progress.out_time_ns, TimeUnit.NANOSECONDS),
progress.fps.doubleValue(),
progress.speed);
});
job.run();
if (job.getState() == FFmpegJob.State.FINISHED) {
System.out.println("Finish.");
}
}
public static void main(String[] args) throws Exception {
new FfmpegTest();
}
}