Java——JAVE(音视频格式转换)

JAVE

1、概述

JAVE (Java Audio Video Encoder)是一个纯Java的音视频编码器和解码器库,它是基于FFmpeg。JAVE库提供了一些简单易用的API,用于音频和视频格式的转换、编码、解码等操作。它对于一些基本的音视频处理任务来说是一个不错的选择。

这些库都是基于FFmpeg的,并允许在Java中处理音频和视频文件。使用它们可以避免直接调用外部的FFmpeg命令行工具,而是通过Java API来实现音频格式转换等操作。

1.1、操作系统支持

JAVE 需要Java 8 或更高版本。JAVE 还可以轻松移植到其他操作系统和硬件配置:

  • Windows x32、x64
  • MacOS Intel x64
  • MacOS M1
  • Linux x32、x64
  • Linux ARM32、ARM64

1.2、Maven依赖

包括支持平台的所有二进制文件,比较大,不建议全部引入:

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

推荐引入核心包和对应平台的二进制包:

<!-- 核心包 -->
<dependency>
    <groupId>ws.schild</groupId>
    <artifactId>jave-core</artifactId>
    <version>3.5.0</version>
</dependency>

Linux64位amd/intel:

<dependency>
    <groupId>ws.schild</groupId>
    <artifactId>jave-nativebin-linux64</artifactId>
    <version>3.5.0</version>
</dependency>

Linux64位arm:

<dependency>
    <groupId>ws.schild</groupId>
    <artifactId>jave-nativebin-linux-arm64</artifactId>
    <version>3.5.0</version>
</dependency>

Linux32位arm:

<dependency>
    <groupId>ws.schild</groupId>
    <artifactId>jave-nativebin-linux-arm32</artifactId>
    <version>3.5.0</version>
</dependency>

Windows64位:

<dependency>
    <groupId>ws.schild</groupId>
    <artifactId>jave-nativebin-win64</artifactId>
    <version>3.5.0</version>
</dependency>

MacOS64位:

<dependency>
    <groupId>ws.schild</groupId>
    <artifactId>jave-nativebin-osx64</artifactId>
    <version>3.5.0</version>
</dependency>

2、编码属性

2.1、AudioAttributes

音频编码属性由类的实例表示ws.schild.jave.AudioAttributes。此类对象的可用方法有:

  • public void setCodec(String codec):设置将用于音频流转码的编解码器的名称。必须从getAudioEncoders()返回的实例列表中选择一个值。否则可以传递AudioAttributes.DIRECT_STREAM_COPY特殊值,这需要从源文件中复制原始音频流。
  • public void setBitRate(Integer bitRate):它设置新的重新编码的音频流的比特率值。如果未设置比特率值,编码器将选择默认比特率值。该值应以每秒位数表示。例如,如果您想要 128 kb/s 比特率,您应该调用setBitRate(new Integer(128000))
  • public void setSamplingRate(Integer bitRate):它设置新的重新编码的音频流的采样率。如果未设置采样率值,编码器将选择默认值。该值应以赫兹表示。例如,如果您想要类似 CD 的 44100 Hz 采样率,您应该调用setSamplingRate(new Integer(44100))
  • public void setChannels(Integer channels):它设置将在重新编码的音频流中使用的音频通道的数量(1 = 单声道,2 = 立体声)。如果未设置通道值,编码器将选择默认通道值。
  • public void setVolume(Integer volume):可以调用此方法来改变音频流的音量。值 256 表示没有音量变化。因此,小于 256 的值会降低音量,而大于 256 的值会增加音频流的音量。

2.2、VideoAttributes

视频编码属性由类的实例表示ws.schild.jave.VideoAttributes。此类对象的可用方法有:

  • public void setCodec(String codec):它设置将用于视频流转码的编解码器的名称。必须从getVideoEncoders()返回的Encoder 实例列表中选择一个值。否则,您可以传递VideoAttributes.DIRECT_STREAM_COPY特殊值,这需要从源文件复制原始视频流。
  • public void setTag(String tag):它设置与重新编码的视频流关联的 tag/fourcc 值。如果未设置值,编码器将选择默认值。多媒体播放器经常使用标签值来选择在流上运行的视频解码器。例如,带有“DIVX”标签值的 MPEG 4 视频流将使用播放器使用的默认 DivX 解码器进行解码。顺便说一句,这正是 DivX 的本质:带有附加“DIVX”标签/fourcc 值的 MPEG 4 视频流。
  • public void setBitRate(Integer bitRate):它设置新的重新编码视频流的比特率值。如果未设置比特率值,编码器将选择默认比特率值。该值应以每秒位数表示。例如,如果您想要 360 kb/s 的比特率,您应该调用setBitRate(new Integer(360000))
  • public void setFrameRate(Integer bitRate):它设置新的重新编码的音频流的帧速率值。如果未设置比特率帧率,编码器将选择默认值。该值应以每秒帧数表示。例如,如果您想要 30 f/s 的帧速率,您应该调用setFrameRate(new Integer(30))
  • pulic void setSize(ws.schild.jave.VideoSize size):它设置视频流中图像的大小和比例。如果未设置值,编码器将保留原始大小和比例。否则,您可以传递一个ws.schild.java.VideoSize具有您首选大小的实例。您可以设置新编码视频的宽度和高度以及像素值,缩放原始视频。例如,如果您想将视频缩放到宽度为 512 像素,高度为 384 像素,您应该调用setSize(new VideoSize(512, 384))

2.3、CPU限制

要将 CPU 使用率限制为 1 个或多个线程(核心),请使用以下命令:

EncodingAttributes attrs= new EncodingAttributes();
attrs.setDecodingThreads(2);
attrs.setEncodingThreads(2);

