LINUX.ORG.RU

Ffmpeg: Как сделать таймер, который по истечении часа будет продолжать отображаться в минутах (61:00 и тд)?

 


1

1

Накладываю на видео таймер в формате мм:сс и нужно, что бы после 60 минуты таймер продолжал показывать 61 минуту и тд, а он 60 минут переводит в один час и показывает 01:00:01. Ниже пример. Тут таймер начинается с 70-ой минуты (gmtime\:4200), но это будет 01:10:00, и на экран выведутся только минуты и секунды 10:00 (:%M\\\:%S), так как вывод количества часов мне и не нужен. Можно ли вообще так сделать в ffmpeg? Подскажите, пожалуйста.

 ffmpeg -i d:\ffmpeg\0001.MTS 
-vf drawtext="fontsize=46: box=1: boxcolor=black@0.75: boxborderw=10: fontcolor=white: borderw=2: bordercolor=black: fontfile='C\:\\Windows\\Fonts\\consola.ttf' :x=80: y=60: text='%{pts\:gmtime\:4200\:%M\\\:%S}'" 
-c:v libx264 d:\ffmpeg\timer.mkv 

Тебе нужно использовать text expansion, он похоже может производить произвольные вычисления с pts:

Пример из интернетов: text='%{eif\:t/3600\:d\:2}\:%{eif\:mod(t/60\,60)\:d\:2}\:%{eif\:mod(t\,60)\:d\:2}\:%{eif\:100*mod(t\,1)\:d\:2}'

derlafff ★★★★★
()
Последнее исправление: derlafff (всего исправлений: 1)

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

ffmpeg -i input.mp4 -vf "drawtext=fontfile=myfont.ttf: timecode='01\:00\:00': r=25: x=(w-tw)/2: y=h-(2*lh): fontcolor=white: box=1: boxcolor=0x00000099" -c:v libx264 -crf 23 -c:a copy output.mp4

В этой команде формат времени указан как 01\:00\:00, что означает, что таймер будет отсчитывать время с 01:00:00 (то есть с одной минуты и нулевыми секундами). Если вы хотите начинать таймер с 70-ой минуты, то вам нужно будет изменить формат времени на 01\:10\:00, чтобы отображать только минуты и секунды, вы можете использовать следующий формат: :%M\:%S.

Надеюсь, это поможет!

cocucka ★★★★☆
()
Ответ на: комментарий от derlafff

Тебе нужно использовать text expansion, он похоже может производить произвольные вычисления с pts:
Пример из интернетов: text='%{eif\:t/3600\:d\:2}\:%{eif\:mod(t/60\,60)\:d\:2}\:%{eif\:mod(t\,60)\:d\:2}\:%{eif\:100*mod(t\,1)\:d\:2}'

Кажется получилось, что бы минуты продолжали идти до сотой вот по этой формуле text='%{eif\:mod(45+(t/60)\,100)\:d\:2}\:%{eif\:mod(t\,60)\:d\:2} надеюсь никаких подводных камней не всплывёт.

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

с таймкодом у меня не получилось. не смог я разобраться.

Залезть в исходники фильтра, добавить тип gmtime_custom, переопределить шаблон %M

А с изменением исходника еще сложнее. Даже не нашел где почитать об этом.

Но задача, вроде бы, решена. Всем большое спасибо за помощь!

DeXuS
() автор топика