Я хочу взять видеофайл и наложить субтитры, которые появляются и исчезают.
Я только начинаю учиться работать с Gstreamer.
На данный момент мне удалось собрать конвейер, объединяющий поток субтитров, нарисованный элементом textrender, с исходным видеопотоком с помощью элемента videomixer. К сожалению, textrender и родственный ему элемент textoverlay не имеют функции постепенного появления/исчезновения.
Панель раковины видеомикшера имеет альфа-свойство. На данный момент я установил альфа-значение пэда с именем videomixer.sink_1 на 1,0. Вот версия этого конвейера для командной строки:
#!/bin/bash
gst-launch-1.0 \
filesrc location=sample_videos/my-video.mp4 ! decodebin ! mixer.sink_0 \
filesrc location=subtitles.srt ! subparse ! textrender ! mixer.sink_1 \
videomixer name=mixer sink_0::zorder=2 sink_1::zorder=3 sink_1::ypos=-25 sink_1::alpha=1 \
! video/x-raw, height=540 \
! videoconvert ! autovideosink
Я ищу способ динамически изменять это альфа-значение с течением времени, чтобы компонент субтитров появлялся и исчезал в нужное время. (Я проанализирую файл SRT отдельно, чтобы определить, когда начинаются и заканчиваются затухания.)
Я изучаю GstBin C API (фактический код написан на Python). Я думаю, что после создания конвейера с помощью Gst.parse_launch() я могу получить любой именованный элемент с помощью gst_get_bin_by_name(), а затем использовать это значение для доступа к панели «sink_1».
Как только я зайду так далеко, смогу ли я динамически изменять это альфа-значение из обработчика событий, который получает события таймера? Будет ли элемент видеомикшера мгновенно реагировать на изменения свойств этой площадки? Кто-нибудь еще сделал это?
Здесь я нашел частичные ответы: https://stackoverflow.com/a/17331845/270511, но они не говорят меня, если это будет работать после запуска конвейера.