JAVA多媒体处理库-JAVE

概要:

JAVA多媒体处理库-JAVE,可以对视频和音频进行转码

| |目录

安装与需求

为了使用JAVE在您的Java应用程序中,您必须添加文件JAVE - 1.0。jar在您的应用程序类路径中。
J2SE v.1.4 JAVE运行在Java运行时环境。
JAVE包括和利用ffmpeg执行为Windows和Linux操作系统在建造i386/32硬件平台。为了运行JAVE在其他平台上你必须内置的ffmpeg执行替换为另一个适合您的需求。这很简单,一旦你建立了自己的ffmpeg二进制文件。中描述的操作是“使用另一种ffmpeg可执行文件”部分。


Audio/Video编码器

最重要的是it.sauronsoftware.jave.Encoder JAVE类。编码器对象暴露许多多媒体转换的方法。为了使用JAVE,您必须创建一个编码器协助:

编码器编码器= new编码器();
一旦创建了实例,您就可以开始转换调用编码()方法:
公共空间编码(java.io.File来源,
java.io.File目标,
it.sauronsoftware.jave.EncodingAttributes属性)
抛出java.lang.IllegalArgumentException,
it.sauronsoftware.jave.InputFormatException,
it.sauronsoftware.jave.EncoderException
第一个参数,来源,代表了源文件解码。
目标,第二个参数是目标文件将被创建和编码。
属性参数的类型是it.sauronsoftware.jave。EncodingAttributes,是一种数据结构包含编码器所需的任何信息。
请注意,调用编码()是一个阻碍:该方法只返回一次转码操作已经完成(或失败)。如果你有兴趣监测代码转换操作看看“监测代码转换操作”部分。

编码器属性

指定你的喜好你必须提供一个it.sauronsoftware.jave转码操作。EncodingAttributes实例编码()调用。您可以创建自己的EncodingAttributes实例,你可以用以下方法:填充它
公共空间setAudioAttributes(it.sauronsoftware.jave。AudioAttributes AudioAttributes)
它集音频编码属性。如果没有呼吁一个新的EncodingAttributes实例,或者如果给定的参数为空,没有音频流将被纳入编码文件。参见“音频编码属性”。
公共空间setVideoAttributes(it.sauronsoftware.jave。AudioAttributes videoAttributes)
它集视频编码的属性。如果没有呼吁一个新的EncodingAttributes实例,或者如果给定的参数为空,不包括在视频编码文件。参见“视频编码属性”。
公共空间setFormat(. lang。字符串格式)
它设置的格式流容器,将用于新编码的文件。给定的参数代表了格式名称。支持的编码格式的名字是有效的,只有当它出现在返回的列表getSupportedEncodingFormats()方法的实例使用的编码器。
公共空间setOffset(. lang。浮动补偿)
它设定了一个偏移量的转换操作。源文件将被重新编码开始抵消秒开始以来。例子,如果你想削减的第一个5秒源文件,你应该callsetOffset EncodingAttributes对象(5)传递到编码器。
公共空间setDuration(. lang。浮动时间)
它集代码转换操作的持续时间。只有秒持续时间的来源将在目标文件被重新编码。在例子中如果你想提取和转换三十秒从源的一部分,你应该叫setDuration(30)EncodingAttributes对象传递到编码器。

Audio编码器属性

音频编码it.sauronsoftware.jave.AudioAttributes类的实例所代表的属性。这种对象上可用的方法是:
公共空间setCodec(. lang。字符串编码)
它集编解码器的名称将用于音频流的转换。你必须从列表中选择一个值返回的getAudioEncoders()方法当前编码器的实例。否则你可以通过AudioAttributes。DIRECT_STREAM_COPY特殊价值,需要复制的原始音频流从源文件。
公共空间setBitRate(. lang。整数比特率)
它集新编码音频流的比特率值。如果没有比特率值设置,默认将挑选一个编码器。表达的值应该是位每秒。例子,如果你想要一个128 kb / s比特率你应该叫setBitRate(新的整数(128000))。
公共空间setSamplingRate(. lang。整数比特率)
设置采样率的新编码音频流。如果没有设置采样率值,默认将挑选一个编码器。表达的值应该是赫兹。例子,如果你想要一个CD-like 44100 Hz采样率,你应该叫setSamplingRate(新的整数(44100))。
公共空间setChannels(. lang。整数频道)
它集音频通道的数量将用于编码音频流(1 = mono,2 =立体声)。如果没有通道值设置,默认将挑选一个编码器。
公共空间setVolume中(. lang。整卷)
这个方法可以被称为改变音频流的体积。256意味着没有体积变化的值。所以一个值小于256是一个体积减少,同时一个值大于256音频流的体积将会增加。

