Не удается отобразить встроенные субтитры с видео.JS для видео в формате mp4

#angular #ffmpeg #video.js #video-subtitles

Вопрос:

Я не могу отображать субтитры на video.js для файла mp4, в который встроен поток субтитров.

Если я запущу FFProbe /filePath , я могу подтвердить, что видео в формате mp4 имеет субтитры.

Скриншот FFProbe

Я использую 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), но не поддерживает встроенные субтитры.