Немного хакерский, но это лучшее, что я придумал, также учитывая довольно двусмысленную задачу, когда неясно, каким должен быть размер выходного кадра или как гарантировать синхронизацию.
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, упорядоченное последовательно.
Теперь, если есть части без субтитров, будет выведена пустая черная рамка - их нужно будет удалить позже, например, на основе контрольной суммы файла.