【问题标题】:Converting with Xuggler使用 Xuggler 进行转换
【发布时间】:2014-05-13 08:28:59
【问题描述】:

我正在尝试使用 Java 和 Xuggler 转换视频。但是当我尝试运行此代码时,我收到以下错误消息。

我需要手动指定格式还是默认为 mp4?

正在转换 线程“main”中的异常 java.lang.IllegalArgumentException:没有行匹配接口 SourceDataLine 支持格式 PCM_SIGNED 44100.0 Hz,16 位,立体声,4 字节/帧,支持 little-endian。

at javax.sound.sampled.AudioSystem.getLine(Unknown Source)
at com.xuggle.mediatool.MediaViewer.getJavaSoundLine(MediaViewer.java:730)
at com.xuggle.mediatool.MediaViewer.getAudioQueue(MediaViewer.java:575)
at com.xuggle.mediatool.MediaViewer.onAddStream(MediaViewer.java:440)
at com.xuggle.mediatool.AMediaToolMixin.onAddStream(AMediaToolMixin.java:78)
at com.xuggle.mediatool.MediaReader.getStreamCoder(MediaReader.java:375)
at com.xuggle.mediatool.MediaReader.readPacket(MediaReader.java:461)
at at.jku.tk.mms.xuggler.VideoTranscoderApp.transcode(VideoTranscoderApp.java:44)
at at.jku.tk.mms.xuggler.VideoTranscoderApp.main(VideoTranscoderApp.java:53)


    IMediaReader mediaReader = 
           ToolFactory.makeReader(source.getAbsolutePath());

    // create a media writer
    IMediaWriter mediaWriter = 
           ToolFactory.makeWriter(target.getAbsolutePath(), mediaReader);

    // add a writer to the reader, to create the output file
    mediaReader.addListener(mediaWriter);

    // create a media viewer with stats enabled
    IMediaViewer mediaViewer = ToolFactory.makeViewer(true);
    System.out.println("converting");
    // add a viewer to the reader, to see the decoded media
    mediaReader.addListener(mediaViewer);

    // read and decode packets from the source file and
    // and dispatch decoded audio and video to the writer
    while (mediaReader.readPacket() == null) ;
}

public static void main(String[] args) {
    File source = new File(args[0]);
    if (source.canRead()) {
        File target = new File(args[1]);
        VideoTranscoderApp transcoder = new VideoTranscoderApp(source,
                target);
        transcoder.transcode();
    }
}

【问题讨论】:

  • 您的视频有多少个频道?你可以试试其他视频吗?可能xuggler不支持这个
  • 一个视频和两个音频。我试过另一个。我在哪里可以在 xuggler 中指定目标格式?
  • 我希望我能给你一个工作样本,但是我的办公室阻止了音频/视频:(但是这是我在做 xuggler poc benfarahmand.com/2012/11/…987654321@ 时提到的教程

标签: java xuggler


【解决方案1】:

如果您将输出文件指定为“xxxx.mp4”,那么 Xuggler 将自动检测您是否正在尝试对 MP4 进行编码。它将从该事实中得出任何结论,例如要使用的视频编解码器和示例格式。明智的做法是不要依赖它,手动设置采样率通道数比特率采样格式codec 为您的音频设置帧速率帧大小codec视频的比特率

为此,您需要使用一些函数来设置所涉及的IMediaWriter、其底层IContainer、其底层IStream 及其底层IStreamCoder 的属性。

现在,事情是这样的:有时输入文件会完美匹配所需的输出文件,而 Xuggler 会毫无问题地处理编码。但是假设输入有不同的采样格式或采样率,那么将其编码到输出中会导致错误或格式错误的输出文件。

您最好在输入和输出之间插入IAudioResampler,这会将音频从其源格式转换为所需的输出格式。

我相信这可能是这里的问题。您的错误中提到的示例格式,即 PCM_SIGNED,我相信通常不用于 MP4 容器中的 MP3 或 AAC 音频。 IAudioResampler 将能够将其转换为更适合的样本格式。

您可以找到有关如何使用IAudioResampler 而非here 的示例。

【讨论】:

    猜你喜欢
    • 2011-10-17
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多