a-schild/jave2
多媒体与设计为 Java 应用提供 ffmpeg 封装,用于音频和视频转码。
项目介绍
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 生成,更新于 ,以项目官方文档为准。