搜索你想找的开源项目

输入名称、用途或关键词,也可粘贴 GitHub 仓库链接

分享到微信

当前解读页的微信分享二维码

用微信扫一扫打开,点击右上角「···」分享给朋友或朋友圈。

手机上可截屏后,在微信扫一扫中从相册识别二维码。

a-schild/jave2

多媒体与设计

为 Java 应用提供 ffmpeg 封装,用于音频和视频转码。

1,378
261
Java
GPL-3.0
创建于 13 年前

项目介绍

JAVE2(Java Audio Video Encoder)是 ffmpeg 的 Java 封装。开发者不用手工拼接 ffmpeg 命令行,而是用类型化的音频、视频参数构造转码配置,再交给编码器完成文件转码、编解码器切换、视频缩放与抽取等常见操作。它面向需要在 JVM 进程内处理媒体文件的 Java 应用。

项目拆成两部分:jave-core 是平台无关的 Java 代码,各平台的 jave-nativebin-* 包携带对应的 ffmpeg 可执行文件。jave-all-deps 打包 core 和全部受支持平台,jave-bom 用于自行选择平台包时统一版本,避免 core 与二进制包版本错位 README lines 113–145。

快速使用

在 Maven 构建中加入依赖。下面的例子包含所有平台的二进制:

<dependency>
  <groupId>ws.schild</groupId>
  <artifactId>jave-all-deps</artifactId>
  <version>4.2.0</version>
</dependency>

如果只需要一个平台,可以同时引入 jave-core 和对应的 native 包,例如 jave-nativebin-linux64,并用 jave-bom 管理版本 README lines 119–142。然后执行转码:

File source = new File("source.wav");
File target = new File("target.mp3");

AudioAttributes audio = new AudioAttributes();
audio.setCodec("libmp3lame");
audio.setBitRate(128000);
audio.setChannels(2);
audio.setSamplingRate(44100);

EncodingAttributes attrs = new EncodingAttributes();
attrs.setOutputFormat("mp3");
attrs.setAudioAttributes(audio);

new Encoder().encode(new MultimediaObject(source), target, attrs);

encode() 会阻塞到转码完成,失败时抛出 EncoderException,源文件无法读取时抛出 InputFormatException。可运行的示例位于 DefaultFFMPEGLocatorTest.java README lines 245–266。项目 wiki 介绍了用法、示例、编码参数、自定义 ffmpeg 参数和支持的格式。

使用约束

JAVE 要求 Java 8 或更高版本。受支持的包覆盖 Windows x64 与 ARM 64、Linux x64、ARM 64 与 ARM 32,以及 macOS Apple silicon。macOS Intel 已弃用,将在后续版本移除 README lines 36–54。32 位 Windows 与 Linux x86 包在 4.0.0 中被移除,需要这些平台的项目应停留在 3.6.0 README lines 62–68。

随包分发的 ffmpeg 为 9.0.x。Linux 二进制基于 musl 从源码构建并完全静态链接,因此可以在 Alpine 等 musl 镜像以及较老的发行版上运行 README lines 69–75。4.2.0 起支持 GraalVM native image;构建时应只依赖目标平台包而不是 jave-all-deps,否则所有二进制都会被嵌入 README lines 76–84。

库本身会调用 ffmpeg 可执行文件,并为 Java 提供类型化的命令行构造方式;库与调用方之间的安全边界、以及不能对用户输入做什么,在 SECURITY.md 中有说明 README lines 327–337。JAVE2 使用 GPL-3.0 许可证。

HotRepo 点评

JAVE2 是一个存续较久的 Java 绑定:仓库创建于 2013 年,累计约 1,378 Star、261 Fork。它的包结构体现了对 Java 部署的实际考虑——把纯 Java core 与各平台 ffmpeg 二进制分开,并用 BOM 防止版本漂移。项目也做了明确的平台取舍:4.0.0 移除 32 位 x86,并在 Apple 逐步淘汰 Intel 硬件时弃用 macOS Intel。HotRepo 没有该仓库的榜单或增长记录,因此这里的观察基于项目结构与文档约束,而非热度数据。

本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。