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