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

相关推荐
花花鱼11 小时前
win11 终端 安装ffmpeg 使用终端Scoop
ffmpeg
weixin_4862814520 小时前
FFmpeg源码学习---ffmpeg
学习·ffmpeg
ImAlex2 天前
【ffmpeg应用】使用ffmpeg免费下载m3u8网络视频并转化为mp4格式
ffmpeg
张风捷特烈2 天前
FFmpeg 7.1.1 | 调试 ffmpeg.c 环境 - Widows&Clion&WSL
android·ffmpeg
Antonio9153 天前
【音视频】视频解码实战
ffmpeg·音视频·aac
薛瑄3 天前
FFmpeg之三 录制音频并保存, API编解码从理论到实战
ffmpeg·音视频·xcode
Antonio9153 天前
【音视频】音频编码实战
ffmpeg·音视频
BO_S__4 天前
python调用ffmpeg对截取视频片段,可批量处理
python·ffmpeg·音视频
Antonio9154 天前
【音视频】⾳频处理基本概念及⾳频重采样
ffmpeg·音视频·aac