Как использовать FFmpeg для добавления бегущей строки/изменяющегося текста к живому видео?

Как использовать FFmpeg для добавления бегущей строки/изменяющегося текста к живому видео?

Я могу добавить текст к видео на моем жестком диске, прежде чем транслировать его... с помощью команды.

ffmpeg -y -i IMG_0696.MOV -acodec libmp3lame -vcodec msmpeg4 \
-b:a 192k -b:v 1000k -ar 44100 \
-vf "drawtext=text=string1 string2 string3 string4 string5 string6 string7 :expansion=normal:fontfile=/Windows/Fonts/cambriai.ttf: y=0:x=h-(2*lh)-n: fontcolor=white: fontsize=40: box=1: boxcolor=0x00000000@1" \
-an IMG_0696.avi

Теперь я хочу добавить разные тексты в разные моменты времени. Он должен быть прочитан из файла, который имеет форматформат : Например

00:00:10 : гугл
00:00:20 : yahoo
00:00:30 : msft
.
.
.
00:00:60 : amzn
.
.
.
00:05:30 : Ява

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

решение1

Отисходный код drawtextфильтра(из libavfilter/vf_drawtext.cисходного дерева), похоже, есть textfileпараметр, который может указывать путь к файлу, содержащему строку для рисования (в отличие от установки параметра, textкак в вашем примере). Вы можете поэкспериментировать с передачей ему пути к файлу как textfileи обновлением файла во время просмотра видеовыходов.

Вам также понадобится еще одна программа/демон, работающая параллельно для обновления файла (который будет содержать только текущий текст для отображения), но эта программа будет довольно тривиальной, если вы сможете синхронизировать ее с системными часами.


В качестве альтернативы вы можете изменить drawtextсам фильтр, чтобы он отображал определенную строку на основе текущего временного кода (которыйявляетсядоступно для фильтров FFmpeg). Хотя это потребовало бы изменения исходного кода фильтра и перекомпиляции с нуля, это также позволило бы избежать использования отдельной программы/демона, работающей параллельно (поскольку ваш собственный код был бы вызван всякий раз, когда FFmpeg пытается нарисовать строку).

Однако, если предположить, что textfileпараметр работает (читай: обновляется в каждом кадре), это, вероятно, будет лучшим методом, поскольку простой демон для обновления текстового файла можно написать на языке сценариев, например Python.

Связанный контент