ffmpeg: затухание / вытягивание текста с помощью zmq - PullRequest
0 голосов
/ 11 ноября 2019

В ffmpeg есть несколько способов увеличения и уменьшения текста. Но я нашел решения только там, где известно фактическое время.

Но что мне делать, если я не знаю текущего времени выполнения и хотел бы добавить и уменьшить текст?

Допустим, у меня есть бесконечный поток, и я хочу добавить текст с помощью zmqsend . И исчезновение должно начаться немедленно. Для этого я понимаю, что мне нужно хранить некоторую информацию о времени в переменной и рассчитывать с этим. Но сохранение переменных невозможно в выражениях ffmpeg - верно?

Для целей тестирования приведен игровой пример:

ffplay -dumpgraph 1 -f lavfi "color=s=512x288:c=black,zmq,drawtext=text=''"

Для добавления текста с помощью zmq я могу запустить сейчас:

echo Parsed_drawtext_2 reinit text="Hello\ World,\ what’s\ up?" | zmqsend

Или, если я знаю время выполнения и через 10 секунд я хочу добавить текст:

"text='Hello\ World':fontsize=:fontcolor=ffffff:alpha='if(lt(t,10),0,if(lt(t,11),(t-10)/1,if(lt(t,16),1,if(lt(t,17),(1-(t-16))/1,0))))'"

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

Что-то вроде:

now=t,if(lt(t,now+10),0,if(lt(t,now+11),(t-(now+10))/1,if(lt(t,now+16),1,if(lt(t,now+17),(1-(t-(now+16)))/1,0))))

Есть ли способ сохранить переменные в выражении или есть какой-то другой способ реализовать это?

1 Ответ

1 голос
/ 11 ноября 2019

Выражения могут хранить переменные в 10 «регистрах» с номерами от 0 до 9. Функции: st(n,value) для хранения и ld(n) для загрузки значения из регистра n. Регистры не являются общими для всех выражений, поэтому регистр в альфа-выражении недоступен в fontcolor expr..etc

Итак, вы должны запустить выражение следующим образом

'ifnot(ld(1),st(1,t));if(lt(t,ld(1)+10),0,if(lt(t,ld(1)+11),...'
...