Вопрос или проблема
Существуют различные статьи, в которых упоминается, что ASS предоставляет событие Picture
, упомянутое здесь и здесь
Я пытался применить это, как указано ниже, но безуспешно, и не смог найти примеры в интернете (не знаю, почему)
[Script Info]
Synch Point:1
ScriptType:v4.00+
Collisions:Normal
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default, Noto Emoji, 16px, &H00080808, &H00080808, &HXX000000, &H00C5E71E, 0, 0, 0, 0, 100, 100, 0, 0, 4, 0, 0, 2, 10, 10, 10, 178
[Events]
Format: Layer, Start, End, Style, Actor, MarginL, MarginR, MarginV, Effect, Text
Picture: 0,0:00:04.00,0:00:07.00,Default,NTP,0000,0000,0000,,emoji.jpg
Я использую это неправильно или в чем может быть проблема?
Примечание: Я использую fluent-ffmpeg
, чтобы встроить эти субтитры
Ни один из поставщиков субтитров, и я имею в виду: Libass, VSFilter Guliverkli, xy-VsFilter и VsFilterMod, на самом деле не реализовал событие Picture
. Официальной спецификации Advanced SubStation Alpha (ASS) не существует. То, что обычно считается спецификацией, по сути, является оригинальным VSFilter от Guliverkli. Например, поскольку GDI Windows ограничивает имена шрифтов до 31 символа (VSFilter был только для Windows), Libass (современный поставщик субтитров ASS) эмулирует такое же поведение.
Конечно, в Libass были внесены некоторые в основном незначительные изменения, чтобы лучше соответствовать ожиданиям, такие как более дискретное размытие или применение границ перед преобразованиями. Эти изменения задокументированы здесь.
В ASSv4+ событие Picture никогда не будет реализовано. Эта функция не упоминается в ASS v4.1 RFC или черновике ASS v5.0, и, кроме того, прогресс по этим черновикам движется очень медленно.
Если вы действительно хотите использовать изображение, единственный вариант – использовать VSFilterMod, модифицированную версию VSFilter. VSFilterMod не строго следует стандартным тегам переопределения и реализовал свой собственный тег переопределения \$img. Обратите внимание, что VSFilterMod может вызывать некоторые визуальные различия по сравнению с Libass (который используется в FFmpeg), и это только для Windows (поскольку он использует GDI для измерения и рендеринга шрифтов).
Вы можете использовать это так:
{\an5\1img(Stack Exchange Logo 200x200.png,0,0)\p1}m -20 0 l 180 0 180 180 -20 180{\p0}
Кроме того, обратите внимание, что FFmpeg не поддерживает VSFilter (и, следовательно, не поддерживает VSFilterMod).
Для использования VSFilterMod вам следует использовать VapourSynth, затем использовать этот интерфейс VSFilterMod и затем отправить его в x264 с помощью инструмента vspipe
.
Ответ или решение
Как использовать событие Picture в формате ASS
Введение
Формат SubStation Alpha (SSA) и его расширенная версия, Advanced SubStation Alpha (ASS), представляют собой важные инструменты для создания и обработки субтитров. Одной из возможных функций, о которой упоминается, является возможность использовать события типа Picture
. Тем не менее, реализация этой функции зависит от используемого программного обеспечения. Давайте подробнее рассмотрим, как применить событие Picture
, а также альтернативные варианты.
Что такое событие Picture?
Событие Picture
позволяет вставлять графические изображения в субтитры. Это может быть полезно для добавления эмодзи или логотипов, чтобы улучшить визуальное восприятие. Однако важно учитывать, что поддержка данного события значительно отличается в зависимости от библиотеки субтитров, используемой вами.
Проблемы с реализацией
В вашем коде есть несколько ключевых моментов, которые следует учитывать. Обратите внимание, что:
-
Отсутствие поддержки: Библиотеки, такие как Libass, VSFilter, xy-VsFilter и их модификации, в большинстве случаев не поддерживают событие
Picture
. В частности, современные версии, такие как Libass, не включают в себя эту функцию в стандартный набор. -
Использование VSFilterMod: Если вы хотите использовать возможность вставки изображений, лучшим выбором будет использование VSFilterMod. Это модифицированная версия VSFilter, которая добавляет расширенные возможности, такие как возможность вставки изображений с помощью специального тега
\$img
. -
Программные ограничения: Обратите внимание, что VSFilterMod является программой для Windows и, следовательно, может не работать на других операционных системах. Кроме того, FFmpeg по умолчанию не поддерживает VSFilter, поэтому вам потребуется интегрировать его через другой инструмент, например VapourSynth.
Пример использования
Если вы решили воспользоваться VSFilterMod, вот как это может выглядеть в вашем сценарии:
{\an5\1img(Stack Exchange Logo 200x200.png,0,0)\p1}m -20 0 l 180 0 180 180 -20 180{\p0}
Здесь:
\an5
– анкора, указывающий положение графики на экране.\1img
– используется для вставки изображения.0,0
– координаты для размещения изображения на видео.\p1
– указывает начало рисования (polygon).- Оставшаяся часть (например, команда
m -20 0 l 180 0 180 180 -20 180
) используется для рисования форм.
Рекомендации по интеграции в рабочий процесс
-
Установка VapourSynth и VSFilterMod: Чтобы работать с изображениями, установите VapourSynth и VSFilterMod, следуя инструкциям на официальных ресурсах.
-
Создание и редактирование субтитров: Работайте с вашими субтитрами в редакторе, который поддерживает формат ASS, и добавляйте необходимые строки с изображениями.
-
Экспорт в x264: С помощью утилиты
vspipe
вы можете направить выходные данные в x264 для сжатия и кодирования видео.
Заключение
Хотя использование события Picture
в формате ASS может вызывать сложности из-за различных ограничений и отсутствия поддержки, использование таких инструментов, как VSFilterMod в сочетании с VapourSynth, позволяет вам обойти эти проблемы. Это расширит ваши возможности в создании более выразительных и визуально насыщенных субтитров, прекрасно дополняя видео.
Для получения более подробной информации по всем техническим аспектам работы с субтитрами, не забудьте ознакомиться с документами и сообщениями, связанными с вашей библиотекой субтитров, такими как Libass Documentation или VSFilterMod Wiki.