我们使用 mkvmerge 将用户上传的音频合并为一个文件(这一切都是通过 django 网站中的代码完成的)。
命令行看起来像mkvmerge -o /path/to/output.webm -w /file/to/concat1.oga + /file/to/concat2.oga
(可能有数百个文件,但这不是问题)。
它通常运行良好,除了几个文件,我们正在尝试找出这些问题,以便我们可以改进我们的代码。
我们得到的错误是:
Error: The track number 0 from the file '/path/to/file1.oga' cannot be appended to the track number 0 from the file '/path/to/file2.oga'. The formats do not match.
这两个文件都是有效的 ogg/vorbis 文件,如 ogginfo 的输出所示:
Processing file "/path/to/file1.oga"...
New logical stream (#1, serial: 32b21854): type vorbis
Vorbis headers parsed for stream 1, information follows...
Version: 0
Vendor: Xiph.Org libVorbis I 20101101 (Schaufenugget)
Channels: 1
Rate: 22050
Nominal bitrate: 45.111000 kb/s
Upper bitrate not set
Lower bitrate not set
User comments section follows...
ENCODER=libsndfile
TITLE=Tape1
Vorbis stream 1:
Total data length: 8453 bytes
Playback length: 0m:01.532s
Average bitrate: 44.126101 kb/s
Logical stream 1 ended
并且 ogginfo /path/to/file2.oga 给我:
Processing file "/path/to/file2.oga"...
New logical stream (#1, serial: 46c1e760): type vorbis
Vorbis headers parsed for stream 1, information follows...
Version: 0
Vendor: Xiph.Org libVorbis I 20101101 (Schaufenugget)
Channels: 1
Rate: 22050
Nominal bitrate: 58.000000 kb/s
Upper bitrate not set
Lower bitrate not set
User comments section follows...
TITLE=Tape2
Vorbis stream 1:
Total data length: 12121 bytes
Playback length: 0m:01.787s
Average bitrate: 54.234588 kb/s
Logical stream 1 ended
我能看到的唯一区别是比特率,从我对 vorbis 格式的理解来看,这应该不是问题。
对于该问题可能是什么,您有什么想法吗?
答案1
如果有人感兴趣的话,这里有一个解决这个问题的方法。
问题是,webm 格式似乎比 matroska 更挑剔,因为它可以包含 vorbis 流。几乎不可能找到有关此内容的文档(即使官方的 webm 规范也只暗示了比特率的限制,http://www.webmproject.org/code/specs/container/#demuxer-and-muxer-guidelines)。
但是 mkvmerge 的源代码实际上提到,对于我的文件,“Vorbis 码本不同;如果不重新编码,这些轨道无法连接”。 (在源代码中 grep 上面引用的字符串以获取更多详细信息)
所以这回答了这个问题:我必须重新编码整个内容。