待完善

概述

<!-- 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();
    }


}

奇奇怪怪?

  1. Unrecognized option ‘hls_wrap‘. 解决方案_Yinanbo的博客-CSDN博客
最后修改:2022 年 03 月 17 日
如果觉得我的文章对你有用,请随意赞赏