首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >与Xuggler转换

与Xuggler转换
EN

Stack Overflow用户
提问于 2014-05-13 08:28:59
回答 1查看 2.2K关注 0票数 1

我试着用Java和Xuggler来转换视频。但是,当我试图运行这段代码时,我会得到以下错误消息。

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

在线程“主”java.lang.IllegalArgumentException中转换异常:不支持线匹配接口SourceDataLine支持格式PCM_SIGNED 44100.0 Hz,16位,立体声,4字节/帧,支持小端。

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-16 14:47:24

如果将输出文件指定为"xxxx.mp4“,那么Xuggler将自动检测到您正在尝试对MP4进行编码。它将从这一事实中得出任何结论,比如视频编解码器和示例格式。您最好不要依赖于此,手动设置音频的采样速率信道计数比特率示例格式编解码器E 29,并为您的视频设置一个E 110帧率E 211、E 112帧大小<代码>E 213/代码>、E 114编解码cE 215和E 116比特率E<217/code>。

要做到这一点,您需要使用一些函数来设置所涉及的IMediaWriter、其基础IContainer、底层IStream及其底层IStreamCoder的属性。

现在,事情是这样的:有时输入文件将完全匹配想要的输出文件,而Xuggler将处理编码而不出问题。但是假设输入有不同的样例格式或采样率,然后将其编码到输出中将导致错误或格式错误的输出文件。

您最好在输入和输出之间插入一个IAudioResampler,这将把音频从其源格式转换为想要的输出格式。

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

您可以找到一个关于如何使用IAudioResampler over here的示例。

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

https://stackoverflow.com/questions/23626225

复制
相关文章

相似问题

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