将视频转换为MP3

时间:2016-09-21 11:30:46

标签: android

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

我试过这个但是没有用。

我已经从这个链接实现,但它不适合我。 How do I extractor audio to mp3 from mp4 using java in Android?

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();
            }
        }
    }

}
  

new AudioFromVideo(videopath,audioPath).start();

2 个答案:

答案 0 :(得分:2)

您需要使用Android FFmpeg Library从Mp4视频中提取音频:

ffmpeg -i my_video.mp4 -ab 128k -ac 2 -ar 44100 -vn my_audio.mp3

以下是执行此操作的库的链接:

http://writingminds.github.io/ffmpeg-android-java/

http://www.android-arsenal.com/details/1/931

答案 1 :(得分:0)

可以在Android中以编程方式提取音频形式的vidoe文件。您可以执行此操作而无需使用任何外部库。可以通过使用MediaMuxer类来完成。

new AudioExtractor().genVideoUsingMuxer("Video source Path", "Audio destination path", -1, -1, true, false);

有关更好的理解和完整的代码,请参见本文。

https://androidprogrammatically425516919.wordpress.com/2020/04/21/how-to-convert-video-to-audio-in-android-programmatically/