我正在尝试对使用 ffmpeg 生成的片段进行无间隙播放:
我使用 ffmpeg 对来自一个源的 3 个文件进行编码,其中 240000 个样本 @ 48kHz,即 5 秒。
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
从文件中查看元数据(使用ffprobe
and 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?
这是一个 html 页面,可以在 Chrome 中打开进行测试。
你需要一个简单的 http 服务器来运行它:
<< ls
>> index.html 0.webm 1.webm 2.webm
<< npm install -g http-server
<< http-server --cors