5

Я сомневаюсь, что это возможно, но я пытаюсь найти способ

  1. динамически отображать текст, а затем
  2. при желании оживить его (простое движение слева направо), а затем
  3. Скомпоновать результат поверх другого видео.

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

1 ответ1

8

Вы можете использовать фильтр drawtext.

Динамический текст

Текст может быть изменен во время кодирования, если вы используете textfile и reload :

  • textfile Текстовый файл, содержащий текст для рисования. Текст должен быть последовательностью символов в кодировке UTF-8.

  • reload Если установлено значение 1, текстовый файл будет перезагружаться перед каждым кадром. Обязательно обновите его атомарно, или оно может быть прочитано частично или даже не выполнено.

оживлять

Текст может перемещаться с использованием выражений в параметрах drawtext x и y . Смотрите в документации по drawtext список констант и функций.

Редактирование временной шкалы

Некоторые фильтры, такие как drawtext, поддерживают опцию enable означает, что вы можете выключать и включать фильтр. Вы можете увидеть, какие фильтры поддерживают временную шкалу:

ffmpeg -filters

пример

Если у вас есть входное видео, которое вы хотите наложить на текст:

ffmpeg -i input -vf "drawtext=enable='gte(t,3)':fontfile=Vera.ttf:textfile=text.txt:reload=1:y=h-line_h-10:x=(W/tw)*n" output
  • Это включит фильтр отрисовки текста через 3 секунды
  • Каждый раз, когда text.txt обновляется, текст будет меняться
  • Слова будут перемещаться на экране слева направо (я отстой в этих выражениях, но вы поймете)

Если у вас нет входного видео и вы просто хотите сгенерировать текст на черном фоне:

ffmpeg -f lavfi -i "color=color=black, drawtext=enable='gte(t,3)':fontfile=Vera.ttf:fontcolor=white:textfile=text.txt:reload=1:y=h-line_h-10:x=(W/tw)*n" -t 5 output

Здесь -t 5 указывает общую длину вывода. (Если не указано, кодировка будет выполняться вечно.) Цвет шрифта установлен на белый, поэтому текст становится видимым.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .