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 шт):
Два пути:
перекодировать на видеокарте. Минусы - нужна карточка с поддержкой кодека и версия gstreamer (он точно умеет все делать на видеокарте, ffmpeg может натворить лишний транзит в RAM), также собранная с такой поддержкой. Качество может просесть, а может и не просесть, зависит от того, как настроите
Врезать дату и время как субтитры. Можно делать на CPU, качество не пострадает никак (видео не изменится), но увы - так как это субтитры, такую запись будет трудно использовать для юридических целей.