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

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

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

1 ответ

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

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, упорядоченный последовательно.

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

Другие вопросы по тегам