【发布时间】:2020-11-14 23:48:29
【问题描述】:
我正在尝试在网络浏览器中播放视频,原始视频带有两个或多个音频流,每个音频流使用不同的语言。我想让用户选择切换他们正在收听的音轨。
我尝试在视频元素上使用audioTracks,但尽管说它在大多数浏览器中都支持标志,至少在 Firefox 和 Chrome 中我不会说它完全有效(在 Firefox 中它只显示第一首曲目并且元数据是错误的,在 Chrome 中,只要您将主音轨静音,视频就会暂停,您必须寻找视频才能让它真正继续播放)。
我尝试使用ffmpeg 分别保存各个音轨并尝试与视频同步播放它们(设置audio.currentTime = video.currentTime 以响应视频上的多个事件,例如play、playing、pause , seeked, stalled),在连接到GainNodes 的<audio> 元素中使用Web Audio API 播放两个音轨(切换音轨将增益设置为1 用于您想要的轨道和0对于其余的)。这似乎在 Chrome 中完美运行,但 Firefox 无处不在,即使在同步 currentTime 属性后,实际音频也会延迟一秒或更长时间。
我看到其他人抱怨 MP3 的计时有类似问题,但我使用的是 AAC。在这些情况下,解决方案是不对音频使用可变比特率,但这似乎并没有改善它 (ffmpeg -i video.mkv -map 0:a:0 -acodec aac -b:a 128k track-0.aac)
有什么好的策略可以做到这一点吗?如果可以避免的话,我宁愿不必为每个音轨都有重复的视频文件。
【问题讨论】: