我有一个视频文件 .mp4
- 只有视频轨道。
我正在使用 MediaExtractor
和 MediaMuxer
添加音频文件。
这很好用。
我想在处理后的文件上添加另一个音轨。
所以我再次使用 MediaExtractor
和 MediaMuxer
来复制文件,(创建视频和音频轨道,读取 [extractor] 和写入 [muxer]) .此外,我正在尝试将第二条音轨添加到多路复用器。但这会引发错误 Failed to add the track to the muxer
。
在此link我们可以看到 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
}
还有其他方法吗? 优雅的方式?
顺便说一句,我正在努力避免使用第 3 方——比如 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
最佳答案
对于到达这里的人,我在 link 找到了这个官方文档. Muxing Multiple Video/Audio Tracks 似乎在旧 API 版本中不受支持,甚至在最新版本中受到限制。
关于android - 将第二个音轨添加到 MediaMuxer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36190614/