GStreamer время в Python
В моей программе Python я использую GStreamer's playbin
в сочетании с textoverlay
воспроизвести видеофайл и показать текст поверх него. Это работает нормально: если я изменю text
собственность textoverlay
Затем отображается новый текст.
Но теперь я хочу установить текст на основе текущей позиции / времени видео (например, субтитров).
Я читал о часах конвейера, временных отметках буфера, сегментных событиях и внешних таймерах, которые запрашивают текущее время каждые x миллисекунд. Но как лучше получать информацию об изменениях времени, чтобы я мог как можно быстрее показать правильный текст?
1 ответ
Лучший способ сделать это действительно синхронизированным с видео - это использовать что-то вроде элемента cairooverlay и выполнять рендеринг непосредственно внутри конвейера, основываясь на фактических временных метках кадров. Или альтернативно напишите свой собственный элемент для этого.
Самым простым решением, если время не требуется, чтобы быть сверхточным, было бы использование конвейерных часов. Вы можете получить его из конвейера, как только он начнется, а затем создать одиночные (или периодические) идентификаторы часов для желаемого времени или интервала. А затем используйте метод async_wait() на часах.
Чтобы получить время часов, которое соответствует, например, 1 секунде конвейера, вы должны добавить 1 секунду (т.е. 1000000000) к базовому времени конвейера. Затем вы можете использовать это значение при создании идентификаторов часов.