Video编码器属性

视频编码属性的类的实例代表it.sauronsoftware.jave.videoattributes。这类对象的可用方法是:

公共无效setcodec(java.lang.string编解码器)

它设置的编解码器的名称,将用于视频流的转码。你必须从列表中选择一个值由当前编码器的getvideoencoders()方法返回的实例。否则,你可以通过videoattributes.direct_stream_copy特殊价值,需要对原始视频流从源文件的副本。

公共无效settag(java.lang.string标签)

它集标签/ FOURCC价值相关的编码后的视频流再。如果没有设置默认值,则编码器将被选中。标签值经常被使用的多媒体播放器,选择在流上运行的视频解码器。例如一个MPEG 4视频流与“DivX”标签的值将被解码的播放器使用了默认的DivX解码器。而且,顺便说一句,这正是一个格式是:MPEG 4视频流与一个附加的“DivX”标签/面价值!

公共无效setbitrate(java.lang.integer比特率)

这套新的重新编码视频流的比特率值。如果没有比特率值设置,默认将由编码器选择。该值应以每秒位表示。例如如果你想要一个360 kb / s的比特率,你应该打电话给setbitrate(新的整数(360000))。

公共无效该方法(java.lang.integer比特率)

它为新的重新编码的音频流设置帧速率值。如果没有码率帧率设置,默认将由编码器选择。该值应在每秒帧中表示。例如如果你想要一个30帧的帧速率你应该调用该方法(新的整数(30))。

公共无效组量(it.sauronsoftware.jave.videosize大小)

它设置的视频流中的图像的大小和比例。如果没有设置值,编码器将保留原来的大小和比例。否则,你可以通过it.sauronsoftware.java.videosize实例,您的首选尺寸。您可以设置新的编码视频的宽度和高度,与像素值,缩放原来的一个。例如如果你想要大规模的视频为512像素的宽度和高度384px你应该叫setsize(新视频(512,384))。

转码监听器

你可以监控一个代码转换操作的侦听器。Java定义了it.sauronsoftware.jave.encoderprogresslistener接口。这个接口可以通过应用程序实现,具体encoderprogresslistener实例可以通过编码器。编码器将调用您的侦听器方法每次发生重大事件。通过encoderprogresslistener你应该使用的方法,这个定义encode()编码器:

公共无效编码(java.io.file源,

java.io.file目标,

it.sauronsoftware.jave.encodingattributes属性,

it.sauronsoftware.jave.encoderprogresslistener听众)

把java.lang.illegalargumentexception,

it.sauronsoftware.jave.inputformatexception,

it.sauronsoftware.jave.encoderexception

实施encoderprogresslistener接口必须定义以下所有方法:

公共无效sourceinfo(it.sauronsoftware.jave.multimediainfo信息)

编码器调用此方法后,分析了源文件。信息参数的it.sauronsoftware.jave.multimediainfo类的一个实例,它代表了源音频和视频流及集装箱信息。

公共无效进步(int千分率)

这种方法被称为由编码器的每一个在编码操作的进展已完成。的千分率参数是一个值表示由当前操作的范围内达到这一点是从0(手术刚开始)到1000(操作完成)。

公共无效消息(java.lang.string消息)

这种方法被称为编码器,通知一个消息的代码转换操作(通常是一个警告)。

转换失败

当然,一个转换操作可能失败。然后encode()方法将传播异常。根据所发生的事情,例外将是以下:

java.lang.illegalargumentexception

由于传递给编码器的编码属性已被确认为无效,该代码转换操作从未启动。这通常发生在encodingattributes实例给编码器要求一个没有音频和视频流的编码没有容器(包括audioattributes和videoattribues属性为空或不设置)。

it.sauronsoftware.jave.inputformatexception

无法解码源文件。当源文件容器、视频流格式或解码器不支持音频流时,会发生这种情况。你可以检查支持容器和插入解码器调用编码器的方法getsupporteddecodingformats(),getaudiodecoders()和getvideodecoders()。

it.sauronsoftware.jave.encoderexpection

操作失败在trancoding由于一个内部错误。你应该检查异常消息,你也可以使用一个encoderprogresslistener实例检查由编码器发出的任何消息。

获取媒体信息

你可以在转码得到有关现有的多媒体文件的信息,调用编码器getinfo()方法。的getinfo()方法提供给你们的有关的文件和包裹起来的音频和视频流应用的集装箱信息:

