3

мы используем mkvmerge для объединения загруженного пользователем звука в один файл (все это делается из кода на веб-сайте django).

Командная строка выглядит так: mkvmerge -o /path/to/output.webm -w /file/to/concat1.oga + /file/to/concat2.oga (файлы могут быть сотнями, но это не проблема).

Обычно это работает хорошо, за исключением нескольких файлов, и мы пытаемся выяснить проблему с ними, чтобы мы могли улучшить наш код.

Мы получаем следующую ошибку: Ошибка: дорожка номер 0 из файла /path/to/file1.oga не может быть добавлена к дорожке номер 0 из файла /path/to/file2.oga.Форматы не совпадают.

Два файла являются действительными файлами 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 ответ1

2

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .