许格勒非法争辩



我正在尝试用Xuggler将电影(.mp4)转换为音频(.mp3)。我在OSX.上使用穿孔

 IMediaReader reader = ToolFactory.makeReader("/Users/nouv/Desktop/video1.mp4");
 IMediaWriter writer = ToolFactory.makeWriter("/Users/nouv/Desktop/audioOutput.mp3", reader);
 int sampleRate = 22050;
 int channels = 1;
 writer.addAudioStream(0, 0, ICodec.ID.CODEC_ID_MP3, channels, sampleRate);
 reader.addListener(writer);
 try {
   while (reader.readPacket() == null)
           ;
 } finally {}

我有这个错误:IllegalArgumentException:流[0]不是视频

Exception in thread "Animation Thread" java.lang.IllegalArgumentException: stream[0] is not video
at com.xuggle.mediatool.MediaWriter.encodeVideo(MediaWriter.java:754)
at com.xuggle.mediatool.MediaWriter.encodeVideo(MediaWriter.java:783)
at com.xuggle.mediatool.MediaWriter.onVideoPicture(MediaWriter.java:1434)
at com.xuggle.mediatool.AMediaToolMixin.onVideoPicture(AMediaToolMixin.java:166)
at com.xuggle.mediatool.MediaReader.dispatchVideoPicture(MediaReader.java:610)
at com.xuggle.mediatool.MediaReader.decodeVideo(MediaReader.java:519)
at com.xuggle.mediatool.MediaReader.readPacket(MediaReader.java:475)
at xuggle.setup(xuggle.java:135)
at processing.core.PApplet.handleDraw(PApplet.java:2117)
at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:193)
at processing.core.PApplet.run(PApplet.java:2020)
at java.lang.Thread.run(Thread.java:680)

我尝试了.mp4、.mov和.flv-movie,但都出现了同样的错误。

IContainer-container=IContainer.make();

    int result = container.open(inputFilename, IContainer.Type.READ, null);
     // check if the operation was successful
      if (result<0)
          throw new RuntimeException("Failed to open media file");
      int numStreams = container.getNumStreams();
      int audioStreamId = -1;
      IContainer writer = IContainer.make();
      writer.open(outputFilename, IContainer.Type.WRITE, IContainerFormat.make());

      for (int i=0; i<numStreams; i++) {
          IStream stream = container.getStream(i);
          IStreamCoder coder = stream.getStreamCoder();
          IStreamCoder audioCoder = IStreamCoder.make(IStreamCoder.Direction.ENCODING, coder);
          if( coder.getCodecType() == ICodec.Type.CODEC_TYPE_AUDIO){
              coder.open(IMetaData.make(), IMetaData.make());
              audioStreamId = i;
              ICodec inputCodec = ICodec.findDecodingCodec(ICodec.ID.CODEC_ID_MP3);
              if (inputCodec == null)
                  throw new IllegalArgumentException("could not find input codec id");
              if (audioStreamId == -1)
                  throw new RuntimeException("could not find audio stream in container: "+inputFilename);
              writer.addNewStream(audioCoder);
              if(writer.writeHeader() == 0)
              {
                  IPacket packet = IPacket.make();
                  while(container.readNextPacket(packet) >= 0){
                      if(packet.getStreamIndex() == audioStreamId)
                      {
                          if(coder.isOpen()){
                              writer.writePacket(packet);
                          } else {throw new RuntimeException("Could not open Coder"); }
                      }
                  }
              }else {throw new RuntimeException("Header not Written for writer container.");}
          }
          coder.close(); audioCoder.close();
      }
      writer.writeTrailer();
      writer.close();

希望这能有所帮助…:)

相关内容

  • 没有找到相关文章

最新更新