公共it.sauronsoftware.jave.multimediainfo getInfo(java.io.file源)

把it.sauronsoftware.jave.inputformatexception,

it.sauronsoftware.jave.encoderexception

一个it.sauronsoftware.jave.multimediainfo对象封装了对整个多媒体内容和流的信息,利用it.sauronsoftware.jave.audioinfo和it.sauronsoftware.jave.videoinfo实例描述包的音频和视频。这些对象是类似于encodingattributes,audioattributes和videoattributes的人,但他们的作品在只读模式。检查Java API javadoc文档,捆绑了Java分布,以获得关于它们的更多细节。

Using an alternative ffmpeg executable

Java不是纯java:它作为在ffmpeg包装(http://ffmpeg.mplayerhq.hu/)执行。FFmpeg是一个开源和自由软件项目完全用C写的,所以它的可执行文件不能很容易地移植到另一个从机。你需要一个预编译的版本的ffmpeg为了运行Java在您的目标机。的Java分布包括两预编译的可执行文件的ffmpeg:Windows和Linux,i386编译/ 32位硬件结构。在大多数情况下,这应该是足够的。如果这是不够的,你的具体情况,你仍然可以运行Java,但你需要一个平台特定的FFmpeg可执行。上网查一下。你甚至可以建立它自己的代码(和文件来建立它在官方的FFmpeg网站)。一旦你获得了FFmpeg可执行适合你的需要,你必须把它在Java库。这是一个简单的操作。有给你一个抽象类称为it.sauronsoftware.jave.ffmpeglocator。扩展。你所要做的就是定义以下方法:

公共java.lang.string getffmpegexecutablepath()

这种方法应该返回一个基于路径的自定义的FFmpeg可执行文件系统。

一旦你的课准备好了,假设你叫它myffmpegexecutablelocator,你必须创建一个备用的编码器使用它而不是默认的定位器:

编码器=新的编码器(新myffmpegexecutablelocator())

你也可以使用相同的程序,切换到其他版本的ffmpeg,即使你是在一个平台上的可执行文件被捆绑在Java分布。

无论如何,小心你的应用测试:Java不保证定制FFmpeg可执行文件不同于捆绑的正常工作。

支持的格式

内置的Java可执行了以下FFmpeg多媒体容器格式的支持:


------------ 解码 ------------

4xm
4X Technologies format
MTVMTV format
RoQId RoQ format
aacADTS AAC
ac3raw ac3
aiffAudio IFF
alawpcm A law format
amr3gpp amr file format
apcCRYO APC format
apeMonkey's Audio
asfasf format
auSUN AU Format
aviavi format
avsAVISynth
bethsoftvidBethesda Softworks 'Daggerfall' VID format
c93
Interplay C93
daud
D-Cinema audio format
dsicin
Delphine Software International CIN format
dts
raw dts
dv
DV video format
dxadxa
eaElectronic Arts Multimedia Format
ea_cdataElectronic Arts cdata
ffmffm format
film_cpkSega FILM/CPK format
flacraw flac
flicFLI/FLC/FLX animation format
flvflv format
gifGIF Animation
gxfGXF format
h261raw h261
h263raw h263
h264raw H264 video format
idcinId CIN format
image2image2 sequence
image2pipepiped image2 sequence
ingenientIngenient MJPEG
ipmovieInterplay MVE format
libnutnut format
m4vraw MPEG4 video format
matroskaMatroska File Format
mjpegMJPEG video
mmAmerican Laser Games MM format
mmfmmf format
mov,mp4,m4a,3gp,3g2,mj2QuickTime/MPEG4/Motion JPEG 2000 format
mp3MPEG audio layer 3
mpcmusepack
mpc8musepack8
mpegMPEG1 System format
mpegtsMPEG2 transport stream format
mpegtsrawMPEG2 raw transport stream format
mpegvideoMPEG video
mulawpcm mu law format
mxfMXF format
nsvNullSoft Video format
nutnut format
nuvNuppelVideo format
oggOgg format
psxstrSony Playstation STR format
rawvideoraw video format
redirRedirector format
rmrm format
rtspRTSP input format
s16bepcm signed 16 bit big endian format
s16lepcm signed 16 bit little endian format
s8pcm signed 8 bit format
sdpSDP
shnraw shorten
siffBeam Software SIFF
smkSmacker Video
solSierra SOL Format
swfFlash format
thpTHP
tiertexseqTiertex Limited SEQ format
ttatrue-audio
txdtxd format
u16bepcm unsigned 16 bit big endian format
u16lepcm unsigned 16 bit little endian format
u8pcm unsigned 8 bit format
vc1raw vc1
vmdSierra VMD format
vocCreative Voice File format
wavwav format
wc3movieWing Commander III movie format
wsaudWestwood Studios audio format
wsvqaWestwood Studios VQA format
wvWavPack
yuv4mpegpipeYUV4MPEG pipe format



------------ 编码 ------------

3g2
3gp2 format
3gp
3gp format
RoQ
Id RoQ format
ac3
raw ac3
adtsADTS AAC
aiffAudio IFF
alawpcm A law format
amr3gpp amr file format
asfasf format
asf_streamasf format
auSUN AU Format
aviavi format
crccrc testing format
dvDV video format
dvdMPEG2 PS format (DVD VOB)
ffmffm format
flacraw flac
flvflv format
framecrcframecrc testing format
gifGIF Animation
gxfGXF format
h261raw h261
h263raw h263
h264raw H264 video format
image2image2 sequence
image2pipepiped image2 sequence
libnutnut format
m4vraw MPEG4 video format
matroskaMatroska File Format
mjpegMJPEG video
mmfmmf format
movmov format
mp2MPEG audio layer 2
mp3MPEG audio layer 3
mp4mp4 format
mpegMPEG1 System format
mpeg1videoMPEG video
mpeg2videoMPEG2 video
mpegtsMPEG2 transport stream format
mpjpegMime multipart JPEG format
mulawpcm mu law format
nullnull video format
nutnut format
oggOgg format
psppsp mp4 format
rawvideoraw video format
rmrm format
rtpRTP output format
s16bepcm signed 16 bit big endian format
s16lepcm signed 16 bit little endian format
s8pcm signed 8 bit format
svcdMPEG2 PS format (VOB)
swfFlash format
u16bepcm unsigned 16 bit big endian format
u16lepcm unsigned 16 bit little endian format
u8pcm unsigned 8 bit format
vcdMPEG1 System format (VCD)
vobMPEG2 PS format (VOB)
vocCreative Voice File format
wavwav format
yuv4mpegpipeYUV4MPEG pipe format



内置解码器和编码器

JAVE内置的ffmpeg执行包含以下解码器和编码器:

----- Audio decoders -----

adpcm_4xm
adpcm_adx
adpcm_ct
adpcm_ea
adpcm_4xm
adpcm_adx
adpcm_ct
adpcm_ea
adpcm_ea_r2adpcm_ea_r3
adpcm_ea_xas
adpcm_ima_amv
adpcm_ima_dk4
adpcm_ima_ea_eacsadpcm_ea_r1
adpcm_ima_dk3
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 sv8mpeg4aac
nellymoser
pcm_alaw
pcm_mulaw
pcm_s16be
pcm_s16le
pcm_s16le_planar
pcm_s24be
pcm_s24daud
pcm_s24le
pcm_s32be
pcm_s32lepcm_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






----- Audio encoders -----

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

                   

----- Video decoders -----

4xm
8bps
VMware video
aascamv
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
sgismackvid
smc
snow
sp5x
svq1
svq3
targa
theora
thp
tiertexseqvideotiff
truemotion1
truemotion2
txd
ultimotion
vb
vc1
vcr1
vmdvideo
vp3
vp5vp6vp6avp6f
vqavideowmv1wmv2wmv3wnv1
xan_wc3xlzlibzmbv





    

----- Video encoders -----


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
pgmpgmyuv
png
ppm
qtrle
rawvideo
roqvideo
rv10
rv20
sgi
snow
svq1
targa
tiff
wmv1
wmv2
zlib
zmbv





Examples

获取媒体文件信息:

File file = new File("E:\\青花瓷.mkv");
Encoder encoder = new Encoder();			//创建解码器
MultimediaInfo info = encoder.getInfo(file);//获取媒体信息
AudioInfo ai = info.getAudio();				//音频信息
VideoInfo vi = info.getVideo();				//视频信息
// ------ 音频信息 ------- 
System.out.println(ai.getDecoder());		//解码器
System.out.println(ai.getChannels());		//声道
System.out.println(ai.getBitRate());		//比特率
System.out.println(ai.getSamplingRate());	//采样率
// ------ 视频信息 ------- 
System.out.println(vi.getDecoder());		//解码器
System.out.println(vi.getBitRate());		//比特率
System.out.println(vi.getFrameRate());		//帧率
VideoSize size = vi.getSize();
System.out.println(size.getWidth());		//视频宽度
System.out.println(size.getHeight());		//视频高度

From a generic AVI to a youtube-like FLV movie, with an embedded MP3 audio stream:

File source = new File("source.avi");
File target = new File("target.flv");
AudioAttributes audio = new AudioAttributes();
audio.setCodec("libmp3lame");
audio.setBitRate(new Integer(64000));
audio.setChannels(new Integer(1));
audio.setSamplingRate(new Integer(22050));
VideoAttributes video = new VideoAttributes();
video.setCodec("flv");
video.setBitRate(new Integer(160000));
video.setFrameRate(new Integer(15));
video.setSize(new VideoSize(400, 300));
EncodingAttributes attrs = new EncodingAttributes();
attrs.setFormat("flv");
attrs.setAudioAttributes(audio);
attrs.setVideoAttributes(video);
Encoder encoder = new Encoder();
encoder.encode(source, target, attrs);

Next lines extracts audio informations from an AVI and store them in a plain WAV file:

File source = new File("source.avi");
File target = new File("target.wav");
AudioAttributes audio = new AudioAttributes();
audio.setCodec("pcm_s16le");
EncodingAttributes attrs = new EncodingAttributes();
attrs.setFormat("wav");
attrs.setAudioAttributes(audio);
Encoder encoder = new Encoder();
encoder.encode(source, target, attrs);

Next example takes an audio WAV file and generates a 128 kbit/s, stereo, 44100 Hz MP3 file:

File source = new File("source.wav");
File target = new File("target.mp3");
AudioAttributes audio = new AudioAttributes();
audio.setCodec("libmp3lame");
audio.setBitRate(new Integer(128000));
audio.setChannels(new Integer(2));
audio.setSamplingRate(new Integer(44100));
EncodingAttributes attrs = new EncodingAttributes();
attrs.setFormat("mp3");
attrs.setAudioAttributes(audio);
Encoder encoder = new Encoder();
encoder.encode(source, target, attrs);

Next one decodes a generic AVI file and creates another one with the same video stream of the source and a re-encoded low quality MP3 audio stream:

File source = new File("source.avi");
File target = new File("target.avi");
AudioAttributes audio = new AudioAttributes();
audio.setCodec("libmp3lame");
audio.setBitRate(new Integer(56000));
audio.setChannels(new Integer(1));
audio.setSamplingRate(new Integer(22050));
VideoAttributes video = new VideoAttributes();
video.setCodec(VideoAttributes.DIRECT_STREAM_COPY);
EncodingAttributes attrs = new EncodingAttributes();
attrs.setFormat("avi");
attrs.setAudioAttributes(audio);
attrs.setVideoAttributes(video);
Encoder encoder = new Encoder();
encoder.encode(source, target, attrs);

Next one generates an AVI with MPEG 4/DivX video and OGG Vorbis audio:

File source = new File("source.avi");
File target = new File("target.avi");
AudioAttributes audio = new AudioAttributes();
audio.setCodec("libvorbis");
VideoAttributes video = new VideoAttributes();
video.setCodec("mpeg4");
video.setTag("DIVX");
video.setBitRate(new Integer(160000));
video.setFrameRate(new Integer(30));
EncodingAttributes attrs = new EncodingAttributes();
attrs.setFormat("mpegvideo");
attrs.setAudioAttributes(audio);
attrs.setVideoAttributes(video);
Encoder encoder = new Encoder();
encoder.encode(source, target, attrs);

A smartphone suitable video:

File source = new File("source.avi");
File target = new File("target.3gp");
AudioAttributes audio = new AudioAttributes();
audio.setCodec("libfaac");
audio.setBitRate(new Integer(128000));
audio.setSamplingRate(new Integer(44100));
audio.setChannels(new Integer(2));
VideoAttributes video = new VideoAttributes();
video.setCodec("mpeg4");
video.setBitRate(new Integer(160000));
video.setFrameRate(new Integer(15));
video.setSize(new VideoSize(176, 144));
EncodingAttributes attrs = new EncodingAttributes();
attrs.setFormat("3gp");
attrs.setAudioAttributes(audio);
attrs.setVideoAttributes(video);
Encoder encoder = new Encoder();
encoder.encode(source, target, attrs);

相关链接

http://www.sauronsoftware.it/projects/jave/index.php

链接:http://pan.baidu.com/s/1eRMorUq 密码:gk9a


评论关闭
评论 还能输入200
评论关闭
评论 还能输入200
资料加载中...
已关注 , 取消