java声音提取_如何在Android中使用java从mp4中提取音频到mp...

这篇博客介绍了如何在Android应用中使用Java从MP4视频中提取音频数据,并以PCM格式保存。通过MediaExtractor和MediaCodec进行音频提取,然后提到可以使用lame库将PCM数据编码成MP3格式。示例代码展示了从视频文件中提取音频的具体步骤。
摘要由CSDN通过智能技术生成

这个问题有点过于复杂.我知道如何实现它.

这里是从视频文件中提取音频数据的代码,但它是PCM数据,而不是mp3:

public class AudioFromVideo{

private String audio,video;

private MediaCodec amc;

private MediaExtractor ame;

private MediaFormat amf;

private String amime;

public AudioFromVideo(String srcVideo,String destAudio){

this.audio=destAudio;

this.video=srcVideo;

ame=new MediaExtractor();

init();

}

public void init(){

try {

ame.setDataSource(video);

amf=ame.getTrackFormat(1);

ame.selectTrack(1);

amime=amf.getString(MediaFormat.KEY_MIME);

amc=MediaCodec.createDecoderByType(amime);

amc.configure(amf, null, null, 0);

amc.start();

} catch (IOException e) {

e.printStackTrace();

}

}

public void start(){

new AudioService(amc,ame,audio).start();

}

private class AudioService extends Thread{

private MediaCodec amc;

private MediaExtractor ame;

private ByteBuffer[] aInputBuffers,aOutputBuffers;

private String destFile;

@SuppressWarnings("deprecation")

AudioService(MediaCodec amc,MediaExtractor ame,String destFile){

this.amc=amc;

this.ame=ame;

this.destFile=destFile;

aInputBuffers=amc.getInputBuffers();

aOutputBuffers=amc.getOutputBuffers();

}

@SuppressWarnings("deprecation")

public void run(){

try {

OutputStream os=new FileOutputStream(new File(destFile));

long count=0;

while(true){

int inputIndex=amc.dequeueInputBuffer(0);

if(inputIndex==-1){

continue;

}

int sampleSize=ame.readSampleData(aInputBuffers[inputIndex], 0);

if(sampleSize==-1)break;

long presentationTime=ame.getSampleTime();

int flag=ame.getSampleFlags();

ame.advance();

amc.queueInputBuffer(inputIndex, 0, sampleSize, presentationTime, flag);

BufferInfo info=new BufferInfo();

int outputIndex=amc.dequeueOutputBuffer(info, 0);

if (outputIndex >= 0) {

byte[] data=new byte[info.size];

aOutputBuffers[outputIndex].get(data, 0, data.length);

aOutputBuffers[outputIndex].clear();

os.write(data);

count+=data.length;

Log.i("write", ""+count);

amc.releaseOutputBuffer(outputIndex, false);

} else if (outputIndex == MediaCodec.INFO_OUTPUT_BUFFERS_CHANGED) {

aOutputBuffers = amc.getOutputBuffers();

} else if (outputIndex == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) {}

}

os.flush();

os.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

例如,要从视频文件video.mp4中提取音频数据,并将提取的日期保存到audio.pcm文件中,请编写如下代码:

String videoPath=PATH+"/video.mp4";

String audioPath=PATH+"/audio.pcm";

new AudioFromVideo(video.audio).start();

如果您需要mp3数据,可以使用lame mp3 lib将PCM数据编码为MP3格式.我有所有代码.但是将它们全部粘贴在这里并不值得.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值