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

相关推荐
简鹿办公2 天前
FFmpeg vs 去水印软件:哪种方式更适合你?
ffmpeg·怎样去除视频水印·如何去视频logo视频水印
小狮子安度因2 天前
ffplay数据结构分析
数据结构·ffmpeg
小狮子安度因3 天前
ffplay音频重采样
ffmpeg·音视频
小狮子安度因3 天前
AAC ADTS格式分析
网络·ffmpeg·aac
勘察加熊人3 天前
ffmpeg切割音频
ffmpeg·音视频
xiaohouzi1122334 天前
Python读取视频-硬解和软解
python·opencv·ffmpeg·视频编解码·gstreamer
kimble_xia@oracle5 天前
性能优化笔记
ffmpeg
wang_chao1185 天前
RK3399平台ffmpeg-VPU硬编码录制USB摄像头视频、H264或MJPEG编码
ffmpeg·音视频
鹅毛在路上了7 天前
C++, ffmpeg, libavcodec-RTSP拉流,opencv实时预览
c++·opencv·ffmpeg
Hi202402178 天前
Orin-Apollo园区版本:订阅多个摄像头画面拼接与硬编码RTMP推流
ffmpeg·apollo·orin·图像拼接·图传