我有一个视频文件.mp4 -只有视频轨道。
我使用MediaExtractor和MediaMuxer来添加音频文件。这个很好用。
在处理过的文件上,我想添加另一个音频轨道。
因此,我再次使用MediaExtractor和MediaMuxer复制文件,(创建视频和音频轨道、读取提取器和编写muxer)。此外,我试图添加第二个音频轨道的穆克塞。但这会引发错误Failed to add the track to the muxer。
在这个链接中,我们可以看到muxer不支持多个轨道。
链接中的代码:
// Throws exception b/c 2 audio tracks were added.
muxer = new MediaMuxer(outputFile, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4);
muxer.addTrack(MediaFormat.createAudioFormat("audio/mp4a-latm", 48000, 1));
try {
muxer.addTrack(MediaFormat.createAudioFormat("audio/mp4a-latm", 48000, 1));
fail("should throw IllegalStateException.");
} catch (IllegalStateException e) {
// expected
}还有别的办法吗?优雅的方式?
顺便说一句,我在尽量避免使用第三方-比如ffmpeg之类的..。但如果是我唯一的解决办法..。
-编辑--
我代码中的相关部分
MediaMuxer muxer = new MediaMuxer(outputFile, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4);
MediaExtractor extractor = new MediaExtractor();
extractor.setDataSource(videoAndAudioFile);
for (int currTrackIdx = 0; currTrackIdx < extractor.getTrackCount(); currTrackIdx++) {
MediaFormat trackFormat = extractor.getTrackFormat(currTrackIdx);
tracksIdx.add(muxer.addTrack(trackFormat));
}
MediaExtractor extractor2 = new MediaExtractor();
extractor2.setDataSource(secondAudioFile);
MediaFormat trackFormat = extractor2.getTrackFormat(0);
tracksIdx.add(muxer.addTrack(trackFormat)); // Crashes here发布于 2020-09-15 14:45:12
对于到达这里的人,我在链接找到了一位官方医生。在旧的API版本中似乎不支持多个视频/音频轨道,甚至在最新版本中也不支持。
https://stackoverflow.com/questions/36190614
复制相似问题