ffmpeg を使用して生成されたセグメントのギャップレス再生を試みています。
私は ffmpeg を使用して、48kHz で正確に 240000 サンプル (つまり 5 秒) のソースから 3 つのファイルをエンコードします。
ffmpeg -i tone.wav -af atrim=start_sample=24000*0:end_sample=240000*1 -c:a opus 0.webm
ffmpeg -i tone.wav -af atrim=start_sample=24000*1:end_sample=240000*2 -c:a opus 1.webm
ffmpeg -i tone.wav -af atrim=start_sample=24000*2:end_sample=240000*3 -c:a opus 2.webm
ファイルからメタデータを ( and を使用ffprobe
してffmpeg -loglevel debug
) 見ると、一貫性のない値のように思われる次のようになります。
Duration: 5.01,
Start 0.007
discard 648/900 samples
240312 samples decoded
これらのファイルが複数ある場合、ギャップなくシームレスに再生するにはどうすればよいですか? つまり、私が試したブラウザで:
sourceBuffer.timestampOffset = 5 * n - 648/48000;
sourceBuffer.appendWindowStart = 5 * n;
sourceBuffer.appendWindowEnd = 5 * (n+1);
sourceBuffer.appendBuffer(new Uint8Array(buffer[n]));
ただし、聞こえるギャップがあります。
実際に何個のサンプルを廃棄する必要がありますか? 0.007 * 48000、648、または 240312 - 240000?
Chrome で開いてテストできる html ページを次に示します。
それを実行するには、単純な http サーバーが必要です。
<< ls
>> index.html 0.webm 1.webm 2.webm
<< npm install -g http-server
<< http-server --cors