#angular #ffmpeg #video.js #video-subtitles
Вопрос:
Я не могу отображать субтитры на video.js для файла mp4, в который встроен поток субтитров.
Если я запущу FFProbe /filePath
, я могу подтвердить, что видео в формате mp4 имеет субтитры.
Я использую Angular для интерфейса, и именно так я настраиваю свой видеоплеер
const videoJsConfig = { controls: true, autoplay: false, preload: 'auto', fluid: true, height: 600, width: 800, textTrackSettings: true // html5: { // nativeTextTracks: false // } }; this.player = videojs('preview-player', videoJsConfig);
Для лицевой стороны я просто показываю это:
lt;section class="main-preview-player"gt; lt;video id="preview-player" class="video-js" crossorigin="anonymous"gt; lt;p class="vjs-no-js"gt; To view this video please enable JavaScript, and consider upgrading to a web browser that lt;a href="http://videojs.com/html5-video-support/" target="_blank"gt;supports HTML5 videolt;/agt; lt;/pgt; lt;track kind="subtitles" src="//subrip" srclang="en" label="English" defaultgt; lt;/videogt; lt;div class="lds-ring" *ngIf="isVideoLoading"gt;lt;divgt;lt;/divgt;lt;divgt;lt;/divgt;lt;divgt;lt;/divgt;lt;divgt;lt;/divgt;lt;/divgt; lt;div class="watermark" *ngIf="auditId"gt;lt;/divgt; lt;/sectiongt;
И для части загрузки, что-то простое, захват большого двоичного объекта файла mp4 по выбору пользователя.
const objectURL = URL.createObjectURL(file as Blob); const mediaSrc = this.domSanitizer.bypassSecurityTrustUrl(objectURL); console.log('mediaSrc', mediaSrc); this.player.src([ { type: 'video/mp4', src: objectURL }, ]);
Элемент дорожки добавлен для тестирования, так как FFProbe показал мне верхнюю информацию, я подумал, что, может быть, я смогу ее форсировать.
Я прочитал их документацию, но они не предоставляют много информации о том, что они воспринимают как «собственные субтитры» или «эмулированные субтитры», поэтому я попытался разобраться с этим, надеясь, что это сработает.
Мое единственное «исправление» для этой ситуации-использовать FFMpeg на уровне серверной части, извлечь файл .srt, отправить его во внешний интерфейс, а затем программно прикрепить файл srt к самому тегу видео (элементу дорожки), но должен быть более человечный вариант
Или, может быть, просто поищите лучшую библиотеку видео. В сети
Комментарии:
1. Вопрос: Как создаются файлы MP4 со встроенными субтитрами? (например, вы каким-то образом используете инструмент ffmpeg для их встраивания или в файлы mp4, которые вам предоставляются, уже встроен поток субтитров?)
Ответ №1:
Встроенные треки субтитров зависят от встроенной поддержки браузера, которая не очень распространена. Safari поддерживает mov_text в формате MP4, и это все.
Safari не будет воспроизводить файл в выходных данных ffmpeg, так как это контейнер matroska (mkv). Chrome часто воспроизводит mkv, переименованный в mp4), но не поддерживает встроенные субтитры.