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/](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 |
| --- | --- |
| MTV | MTV format |
| RoQ | Id RoQ format |
| aac | ADTS AAC |
| ac3 | raw ac3 |
| aiff | Audio IFF |
| alaw | pcm A law format |
| amr | 3gpp amr file format |
| apc | CRYO APC format |
| ape | Monkey's Audio |
| asf | asf format |
| au | SUN AU Format |
| avi | avi format |
| avs | AVISynth |
| bethsoftvid | Bethesda 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 |
| dxa | dxa |
| ea | Electronic Arts Multimedia Format |
| ea_cdata | Electronic Arts cdata |
| ffm | ffm format |
| film_cpk | Sega FILM/CPK format |
| flac | raw flac |
| flic | FLI/FLC/FLX animation format |
| flv | flv format |
| gif | GIF Animation |
| gxf | GXF format |
| h261 | raw h261 |
| h263 | raw h263 |
| h264 | raw H264 video format |
| idcin | Id CIN format |
| image2 | image2 sequence |
| image2pipe | piped image2 sequence |
| ingenient | Ingenient MJPEG |
| ipmovie | Interplay MVE format |
| libnut | nut format |
| m4v | raw MPEG4 video format |
| matroska | Matroska File Format |
| mjpeg | MJPEG video |
| mm | American Laser Games MM format |
| mmf | mmf format |
| mov,mp4,m4a,3gp,3g2,mj2 | QuickTime/MPEG4/Motion JPEG 2000 format |
| mp3 | MPEG audio layer 3 |
| mpc | musepack |
| mpc8 | musepack8 |
| mpeg | MPEG1 System format |
| mpegts | MPEG2 transport stream format |
| mpegtsraw | MPEG2 raw transport stream format |
| mpegvideo | MPEG video |
| mulaw | pcm mu law format |
| mxf | MXF format |
| nsv | NullSoft Video format |
| nut | nut format |
| nuv | NuppelVideo format |
| ogg | Ogg format |
| psxstr | Sony Playstation STR format |
| rawvideo | raw video format |
| redir | Redirector format |
| rm | rm format |
| rtsp | RTSP input format |
| s16be | pcm signed 16 bit big endian format |
| s16le | pcm signed 16 bit little endian format |
| s8 | pcm signed 8 bit format |
| sdp | SDP |
| shn | raw shorten |
| siff | Beam Software SIFF |
| smk | Smacker Video |
| sol | Sierra SOL Format |
| swf | Flash format |
| thp | THP |
| tiertexseq | Tiertex Limited SEQ format |
| tta | true-audio |
| txd | txd format |
| u16be | pcm unsigned 16 bit big endian format |
| u16le | pcm unsigned 16 bit little endian format |
| u8 | pcm unsigned 8 bit format |
| vc1 | raw vc1 |
| vmd | Sierra VMD format |
| voc | Creative Voice File format |
| wav | wav format |
| wc3movie | Wing Commander III movie format |
| wsaud | Westwood Studios audio format |
| wsvqa | Westwood Studios VQA format |
| wv | WavPack |
| yuv4mpegpipe | YUV4MPEG pipe format |
| |
\-\-\-\-\-\-\-\-\-\-\-\- 编码 ------------
| 3g2 | 3gp2 format |
| --- | --- |
| 3gp | 3gp format |
| RoQ | Id RoQ format |
| ac3 | raw ac3 |
| adts | ADTS AAC |
| aiff | Audio IFF |
| alaw | pcm A law format |
| amr | 3gpp amr file format |
| asf | asf format |
| asf_stream | asf format |
| au | SUN AU Format |
| avi | avi format |
| crc | crc testing format |
| dv | DV video format |
| dvd | MPEG2 PS format (DVD VOB) |
| ffm | ffm format |
| flac | raw flac |
| flv | flv format |
| framecrc | framecrc testing format |
| gif | GIF Animation |
| gxf | GXF format |
| h261 | raw h261 |
| h263 | raw h263 |
| h264 | raw H264 video format |
| image2 | image2 sequence |
| image2pipe | piped image2 sequence |
| libnut | nut format |
| m4v | raw MPEG4 video format |
| matroska | Matroska File Format |
| mjpeg | MJPEG video |
| mmf | mmf format |
| mov | mov format |
| mp2 | MPEG audio layer 2 |
| mp3 | MPEG audio layer 3 |
| mp4 | mp4 format |
| mpeg | MPEG1 System format |
| mpeg1video | MPEG video |
| mpeg2video | MPEG2 video |
| mpegts | MPEG2 transport stream format |
| mpjpeg | Mime multipart JPEG format |
| mulaw | pcm mu law format |
| null | null video format |
| nut | nut format |
| ogg | Ogg format |
| psp | psp mp4 format |
| rawvideo | raw video format |
| rm | rm format |
| rtp | RTP output format |
| s16be | pcm signed 16 bit big endian format |
| s16le | pcm signed 16 bit little endian format |
| s8 | pcm signed 8 bit format |
| svcd | MPEG2 PS format (VOB) |
| swf | Flash format |
| u16be | pcm unsigned 16 bit big endian format |
| u16le | pcm unsigned 16 bit little endian format |
| u8 | pcm unsigned 8 bit format |
| vcd | MPEG1 System format (VCD) |
| vob | MPEG2 PS format (VOB) |
| voc | Creative Voice File format |
| wav | wav format |
| yuv4mpegpipe | YUV4MPEG pipe format |
| |
## 内置解码器和编码器
JAVE内置的ffmpeg执行包含以下解码器和编码器:
\-\-\-\-\- Audio decoders -----
| adpcm_4xm | adpcm_adx | adpcm_ct | adpcm_ea |
| --- | --- | --- | --- |
| adpcm_4xm | adpcm_adx | adpcm_ct | adpcm_ea |
| adpcm\_ea\_r2 | adpcm\_ea\_r3 | adpcm\_ea\_xas | adpcm\_ima\_amv |
| adpcm\_ima\_dk4 | adpcm\_ima\_ea_eacs | adpcm\_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 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 | |
| |
\-\-\-\-\- 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 | 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 | |
| | |
\-\-\-\-\- 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 | pgm | pgmyuv |
| 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://www.sauronsoftware.it/projects/jave/index.php)
链接:[http://pan.baidu.com/s/1eRMorUq](http://pan.baidu.com/s/1eRMorUq) 密码:gk9a