Ffmpeg создает пустой экран с текстовым видео

Я хотел бы создать видео, состоящее из некоторого текста. Видео будет длиться всего 0,5 секунды. Фон должен быть просто цветом, я могу создать такое видео с фотографии, но не могу найти, как это можно сделать без фотографии, просто используя текст для создания такого видео.

Вы можете мне помочь? Спасибо заранее

Ответ 1

Добавить текст в сплошной цвет фона

введите описание изображения здесь

Используйте color фильтр источника видео и drawtext видеофильтр.

ffmpeg -f lavfi -i color=c=blue:s=320x240:d=0.5 -vf \
"drawtext=fontfile=/path/to/font.ttf:fontsize=30: \
 fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2:text='Stack Overflow'" \
output.mp4

С прозрачным полем за текстом

Другой пример с белым полем за текстом с непрозрачностью 25% с 5-пиксельным отступом:

введите описание изображения здесь

ffmpeg -f lavfi -i color=c=red:s=320x240:d=0.5 -vf \
"drawtext=fontfile=/path/to/font.ttf:fontsize=30: \
 box=1:boxborderw=5:[email protected]: \
 fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2:text='Stack Overflow'" \
output.mp4

Несколько строк

введите описание изображения здесь введите описание изображения здесь
Легче центрировать две строки с несколькими примерами drawtext (левое изображение). Правильное изображение из внешних файлов и примеров разрыва строки.

Вы можете объединить два фильтра drawtext или ссылаться на внешний текстовый файл с параметром textfile или добавить разрыв строки в команде.

Несколько экземпляров drawtext

ffmpeg -f lavfi -i color=c=green:s=320x240:d=0.5 -vf \
"drawtext=fontfile=/path/to/font.ttf:fontsize=30:fontcolor=white:x=(w-text_w)/2:y=(h-text_h-text_h)/2:text='Stack', \
 drawtext=fontfile=/path/to/font.ttf:fontsize=30:fontcolor=white:x=(w-text_w)/2:y=(h+text_h)/2:text='Overflow'" \
output.mp4

Внешний текстовый файл

Содержимое текстового файла text.txt выглядит следующим образом:

Stack
Overflow

Команда ffmpeg:

ffmpeg -f lavfi -i color=c=green:s=320x240:d=0.5 -vf \
"drawtext=fontfile=/path/to/font.ttf:fontsize=30: \
 fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2:textfile=text.txt" \
output.mp4

Команда разрыва строки

ffmpeg -f lavfi -i color=c=green:s=320x240:d=0.5 -vf \
"drawtext=fontfile=/path/to/font.ttf:fontsize=30: \
fontcolor=white:x=(w-text_w)/2:y=(h-text_h)/2:text='Stack
Overflow'" \
output.mp4

Выходное изображение вместо видео

Если вы хотите, чтобы результат изображения заменил output.mp4 на -frames:v 1 output.png.

Альтернативный метод

Использование subtitles filter - это еще один способ сделать это.