ffmpeg наложить дату и текст на 1080p/25k на лету

стоит задача сделать трансляцию с нескольких камер на youtube. Нашел решение через ffmpeg под ubuntu

ffmpeg \
    -rtsp_transport tcp \
    -i 'rtsp://admin:[email protected]:554/onvif' \
    -c:v copy \
    -acodec libmp3lame -ar 44100 \
    -f flv 'rtmp://a.rtmp.youtube.com/$$$'

все работает норм, CPU load >5%. Но на IP-камере убогий формат даты и нет возможности название камеры нормально сделать(нет кириллицы, ограничена длина, убогий не читаемый шрифт), хочу drawtext наложить на поток дату и название камеры...

по решениям из интернет пробую так:

-vcodec libx264 -pix_fmt yuv420p \
-vf "drawtext=text='название камеры'  :fontfile=/usr/share/fonts/ARIAL.TTF: box=0: [email protected]: borderw=3: y=25:x=25: fontcolor=white: fontsize=24,drawtext=text='%{localtime\:%d.%m.%Y  %X}'  :fontfile=/usr/share/fonts/ARIAL.TTF: box=0: [email protected]: borderw=3: y=25:x=w-250: fontcolor=white: fontsize=24,drawtext=text='адрес объекта'  :fontfile=/usr/share/fonts/ARIAL.TTF: box=0: [email protected]: borderw=3: y=h-20:x=6: fontcolor=white: fontsize=14" \

но CPU сразу улетает в 100%, битрейт >100 и все тормозит. Качество картинки заметно упало, я так понимаю что все из-за перекодирования видеопотока.

подскажите, есть ли какие-то способы накладывать текст на видео лету?


Ответы (1 шт):

Автор решения: gbg

Два пути:

  1. перекодировать на видеокарте. Минусы - нужна карточка с поддержкой кодека и версия gstreamer (он точно умеет все делать на видеокарте, ffmpeg может натворить лишний транзит в RAM), также собранная с такой поддержкой. Качество может просесть, а может и не просесть, зависит от того, как настроите

  2. Врезать дату и время как субтитры. Можно делать на CPU, качество не пострадает никак (видео не изменится), но увы - так как это субтитры, такую запись будет трудно использовать для юридических целей.

→ Ссылка