首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >徐格勒illegalArgumentExeception

徐格勒illegalArgumentExeception
EN

Stack Overflow用户
提问于 2013-02-21 19:29:43
回答 1查看 1.1K关注 0票数 1

我正在尝试转换一个电影(.mp4)在音频(.mp3)与Xuggler。我在OS上使用porcessing。

代码语言:javascript
复制
 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 : stream不是视频

代码语言:javascript
复制
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电影,我有同样的错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-24 16:06:03

IContainer容器= IContainer.make();

代码语言:javascript
复制
    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();

希望这能帮到你。:)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15001148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档