将视频转换为MP3

问题描述:

我想将视频(mp4)转换为Mp3格式。如果有人知道,请解释我。将视频转换为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(); 
      } 
     } 
    } 

} 

新AudioFromVideo(将videoPath,audioPath)。开始();

+1

请详细解释**,**,“它不工作”和“它不适合我”的含义。 – CommonsWare

+0

什么不起作用?详细解释 – Piyush

+0

它会在aInputBuffers = amc.getInputBuffers()处给我nullpointer;这行 – Kinjal

您需要使用Android FFmpeg的图书馆从MP4影带中提取音频:

的ffmpeg -i my_video.mp4 -AB 128K -ac-AR 44100 -vn my_audio.mp3

这里链接库,这是否:

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

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

+0

阅读[如何回答](http://*.com/help/how-to-answer)邮政编码部分..外部链接可能不会永远。 – Gattsu