いくつかのogg vorbisファイルがあり、それらはすべて、単一のファイルに連結するのとまったく同じプロパティでエンコードされています。
ogg vorbis形式は、次のような複数のファイルの単純な連結をサポートしていることを知っています。
$ cat file1.ogg file2.ogg > output.ogg
しかし、残念ながら、すべてのプレーヤーがそのように作成されたファイルを理解できるわけではありません。たとえば、私のモバイルオーディオプレーヤーは、新しいものを購入することを避けます。それを理解しない他のプログラムはgstreamerです。入力oggファイルがたまたますべて同じストリームIDを持っている場合、このメソッドは機能しません。
さらに、元のファイルを破棄し、連結バージョンのみを保持するため、cat
ソリューションと同じように、連結をロスレスで行いたいと思います。
また、ファイルをflacのようなロスレス形式に連結することも避けたいのです。これにより、ファイルサイズが不必要に大きくなるからです。それで問題なければ、元のoggファイルを保持して、使用するスペースを減らすことができます。
ffmpegはconcat demuxerを使用してそれを実行できることがあるようです:
$ cat inputs.txt
file 'in1.ogg'
file 'in2.ogg'
$ ffmpeg -f concat -i inputs.txt -c copy out.ogg
入力ファイルの生のhexdumpを見ると、出力ファイルに正確に表されているvorbisパケットを見つけることができます。したがって、再エンコードは実際には行われないと思います。
しかし、これはすべての入力ファイルで機能するとは限りません。時々(何がこれをトリガーするかわからない)、ffmpegは警告を出します:
Non-monotonous DTS in output stream 0:0; previous: 5011328, current: 5011200; changing to 5011329. This may result in incorrect timestamps in the output file.
そして、2つのファイル間の非常にかすかな「ギャップ」が聞こえます。したがって、これは確かにグローバルなソリューションではありません。
私は1つを見つけることができなかったので、私はこのstackoverflow質問で自分のツールを書き込もうとしました。
複数のogg vorbisファイルを連結する方法はありますが、再エンコードせずに、出力ごとに1つのストリームのみを使用しますか?どのツールがその仕事をすることができますか?