我正在尝试使用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();
}
}
答案 0 :(得分:1)
如果您将输出文件指定为“xxxx.mp4”,那么Xuggler会自动检测您是否正在尝试编码MP4。它将从该事实中得出任何结论,例如要使用的视频编解码器和样本格式。明智的做法是不依赖于此,并手动设置采样率,通道数,比特率,样本格式您的音频的strong>和编解码器,并设置帧速率,帧大小,编解码器和比特率为您的视频。
要执行此操作,您需要使用一些函数来设置所涉及的IMediaWriter
,其基础IContainer
,其基础IStream
及其基础IStreamCoder
'的属性第
现在,问题在于:有时输入文件将完全匹配所需的输出文件,而Xuggler将毫无问题地处理编码。但是,假设输入具有不同的采样格式或采样率,然后将其编码到输出中将导致错误或输出文件格式错误。
最好在输入和输出之间插入IAudioResampler
,这会将音频从其源格式转换为所需的输出格式。
我认为这可能是问题所在。错误中提到的样本格式,即PCM_SIGNED,我相信通常不会用于MP4容器中的MP3或AAC音频。 IAudioResampler
将能够将其转换为更适合的样本格式。
您可以找到有关如何使用IAudioResampler
而非here的示例。