[原创]JAVA环境下,增添xuggle外部库 将视频文件转换成音频文件

引进外部类库:xuggle-xuggler.jar 文件 


下载地址:http://www.xuggle.com/xuggler/downloads/



也可以直接从本文这里点击链接下载:

32 Bit, Java 1.5 or later xuggle-xuggler-setup.exe


下载完成之后安装,然后进安装目录  \Xuggle\share\java\jars

将目录下的  xuggle-xuggler.jar 文件导入到eclipse buildpath userLibrary里,

然后再进入  \Xuggle\bin 目录,将所有文件拷贝到 项目工程目录的 \bin 路径下(或者拷贝到你的JDK安装目录里的那个 \bin 目录下 也可以!)


以FLV转无损的WAV为例,贴上代码:

 

 

public class Main implements IMediaListener{
	
	IMediaWriter writer;
	boolean flag=false;

	public static void main(String[] args) {
		new Main().doIt();
	}

	public void doIt() {
		IMediaReader reader = ToolFactory.makeReader("E:\\aaa.flv");//E:\\aaa.rmvb  E:\\aaa.flv
		writer = ToolFactory.makeWriter("e:\\out.wav", reader);
		
		int sampleRate = 22050;//48000   22050
		int channels = 2;
		writer.addAudioStream(0, 0, ICodec.ID.CODEC_ID_PCM_S16LE, channels,
				sampleRate);
		reader.addListener(this);
		while (reader.readPacket() == null) {

		}
	}

	@Override
	public void onAddStream(IAddStreamEvent event) {
		// TODO Auto-generated method stub
		writer.onAddStream(event);
	}

	/**音频解码在这里*/
	@Override
	public void onAudioSamples(IAudioSamplesEvent event) {
		// TODO Auto-generated method stub
		writer.onAudioSamples(event);
	}

	@Override
	public void onClose(ICloseEvent event) {
		// TODO Auto-generated method stub
		writer.onClose(event);
	}

	@Override
	public void onCloseCoder(ICloseCoderEvent event) {
		// TODO Auto-generated method stub
		writer.onCloseCoder(event);
	}

	@Override
	public void onFlush(IFlushEvent event) {
		// TODO Auto-generated method stub
		writer.onFlush(event);
	}

	@Override
	public void onOpen(IOpenEvent event) {
		// TODO Auto-generated method stub
		writer.onOpen(event);
	}

	@Override
	public void onOpenCoder(IOpenCoderEvent event) {
		// TODO Auto-generated method stub
		writer.onOpenCoder(event);
	}

	@Override
	public void onReadPacket(IReadPacketEvent event) {
		// TODO Auto-generated method stub
		writer.onReadPacket(event);
	}

	@Override
	public void onVideoPicture(IVideoPictureEvent event) {
		// TODO Auto-generated method stub
		//这里屏蔽了Video的输出
	}

	@Override
	public void onWriteHeader(IWriteHeaderEvent event) {
		// TODO Auto-generated method stub
		writer.onWriteHeader(event);
	}

	@Override
	public void onWritePacket(IWritePacketEvent event) {
		// TODO Auto-generated method stub
		writer.onWritePacket(event);
	}

	@Override
	public void onWriteTrailer(IWriteTrailerEvent event) {
		// TODO Auto-generated method stub
		writer.onWriteTrailer(event);
	}
	
	public class MyCoder extends ICodec{

		protected MyCoder(long cPtr, boolean cMemoryOwn) {
			super(cPtr, cMemoryOwn);
			// TODO Auto-generated constructor stub
		}
	}
}
 

 

 

解码后的WAV文件在使用foobar2000播放时,效果如下图所示:

 

[原创]JAVA环境下,增添xuggle外部库 将视频文件转换成音频文件

 


注意:常见的WAV文件必须使用ICodec.ID.CODEC_ID_PCM_S16LE编码,channels 是声道数量,sampleRate 是采样率,

当使用ICodec.ID.CODEC_ID_PCM_S16LE给WAV文件编码时,

必须和源文件采样率一致,否则会出现播放时间缩短、播放速度加快或者相反的异常结果!

 

你可能感兴趣的:(java)