当前位置: 首页 > news >正文

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>

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

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() {@Overridepublic 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("视频格式转换完成!");}
}

获取视频封面

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;@Overridepublic void consumeStreams(List<Stream> streams) {// All stream type except video are disabled. just ignore}@Overridepublic void consume(Frame frame) {// End of Streamif (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

http://www.dtcms.com/a/161919.html

相关文章:

  • 汤晓鸥:计算机视觉的开拓者与AI产业化的先行者
  • python数据分析(五):Pandas 数据检索技术
  • Android学习总结之Java篇(一)
  • 关于https请求丢字符串导致收到报文解密失败问题
  • java.lang.AssertionError: Binder ProxyMap has too many entries: 问题处理
  • 深入理解链表:从基础操作到高频面试题解析
  • Linux[开发工具]
  • 主流AI推理模型的详细说明、对比及总结表格
  • android录音生成wav
  • 铭记之日(3)——4.28
  • 【软件工程】需求分析详解
  • maven私服配置
  • 利用Python打印有符号十进制数的二进制原码、反码、补码
  • std::print 和 std::println
  • 万亿参数大模型网络瓶颈突破:突破90%网络利用率的技术实践
  • 【力扣刷题实战】丢失的数字
  • Java大师成长计划之第6天:Java流式API(Stream API)
  • Redis 小记
  • Cursor + Figma-Context-MCP ,让 Cursor 获取 Figma 设计图信息,实现 AI 生成页面的高度还原
  • 【3分钟准备前端面试】Hybrid开发 谷歌浏览器调试安卓app
  • ViTa-Zero:零样本视觉触觉目标 6D 姿态估计
  • 深入解析 Babylon.js 中的 TransformNode.lookAt 方法
  • 【Unity】 Dropdown默认选择不选择任何选项
  • 怎么把Ubuntu系统虚拟环境中启动命令做成系统服务可以后台运行?
  • 【“星瑞” O6 评测】 — llm CPU部署对比高通骁龙CPU
  • Flutter 学习之旅 之 flutter 作为 module ,在 Android 端主动唤起 Flutter 开发的界面 简单的整理
  • DBeaver CE 24.1.3 (Windows 64位) 详细安装教程
  • .net 常用
  • 基于C++实现人工智能—五子棋的目标识别
  • Google在架ab包分析-巴西