Преобразуйте текстовые субтитры в отдельные растровые изображения с помощью ffmpeg

731
Advika

У нас есть поток текстовых субтитров, и нам нужно преобразовать каждый отдельный субтитр в этом потоке субтитров в отдельный .bmpфайл с 24 битами на пиксель.

Как мы можем сделать это с помощью ffmpeg?

1
Спасибо за ответ. Ссылка, которой вы поделились здесь, рассказывает о записи субтитров в видео. Но в нашем сценарии субтитры должны отображаться в виде отдельного потока, не встроенного в видео. Любой вклад по этому вопросу будет полезен. Advika 6 лет назад 0
Это правильно. DASH использует текстовые субтитры. Но наша текущая среда проекта поддерживает рендеринг растрового формата. Мы подумали, что преобразуем текст на основе растрового формата, и тогда для рендеринга можно будет использовать тот же конвейер. Advika 6 лет назад 0
Поскольку я совершенно новичок в этом, мне очень жаль, что я не предоставил достаточно информации. Формат BMP с 24 битами на пиксель. Как, например, у нас есть текстовая строка "XYZ", поскольку ввод и вывод должны быть в формате BMP. Advika 6 лет назад 0
нам нужен один файл растрового изображения (.bmp) для каждой отдельной текстовой строки субтитров. Advika 6 лет назад 0

1 ответ на вопрос

1
slhck

Немного хакерский, но это лучшее, что я придумал, также учитывая довольно двусмысленную задачу, когда неясно, каким должен быть размер выходного кадра или как гарантировать синхронизацию.

ffmpeg -f lavfi -i "color=color=black:d=10:s=1280x720:r=24" \ -filter:v "subtitles=sample.srt,mpdecimate,setpts=N/FRAME_RATE/TB" \ images/out-%04d.bmp 

Вот что это делает:

  • Создайте черный цвет фона с размером 1280 × 720 пикселей, длительностью 10 секунд и 24 кадрами в секунду. Очевидно, что вы можете изменить размер пикселя, и вы должны изменить длительность на основе общей длительности потока субтитров. Частота кадров может быть снижена, но это влияет на точность отображаемого вывода.
  • Рендеринг субтитров с использованием subtitlesфильтра (см. Его параметры для определения стиля субтитров).
  • Удалите дублирующиеся кадры mpdecimateи сбросьте временную базу. Это можно пропустить, если вы не хотите выводить только отдельные изображения.
  • Выведите каждый оставшийся кадр в изображение BMP, упорядоченное последовательно.

Теперь, если есть части без субтитров, будет выведена пустая черная рамка - их нужно будет удалить позже, например, на основе контрольной суммы файла.

Похожие вопросы