jaffree 封装ffmpeg 转换视频格式,获取大小,时间,封面

下载

参考网址

【收藏级教程】FFmpeg音视频处理宝典:从入门到精通的50个实用技巧_ffmpeg教程-CSDN博客

配置环境变量

验证

重启idea开发工具

springboot maven集成

复制代码
<dependency>
   <groupId>com.github.kokorin.jaffree</groupId>
   <artifactId>jaffree</artifactId>
   <version>2023.09.10</version>
</dependency>

视频转换同时获取视频大小和时长

java 复制代码
package org.jeecg.common.util;

import com.github.kokorin.jaffree.StreamType;
import com.github.kokorin.jaffree.ffmpeg.*;


import javax.imageio.ImageIO;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;

public class JaffreeVideoConverter {
   static final AtomicLong durationMillis = new AtomicLong();
   static final AtomicLong durationMillis2 = new AtomicLong();

    public static void main(String[] args) {
        // 输入和输出文件路径
        Path input = Paths.get("D:/input.wmv");
        Path outputss = Paths.get("D:/231311.mp4");
        // 调用FFmpeg进行视频格式转换
        FFmpegResult result = FFmpeg.atPath()
                .addInput(UrlInput.fromPath(input))
                .addOutput(UrlOutput.toPath(outputss))
                .setProgressListener(new ProgressListener() {
                    @Override
                    public void onProgress(FFmpegProgress progress) {
                        durationMillis.set(progress.getTimeMillis());
                        durationMillis2.set(progress.getSize());
                    }
                })
                .execute();
        System.out.println("Exact duration: " + durationMillis.get() + " milliseconds");//视频时长
        System.out.println("Exact duration22: " + durationMillis2.get() + " milliseconds");//视频大小
        System.out.println("视频格式转换完成!");
    }
}

获取视频封面

java 复制代码
package org.jeecg.common.util;

import com.github.kokorin.jaffree.StreamType;
import com.github.kokorin.jaffree.ffmpeg.*;


import javax.imageio.ImageIO;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;

public class JaffreeVideoConverter {

    public static void main(String[] args) {
        // 输入和输出文件路径
        Path input = Paths.get("D:/input.wmv");
        Path outputs = Paths.get("D:/");

        FFmpegResult result = FFmpeg.atPath()
                .addInput(UrlInput.fromPath(input))
                .addOutput(
                        FrameOutput
                                .withConsumer(
                                        new FrameConsumer() {
                                            private long num = 1;

                                            @Override
                                            public void consumeStreams(List<Stream> streams) {
                                                // All stream type except video are disabled. just ignore
                                            }

                                            @Override
                                            public void consume(Frame frame) {
                                                // End of Stream
                                                if (frame == null) {
                                                    return;
                                                }

                                                try {
                                                    String filename = "frame_" + num++ + ".png";
                                                    Path output = outputs.resolve(filename);
                                                    ImageIO.write(frame.getImage(), "png", output.toFile());
                                                } catch (Exception e) {
                                                    e.printStackTrace();
                                                }
                                            }
                                        }
                                )
                                  //控制截多少张图,这里我只需要截取一张
                                .setFrameCount(StreamType.VIDEO, 1l)
                                //每十秒截取一张 从0开始
                                .setFrameRate(0.1)
                                .disableStream(StreamType.AUDIO)
                                .disableStream(StreamType.SUBTITLE)
                                .disableStream(StreamType.DATA)
                )
                .execute();
       
    }
}

除此之外,还可以合成视频,截取视频等功能

Jaffree项目地址

https://gitcode.com/gh_mirrors/ja/Jaffree

相关推荐
Yeauty2 天前
你那条 ffmpeg 命令,一键翻成 Rust builder 代码
开发语言·rust·ffmpeg
Yeauty3 天前
用 Whisper 转录前,你不用再离开 Rust
开发语言·rust·ffmpeg·音视频·视频
paokuflying4 天前
ffmpeg提取视频中的音频
ffmpeg·音视频
Tirzano4 天前
java 精简使用ffmpeg
java·开发语言·ffmpeg
兵叔物联5 天前
基于FFmpeg的短视频自动剪辑工具
ffmpeg·音视频
霸道流氓气质8 天前
视频预览链路三件套:ZLMediaKit · MediaMTX · FFmpeg 完全指南
ffmpeg·音视频
xgc_java8 天前
在Java里把ONNX/OpenCV/FFmpeg跑稳:28篇bytedeco实战小册完整指南
java·opencv·ffmpeg
鲲穹AI全能助理13 天前
实用音频合成工具分享:灵境配音 使用场景与功能说明
ffmpeg·音视频
我是Superman丶14 天前
Windows系统FFmpeg官方下载+完整安装配置保姆级教程(2026最新版)
windows·ffmpeg
luoyayun36115 天前
Qt + FFmpeg 视频工具:视频一键压缩功能实现
qt·ffmpeg·音视频·视频压缩