мы используем 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, не должен быть проблемой.
Любые идеи о том, что проблема может быть?
Ответы:
Вот решение проблемы, если кому-то интересно.
Проблема в том, что формат webm кажется более требовательным, чем matroska, в отношении потока vorbis, который он может содержать. Документацию практически невозможно найти по этому поводу (даже официальные спецификации webm только намекают на наличие ограничений по битрейту, http://www.webmproject.org/code/specs/container/#demuxer-and-muxer-guidelines ).
Но исходный код mkvmerge на самом деле упоминает, что «кодовые книги Vorbis разные, такие треки не могут быть объединены без перекодирования» в случае моих файлов. (grep для цитируемой выше строки в источнике для более подробной информации)
Так что это отвечает на вопрос: я должен перекодировать все это.
источник