Информация об этом немного разбросана, поэтому было немного сложно придумать пример; конечно, я все еще хотел бы услышать, есть ли лучший способ сделать это. Но вот что я сделал в Ubuntu 18.04 - во-первых, временный каталог:
cd /tmp
mkdir videotest
cd videotest
Начнем с получения входного видео - трейлера Big Buck Bunny:
wget http://download.blender.org/peach/trailer/trailer_480p.mov \
-O big_buck_bunny_trailer_480p.mov
Это в формате .mov, но это не проблема, мы можем преобразовать его в соответствии с Кодировкой видео для веб-сайта:
ffmpeg -i big_buck_bunny_trailer_480p.mov \
-vcodec libx264 -pix_fmt yuv420p -acodec aac \
-strict -2 -profile:v baseline -level 3 \
-vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" \
big_buck_bunny_trailer_480p.mp4
(Обратите внимание, что без опции -vf ...
мы получим ошибку «получить ширину, не делимую на 2 (853x480)» по ffmpeg
.
Тогда давайте возьмем субтитры для этого трейлера - я нашел их здесь:
wget https://raw.githubusercontent.com/moust/MediaPlayer/master/demo/subtitles.srt \
-O big_buck_bunny_trailer_480p.srt
На этом этапе мы можем быстро попробовать vlc big_buck_bunny_trailer_480p.mp4
- это должно воспроизвести видео и автоматически загрузить субтитры .srt
с соответствующим именем файла.
До сих пор я использовал эти версии программного обеспечения в Ubuntu 18.04:
$ vlc --version
VLC media player 3.0.4 Vetinari (revision 3.0.4-0-gf615db6332)
$ ffmpeg -version
ffmpeg version 3.4.4-0ubuntu0.18.04.1 Copyright (c) 2000-2018 the FFmpeg developers
Теперь нам нужно получить MP4Box, который мы можем сделать с помощью:
sudo apt install gpac
Обратите внимание, что https://gpac.wp.imt.fr/downloads/gpac-nightly-builds/ в настоящее время имеет последнюю версию gpac_0.7.2-DEV-rev985; но версия Ubuntu 18.04:
$ apt-show-versions -r ^gpac
gpac:amd64/bionic 0.5.2-426-gc5ad4e4+dfsg5-3 uptodate
$ MP4Box -version
MP4Box - GPAC version 0.5.2-DEV-revVersion: 0.5.2-426-gc5ad4e4+dfsg5-3
Теперь мы можем сначала преобразовать .srt
в .ttxt
MP4Box -ttxt big_buck_bunny_trailer_480p.srt \
-out big_buck_bunny_trailer_480p.ttxt
... а затем .ttxt
в. mp4
:
MP4Box -add \
big_buck_bunny_trailer_480p.ttxt:lang=eng":name=English":layout=0x60x0x-1:group=2 \
big_buck_bunny_trailer_480p.mp4 \
-out subtitled_video.mp4
Этот subtitled_video.mp4
будет показывать субтитры в VLC 3.0.4, но я должен явно щелкнуть правой кнопкой мыши и выбрать Subtitle/Sub Track/Track 1 - [English] в VLC. Открытие subtitled_video.mp4
в Firefox 60 не покажет ни субтитров, ни кнопки / контекстного меню для их включения.
На данный момент, отметим, что Firefox имеет некоторый интерфейс для субтитров:
... однако, это, кажется, только для субтитров в формате WebVTT / wvtt
/ .vtt
:
... и это только через HTML5/JS с использованием <video>
(поэтому мы не можем просто вставлять субтитры в видео, открывать прямую ссылку http * на видеофайл и ожидать, что субтитры будут отображаться). Кроме того, согласно:
... даже с <video>
, в настоящее время встроенные в видео субтитры не поддерживаются ( ожидается отдельный файл субтитров .vtt
) - за исключением mp4 библиотекой JS MP4Box.js
.
Обратите внимание, что для этой библиотеки MP4Box.js
:
Кроме того, Git-репозиторий имеет недавнюю активность, однако на https://github.com/gpac/mp4box.js/releases последний файл с отдельными файлами v0.3.15 (16 марта 2016 г.), а последний .zip - v0.3.16 (12 июля 2016 г.); и сборка полной библиотеки JS из исходного кода немного сложна (вы должны использовать grunt
).
Кроме того, MP4Box.js
предназначен для гораздо более сложных задач с MP4, чем просто субтитры, и демонстрационная страница довольно сложна, чтобы продемонстрировать все это. Итак, мне потребовалось некоторое время, чтобы уменьшить демонстрационную страницу и создать HTML-код, который просто откроет и воспроизведет локальный файл .mp4
, вот он:
Обратите внимание, что он использует v0.3.15 библиотеки MP4Box.js
(он был разработан со старой демонстрационной страницы); тем более, что более новые версии библиотеки (и новая демонстрационная страница) имеют немного другой API, что означает, что старый код JS сломается при использовании с более новой библиотекой.
(также обратите внимание, что эта тестовая страница в противном случае прерывается при половинной загрузке, по адресу mp4box.releaseUsedSamples
, с сообщением x.samples
undefined; страница пытается обойти это, пропустив этот оператор, что позволяет завершить загрузку до 1 секунды до конца в Firefox 60 - это означает, что большая часть видео будет воспроизводиться, но вы не сможете его зациклить)
Имея это в виду, если мы test-MP4Box.js-v0.3.15.html
в тот же каталог, что и subtitled_video.mp4
(в который были встроены субтитры .ttxt
), и откроем страницу .html
в Firefox, мы получим показано в консоли JavaScript:
[0:00:00.552] [MSE] MIME type 'video/mp4; codecs="tx3g"' not supported for creation of a SourceBuffer for track id 3 mp4box.all.js:33:6
TypeError: Argument 1 of HTMLMediaElement.addTextTrack '' is not a valid value for enumeration TextTrackKind. test-MP4Box.js-v0.3.15.html:412:20
Таким образом, встроенные субтитры tx3g
/txtt
в .mp4
доступны для просмотра в VLC 3.0.4, но не поддерживаются MP4Box.js
- единственными встроенными субтитрами, поддерживаемыми в MP4Box.js
являются WebVTT.
К счастью, мы можем использовать MP4Box
встроить .srt
у нас уже есть, как WebVTT:
MP4Box -add big_buck_bunny_trailer_480p.srt:fmt=VTT \
big_buck_bunny_trailer_480p.mp4
-out subtitled_video.mp4
... и если мы сейчас откроем test-MP4Box.js-v0.3.15.html
в Firefox 60, мы увидим субтитры и кнопку CC:
Однако, если мы откроем этот subtitled_video.mp4
со встроенными субтитрами WebVTT в VLC 3.0.4, мы заметим, что, к сожалению, субтитры не могут быть воспроизведены.
Тем не менее, в этом коммите была добавлена поддержка WebVTT в .mp4
mux : mp4: добавлена поддержка webvtt · videolan/vlc @ 86f5f48 · GitHub от 22 января 2018 года. Чтобы получить это, я должен был установить последнюю версию VLC по ночам в виде snap
:
sudo snap install --channel=edge vlc
... который дал мне:
$ snap run vlc --version
VLC media player 4.0.0-dev Otto Chriek (revision 4.0.0-dev-5939-gee31d91)
... и этот VLC 4.0.0 может, наконец, воспроизводить субтитры в subtitled_video.mp4
со встроенными субтитрами WebVTT. (Тем не менее, обратите внимание на трудности в https://askubuntu.com/questions/1106832/running-a-snap-installed-side-by-side-parallel-to-a-debian-package )