Ошибка mkvmerge "форматы не совпадают" при добавлении файлов OGA

3682
Laurent S

мы используем 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, не должен быть проблемой.

Любые идеи о том, что проблема может быть?

3
Исходный отчет об ошибке находится по адресу https://code.ductus.us/ticket/127#comment:4 вместе с копией файлов, если вы хотите воспроизвести. Laurent S 12 лет назад 0

1 ответ на вопрос

1
Laurent S

Вот решение проблемы, если кому-то интересно.

Проблема в том, что формат webm выглядит более требовательным, чем matroska, в отношении потока vorbis, который он может содержать. Документацию практически невозможно найти по этому поводу (даже официальные спецификации webm только намекают на наличие ограничений по битрейту, http://www.webmproject.org/code/specs/container/#demuxer-and-muxer-guidelines ).

Но исходный код mkvmerge на самом деле упоминает, что «кодовые книги Vorbis разные, такие треки не могут быть объединены без перекодирования» в случае моих файлов. (grep для приведенной выше строки в источнике для более подробной информации)

Так что это отвечает на вопрос: я должен перекодировать все это.