Перейти к содержимому

Видео

Видео в презентации: воспроизводится браузером на HTML-странице, кадр-постер со ссылкой в PDF, встроено в PowerPoint и OpenDocument.

Видео — это изображение, файл которого оканчивается на .mp4, .m4v или .webm:

![video](clip.mp4)
![The demo](clip.mp4#t=12.5)
![demo loop muted](clip.mp4)

Синтаксис

Файл читается из папки презентации или по URL http либо https. Абсолютный путь, путь, выходящий за пределы папки, или любая другая схема отклоняются. #t=12.5, или #t=1:23 в минутах и секундах, выбирает кадр-постер: изображение, которое показывается перед воспроизведением и выходами, не умеющими воспроизводить видео. Форма медиафрагмента #t=10,20 тоже принимается, и используется её начало. Без этого постером служит первый кадр.

Ключевые слова в альтернативном тексте, записываемые как ключевые слова изображений Marp, но собственные для go-slides, задают воспроизведение: autoplay, loop и muted. autoplay учитывается только вместе с muted; иначе он игнорируется с предупреждением. Остальные слова альтернативного текста — доступная подпись.

Что показывает каждый выход

  • HTML (страница и предпросмотр в playground): элемент <video controls playsinline preload="metadata" poster=...>. Постер — это декодированный кадр, встроенный как JPEG data URI. Видео никогда не включает звук само. Когда браузер просит меньше движения (prefers-reduced-motion), autoplay и loop убираются, а видео ставится на паузу. Видео, запускающееся само (без звука), играет, только пока видна хотя бы половина, и ставится на паузу, когда его слайд не показан.
  • PDF (--pdf): кадр-постер как изображение со ссылкой на видеофайл: относительный путь так, как он записан в презентации, или URL для источника http либо https. Воспроизведение происходит только при открытии ссылки. В PDF нет аннотации RichMedia: она играла бы только в Acrobat, и её намеренно не используют.
  • PowerPoint (--pptx): видео встраивается как медиачасть (ppt/media/slidesvideoN.mp4|webm) вместе с постером, как a:videoFile плюс расширение p14:media. Keynote: импортирует его как фильм и воспроизводит (проверено). LibreOffice Impress: импортирует файлы PowerPoint и OpenDocument как видео и декодирует его (проверено). PowerPoint: ещё не проверено. Ключевые слова autoplay, loop и muted не переносятся в PowerPoint и OpenDocument.
  • OpenDocument (--odp): видео встраивается в Video/ как draw:plugin (ODF 1.3, часть 3, 10.4.8), перед draw:image постера, и перечисляется в манифесте. LibreOffice Impress импортирует его как видео и декодирует (проверено); воспроизведение в показе слайдов зависит от его медиабэкенда и кодека.
  • Источники URL: HTML-страница передаёт видео потоком по URL. Экспорты показывают нейтральную карточку со ссылкой на URL. При сборке ничего не загружается, и ничего не встраивается в PowerPoint или OpenDocument.

Контейнеры и постеры

Файлы MP4 (ISO BMFF) и WebM (Matroska) читаются на Go; ffmpeg никогда не запускается. Постер декодируется только для H.264 (avc1 или avc3), единственного видеодекодера go-avkit. Другие кодеки (H.265, VP8, VP9, AV1) по-прежнему играют в HTML и встраиваются в PowerPoint и OpenDocument, но их постер — нейтральная тёмная карточка с треугольником воспроизведения, и выводится предупреждение video.codec.

Ограничения

Видео — недоверенный ввод, поэтому оно ограничено: файл (64 MiB), боксы или элементы (262 144) и их вложенность (16 уровней), кадр (4096 на 4096) и декодирование постера (не более 600 сэмплов от предыдущего ключевого кадра, 8 MiB на сэмпл). Постер, слишком далёкий от ключевого кадра, получает карточку и предупреждение video.limit.

Отклонённое видео заменяется на слайде заметкой [video not shown: ...]; сборка продолжается, а проблема — это предупреждение с кодом:

  • video.syntax: это не файл MP4 или WebM, нет видеодорожки или недопустимое время;
  • video.limit: превышено одно из ограничений выше;
  • video.codec: постер нельзя декодировать для этого кодека;
  • video.path: абсолютный путь, путь за пределами папки презентации или схема, отличная от http и https;
  • file.missing: файл не существует.

В playground

После выпуска видео можно будет добавить в проект, как и другие файлы. Его байты остаются в браузере, как blob-URL, и никогда не загружаются. Попробуйте в playground.

Created on by tannevaled

Modified on by tannevaled