Вопрос или проблема
Я пытаюсь создать дорожки субтитров из набора известных текстовых строк. Формат субтитров ASS позволяет мне выводить эти строки на экран в заданные временные интервалы.
Однако я не хочу ссылаться на время, а предпочел бы ссылаться на номер кадра. То есть, между кадрами 0 и 5 отображать “Это начало” на экране, а между кадрами 5 и 10 показывать “Это конец” на экране.
Есть ли способ сделать это с форматом ASS? Если нет, то какие-либо другие методы для отображения текста на экране в интервалах кадров вместо временных интервалов?
Я знаю, что это очень старый вопрос, но я отвечу на него для тех, кто на него наткнется.
Форматы субтитров SSA/ASS не поддерживают указание кадров. Однако существует формат субтитров MicroDVD, который был популярен в свое время и использует видео кадры вместо временных меток.
FFmpeg может конвертировать и встраивать субтитры в формате MicroDVD. Имейте в виду, что FFmpeg конвертирует их во формат ASS внутри программы, а затем встраивает субтитры с использованием Libass. Этот процесс может не быть идеальным по кадрам. Для большей точности я рекомендую использовать MPV, так как MPV, как правило, обрабатывает все более внимательно (хотя не могу сказать, касается ли это и этого вопроса), так что он может быть лучшим выбором.
Ответ или решение
Формат субтитров SSA/ASS предоставляет множество возможностей для создания и отображения текстовых строк, но, к сожалению, он не поддерживает указание кадров вместо временных меток. Тем не менее, для пользователей, которые предпочитают работать с кадрами, существует альтернатива — формат субтитров MicroDVD, который использует именно такую систему отсчета.
Проблема с SSA/ASS
Форматы SSA и ASS основываются на временных метках, что делает их непригодными для заданий, где важно точно контролировать отображение текста в конкретные кадры. Это становится проблемой, особенно когда необходимо синхронизировать текст с визуальным контентом на уровне рамок, например, для анимации или рекламы, где каждая деталь имеет значение.
Альтернативное решение: формат MicroDVD
Format MicroDVD был создан значительно раньше и поддерживает указание кадров. Каждый диалог прописывается с указанием номера начального и конечного кадра, что делает его идеальным для задач, где точность отображения текста в интервалах кадров является критически важной. Например, вы можете записать:
{0}This is the beginning
{5}This is the end
Использование FFmpeg и MPV
Для работы с субтитрами в формате MicroDVD и последующего "пекания" их в видеопоток можно использовать FFmpeg. Эта мощная утилита позволяет конвертировать субтитры и встраивать их в видеофайл. Однако следует учитывать, что в процессе конверсии FFmpeg может преобразовать MicroDVD в формат ASS, что может negativно сказаться на точности синхронизации по кадрам.
Для более полного контроля над процессом и более высокой точности встраивания субтитров рекомендуется воспользоваться mpv. Этот медиапроигрыватель предоставляет больше возможностей для управления потоками, что в результате позволяет лучше обрабатывать и отображать субтитры.
Рекомендации
Если вы хотите интегрировать текст по кадрам, исходя из вышесказанного, рекомендуется следовать этим шагам:
- Создайте субтитры в формате MicroDVD, указывая номера кадров вместо временных меток.
- Используйте FFmpeg для обработки и встраивания этих субтитров в видеопоток, но будьте готовы к возможным потерям в точности.
- Для более точной обработки, используйте mpv, который может обеспечить лучшие результаты.
Заключение
Хотя SSA/ASS не поддерживает работу с кадрами, формат MicroDVD может стать вашим спасением для решения этой задачи. При правильном использовании инструментов, таких как FFmpeg и mpv, вы сможете добиться желаемого результата, даже если потребуется немного больше усилий и времени.