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形式の理解からは問題にならないはずです。
問題が何であるかについてのアイデアはありますか?
誰かが興味を持っているなら、これが問題の解決策です。
問題は、webm形式は、含むことができるvorbisストリームに関して、matroskaよりも扱いにくいように見えることです。これについてドキュメントを見つけることは事実上不可能です(公式のwebm仕様でさえ、ビットレートに制約があることを示唆しているだけです http://www.webmproject.org/code/specs/container/#demuxer-and-muxer -ガイドライン )。
しかし、mkvmergeのソースコードには、私のファイルの場合、「Vorbisコードブックは異なります。そのようなトラックは再エンコードせずに連結することはできません」と実際に記載されています。 (詳細については、ソース内の上記の引用文字列のgrep)
これで質問に答えます。すべてを再エンコードする必要があります。