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

相关推荐
肥or胖12 小时前
【FFmpeg 快速入门】本地播放器 项目
开发语言·qt·ffmpeg·音视频
笑虾12 小时前
bat 批处理实现 FFmpeg 命令导出 mov 到 png 序列帧
ffmpeg·png·mov·序列帧
mortimer2 天前
当AI配音遇上视频:实现音画同步的自动化工程实践
python·ffmpeg·ai编程
甲方求你学点技术吧4 天前
8:从USB摄像头把声音拿出来--ALSA大佬登场!
linux·图像处理·ffmpeg·音视频
hjjdebug4 天前
ffmpeg 中 write_option()函数详细注释
ffmpeg·write_option
biubiubiu07065 天前
FFmpeg Windows安装
windows·ffmpeg
Gene_20225 天前
[TOOL] ubuntu 使用 ffmpeg 操作 gif、mp4
linux·ubuntu·ffmpeg
xhBruce5 天前
FFmpeg+javacpp中av_log使用
ffmpeg·ffmpeg+javacpp
DogDaoDao5 天前
Windows下VScode配置FFmpeg开发环境保姆级教程
windows·vscode·ffmpeg·音视频·gcc
1nv1s1ble5 天前
ffmpeg-api记录
ffmpeg