3、内置编解码器

AVE 内置 ffmpeg 可执行文件包含以下解码器和编码器:

3.1、音频解码器

adpcm_4xm	
adpcm_adx	
adpcm_ct	
adpcm_ea	
adpcm_ea_r1 
adpcm_ea_r2 
adpcm_ea_r3	
adpcm_ea_xas	
adpcm_ima_amv	
adpcm_ima_dk3 
adpcm_ima_dk4	
adpcm_ima_ea_eacs	
adpcm_ima_ea_sead	
adpcm_ima_qt 
adpcm_ima_smjpeg 
adpcm_ima_wav	
adpcm_ima_ws	
adpcm_ms 
adpcm_sbpro_2	
adpcm_sbpro_3 
adpcm_sbpro_4	
adpcm_swf	
adpcm_thp 
adpcm_xa	
adpcm_yamaha 
alac	
ape	
atrac 
3	
cook	
dca 
dsicinaudio	
flac	
g726 
imc	
interplay_dpcm 
liba52	
libamr_nb	
libamr_wb	
libfaad	
libgsm 
libgsm_ms 
mace3	
mace6	
mp2	
mp3 
mp3adu	
mp3on4	
mpc 
sv7	
mpc 
sv8	
mpeg4aac 
nellymoser	
pcm_alaw	
pcm_mulaw	
pcm_s16be	
pcm_s16le 
pcm_s16le_planar 
pcm_s24be	
pcm_s24daud	
pcm_s24le	
pcm_s32be 
pcm_s32le	
pcm_s8 
pcm_u16be	
pcm_u16le	
pcm_u24be 
pcm_u24le	
pcm_u32be	
pcm_u32le 
pcm_u8	
pcm_zork 
qdm2	
real_144	
real_288	
roq_dpcm	
shorten 
smackaud 
sol_dpcm	
sonic	
truespeech	
tta 
vmdaudio	
vorbis	
wavpack	
wmav1	
wmav2 
ws_snd1	
xan_dpcm

3.2、音频编码器

ac3	
adpcm_adx	
adpcm_ima_wav	
adpcm_ms	
adpcm_swf 
adpcm_yamaha	
flac g726	
libamr_nb	
libamr_wb 
libfaac	
libgsm	
libgsm_ms	
libmp3lame	
libvorbis 
mp2	
pcm_alaw	
pcm_mulaw	
pcm_s16be	
pcm_s16le 
pcm_s24be	
pcm_s24daud 
pcm_s24le	
pcm_s32be	
pcm_s32le 
pcm_s8	
pcm_u16be	
pcm_u16le 
pcm_u24be	
pcm_u24le 
pcm_u32be	
pcm_u32le	
pcm_u8	
pcm_zork	
roq_dpcm 
sonic	
sonicls	
vorbis	
wmav1	
wmav2

3.3、视频解码器

4xm	
8bps	
VMware 
video	
aasc	
amv 
asv1	
asv2	
avs	
bethsoftvid	
bmp 
c93 
camstudio	
camtasia	
cavs	
cinepak 
cljr	
cyuv	
dnxhd	
dsicinvideo	
dvvideo 
dxa 
ffv1	
ffvhuff	
flashsv	
flic 
flv	
fraps	
gif	
h261	
h263 
h263i	
h264	
huffyuv	
idcinvideo 
indeo2 
indeo3	
interplayvideo	
jpegls	
kmvc	
loco 
mdec	
mjpeg	
mjpegb	
mmvideo 
mpeg1video 
mpeg2video	
mpeg4	
mpegvideo	
msmpeg4	
msmpeg4v1 
msmpeg4v2	
msrle	
msvideo1	
mszh	
nuv 
pam	
pbm	
pgm	
pgmyuv	
png 
ppm	
ptx 
qdraw	
qpeg	
qtrle 
rawvideo	
roqvideo	
rpza	
rv10	
rv20 
sgi	
smackvid	
smc	
snow 
sp5x 
svq1	
svq3	
targa	
theora	
thp 
tiertexseqvideo	
tiff	
truemotion1	
truemotion2 
txd 
ultimotion	
vb	
vc1	
vcr1	
vmdvideo 
vp3	
vp5	
vp6	
vp6a	
vp6f 
vqavideo	
wmv1 
wmv2	
wmv3	
wnv1 
xan_wc3	
xl	
zlib	
zmbv

3.4、视频编码器

asv1	
asv2	
bmp	
dnxhd	
dvvideo 
ffv1	
ffvhuff	
flashsv	
flv	
gif 
h261	
h263	
h263p 
huffyuv	
jpegls 
libtheora	
libx264	
libxvid	
ljpeg	
mjpeg 
mpeg1video	
mpeg2video 
mpeg4	
msmpeg4	
msmpeg4v1 
msmpeg4v2	
pam	
pbm	
pgm	
pgmyuv 
png	
ppm 
qtrle	
rawvideo	
roqvideo 
rv10	
rv20	
sgi	
snow	
svq1 
targa	
tiff	
wmv1	
wmv2	
zlib 
zmbv

4、使用方式

4.1、简单使用

最重要的 JAVE 类是ws.schild.jave.Encoder. 编码器对象公开了许多多媒体转码方法。为了使用 JAVE,您始终必须创建一个编码器实例:

Encoder encoder = new Encoder();

创建实例后,您可以调用encode()方法开始转码:

public void encode(ws.schild.MultimediaObject source,
               java.io.File target,
               ws.schild.jave.EncodingAttributes attributes)
        throws java.lang.IllegalArgumentException,
               ws.schild.jave.InputFormatException,
               ws.schild
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值