Несколько звуковых дорожек для видео HTML5 - PullRequest
16 голосов
/ 24 октября 2011

Я создаю видео для моего сайта с HTML5. В идеале у меня был бы только один немой видеофайл и пять разных звуковых дорожек на разных языках, которые синхронизируются с видео.

Тогда у меня будет кнопка, которая позволяет пользователям переключаться между звуковыми дорожками, даже когда видео воспроизводится; и правильная звуковая дорожка оживет (без остановки или запуска видео или чего-то подобного; очень похоже на выбор звуковой дорожки DVD).

Я могу сделать это довольно просто во Flash, но я не хочу. Должен быть способ сделать это в чистом HTML5 или HTML5 + jQuery. Я думаю, что вы будете воспроизводить все аудиофайлы с нулевой громкостью и только увеличивать громкость активной дорожки ... но я не знаю, как это сделать, не говоря уже о том, чтобы справиться с этим, когда пользователь делает паузу или перемотку назад. видео ...

Заранее спасибо!

Ответы [ 3 ]

9 голосов
/ 24 октября 2011

Синхронизация между аудио и видео намного сложнее, чем простой запуск аудио и видео одновременно.Звуковые карты будут воспроизводиться с немного другой скоростью.(То, что для меня составляет 44,1 кГц, на самом деле может быть 44,095 кГц.)

Часто видео синхронизируется с аудиопотоком, но проигрыватель обрабатывает это.Загружая несколько объектов для воспроизведения, вы фактически извлекаете их из синхронизации.

Единственный способ, которым это сработает, - это найти способ управления различными аудиопотоками с видеопроигрывателя.Я не знаю, возможно ли это.

Вместо этого я предлагаю вам кодировать видео несколько раз с разными потоками.Вы можете использовать FFMPEG для этого и даже автоматизировать процесс, в зависимости от вашего рабочего процесса.Переключение между потоками становится проблемой, но большинство видеопроигрывателей достаточно надежны, чтобы угадать смещение байта в файле при заданной скорости передачи.

Если вам нужны только два языка, вы можете просто настроить баланс между левыми правый стереофонический аудиоканал.

4 голосов
/ 30 мая 2012

Это возможно с помощью Web Audio API.

Часть моей программы прослушивает события видеоэлемента и останавливает или перезапускает звуковые дорожки, созданные с помощью веб-аудио API.Это дает мне возможность включать и выключать любые треки в идеальной синхронизации.

Есть некоторые недостатки.

В Internet Explorer нет поддержки API Web Audio, кроме Edge.

Техника работает только с буферизованным звуком, и это ограничивает.Есть некоторые проблемы с большими файлами: https://bugs.chromium.org/p/chromium/issues/detail?id=71704

4 голосов
/ 24 октября 2011

Если вы хотите, чтобы все пять треков были загружены, почему бы просто не вставить их в видео? Видео не ограничивается одной звуковой дорожкой (даже AVI может выполнять несколько звуковых дорожек). Тогда синхронизация должна быть обработана для вас. Вы просто включите / отключите звуковые дорожки по мере необходимости.

...