Несколько звуковых дорожек для видео HTML5
Я создаю видео для своего сайта с помощью HTML5. В идеале, у меня был бы только один беззвучный видеофайл и пять различных звуковых дорожек на разных языках, которые синхронизируются с видео.
Тогда у меня была бы кнопка, которая позволяла бы пользователям переключаться между звуковыми дорожками, даже когда видео воспроизводится; и правильная звуковая дорожка оживала бы (без паузы или начала видео или чего-либо еще; так же, как выбор звуковой дорожки DVD).
Я могу сделать это довольно просто в Flash, но я - не хочу. Должен быть способ сделать это в чистом HTML5 или HTML5+jQuery. Я думаю, что вы будете воспроизводить все аудиофайлы на 0 громкости и только увеличите громкость активной дорожки... но я даже не знаю, как это сделать, не говоря уже о том, чтобы справиться с этим, когда пользователь делает паузу или перематывает видео...
Заранее спасибо!
3 ответов:
Если вы хотите загрузить все пять треков, почему бы просто не добавить их в видео? Видео не ограничивается одной звуковой дорожкой (даже AVI может делать несколько звуковых дорожек). Тогда синхронизация должна быть обработана за вас. Вы просто включаете/отключаете звуковые дорожки по мере необходимости.
Синхронизация между аудио и видео намного сложнее, чем простое одновременное включение аудио и видео. Звуковые карты будут воспроизводиться с несколько иной скоростью. (То, что для меня 44,1 кГц, для вас может быть 44,095 кГц.)
Часто видео синхронизируется с аудиопотоком, но этим занимается плеер. Загружая несколько объектов для воспроизведения, вы эффективно выводите их из синхронизации.
Единственный способ, как это будет работать, если вы может найти способ управлять различными аудиопотоками с помощью видеоплеера. Я не знаю, возможно ли это.
Вместо этого я предлагаю вам кодировать видео несколько раз, с разными потоками. Вы можете использовать FFMPEG для этого и даже автоматизировать процесс, в зависимости от вашего рабочего процесса. Переключение между потоками становится проблемой, но большинство видеоплееров достаточно надежны, чтобы угадать смещение байта в файле, когда задан битрейт.
Если вам нужны только два языка, вы можно просто настроить баланс между левым и правым стереофоническим аудиоканалом.
Это выполнимо с Web Audio API.
Часть моей программы прослушивает события видеоэлемента и останавливает или перезапускает звуковые дорожки, созданные с помощью web audio API. Это дает мне возможность включать и выключать любой из треков в идеальной синхронизации.
Есть некоторые недостатки.
В Internet Explorer отсутствует поддержка API Web Audio, за исключением Edge.
Этот метод работает только с буферизованным звуком, и это ограничивает. Есть некоторые проблемы с большими файлами: https://bugs.chromium.org/p/chromium/issues/detail?id=71704
Comments