将视频转换为MP3

3

我想将视频(mp4)转换为mp3格式。如果有人知道,请解释一下。

我已经尝试过,但它没有起作用。

我从这个链接中实现了它,但对我来说不起作用。 如何在Android中使用Java从mp4提取音频到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);
                    MediaCodec.BufferInfo info = new MediaCodec.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.e("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();
            }
        }
    }

}

使用videopath和audioPath创建一个新的AudioFromVideo对象并启动。


1
请详细解释一下,“它不起作用”和“对我来说它行不通”的含义。 - CommonsWare
什么出了问题?请详细说明。 - Piyush
这行代码会导致空指针异常:aInputBuffers = amc.getInputBuffers(); - Kinjal
有人能帮我将mp3转换成mp4吗?(音频转视频),并且还需要在视频中显示一张图片...我无法发布问题,急需帮助。 - Drashti
2个回答

4

阅读如何回答文章的代码部分...外部链接可能不会永久存在。 - Maveňツ

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接