web-dev-qa-db-ja.com

ogaファイルを追加するときにmkvmergeエラー「フォーマットが一致しません」

mkvmergeを使用して、ユーザーがアップロードしたオーディオを1つのファイルに連結しています(これはすべてDjango Webサイトのコードから実行されます)。

コマンドラインは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.

Ogginfoの出力に示されているように、2つのファイルは有効なogg/vorbisファイルです。

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
Laurent S

誰かが興味を持っているなら、これが問題の解決策です。

問題は、webm形式は、含むことができるvorbisストリームに関して、matroskaよりも扱いにくいように見えることです。これについてドキュメントを見つけることは事実上不可能です(公式のwebm仕様でさえ、ビットレートに制約があることを示唆しているだけです http://www.webmproject.org/code/specs/container/#demuxer-and-muxer -ガイドライン )。

しかし、mkvmergeのソースコードには、私のファイルの場合、「Vorbisコードブックは異なります。そのようなトラックは再エンコードせずに連結することはできません」と実際に記載されています。 (詳細については、ソース内の上記の引用文字列のgrep)

これで質問に答えます。すべてを再エンコードする必要があります。

2
Laurent S