Ffmpeg drawtext для многократного наложения текста по всему видеопространству

Я хочу, чтобы определенный текст, например Hello world, был распределен по нескольким строкам и по всему видеопространству/странице, как здесь. Ffmpeg drawtext для многократного наложения текста по всему видеопространству

Я запускаю команды ffmpeg в скрипте python, используя bash в качестве подпроцесса. Образец кода:

subprocess.run( [ "ffmpeg", "-i", input_file, "-vf", f"drawtext=font = {font_family}:text = {watermark_text}:fontcolor = {font_color}:fontsize = {font_size}{background_box}:{watermark_position}", "-codec:a", "copy", "-preset", encoding_preset, f"./watermark/{media_id}.mp4", ] )

Есть ли хороший способ добиться этого?

Создайте небольшой прозрачный холст, используя фильтр color. Нарисуйте текст, поверните, используйте тайловый фильтр, наложите на видео.

Gyan 31.03.2022 15:55

@Gyan - Вопрос о прозрачном холсте, можете ли вы создать его только с фильтром color src? Как вы, возможно, заметили в моем ответе на другой пост, мне пришлось создать его с помощью трех фильтров: color,format=rgba,colorkey. Есть ли способ лучше?

kesh 31.03.2022 16:29
color=black@0,format=yuva420p
Gyan 01.04.2022 06:10

Чтобы текст повторялся, нужно ли последовательно использовать несколько фильтров рисования текста?

Osama Bin Saleem 01.04.2022 09:09

ffmpeg -i video.mp4 -filter_complex "color=black:100x100,format=yuva444p[c];[c][0]scale2ref[ct][‌​mv];[ct]setsar=1,dra‌​wtext=font ='Roboto':‌​text='Test Text':fontsize=36:fontcolor=white,split[text][alpha];[text][‌​alpha]alphamerge,rot‌​ate=(55*PI/180 ):ow=r‌​otw(55*PI/180):oh=ro‌​th(55*PI/180):c=blac‌​k@0[txta];[mv][txta]‌​overlay=x ='min(0,-Hs‌​in(55*PI/180))+100':‌​y='min(0,Wsin(55*PI/‌​180))+50':shortest=1‌​,tile=8x8" output_video.mp4

Osama Bin Saleem 01.04.2022 09:59

Я использую указанную выше команду, но вместо создания плиток только для текста я создаю плитки для всего видео.

Osama Bin Saleem 01.04.2022 09:59

ffmpeg -i video.mp4 -filter_complex "color=black:100x100,format=yuva444p[c];[c][0]scale2ref[ct][‌​mv];[ct]setsar=1,dra‌​wtext=font ='Roboto':‌​text='Test Text':fontsize=36:fontcolor=white,split[text][alpha];[text][‌​alpha]alphamerge,rot‌​ate=(55*PI/180 ):ow=r‌​otw(55*PI/180):oh=ro‌​th(55*PI/180):c=blac‌​k@0,tile=8x8[txta];[‌​mv][txta ]overlay=x='‌​min(0,-Hsin(55*PI/18‌​0))+100':y='мин(0,Ws‌​in(55*PI/180))+50':s‌​hortest=1" output_video.mp4 --> Затем я использовал это, но текст появляется только один раз

Osama Bin Saleem 01.04.2022 11:27

@Gyan, не могли бы вы помочь мне с этим?

Osama Bin Saleem 01.04.2022 16:00

Завтра...........

Gyan 01.04.2022 17:44

Не могли бы вы посмотреть на это @Gyan

Osama Bin Saleem 04.04.2022 01:35

Позже сегодня....

Gyan 04.04.2022 09:59

Я удалил дополнительную конфигурацию, которая, как мне казалось, не нужна, но по-прежнему получаю тот же вывод (текст появляется только один раз). Обновленная команда: ffmpeg -i video.mp4 -filter_complex "drawtext=font='Roboto':text='Test Text':fontsize=20:fontcolor=white,split[text][alpha];[text][‌​alpha]alphamerge,rot‌​ate=(55*PI/180):ow=r‌​otw(55*PI /180):oh=ro‌​th(55*PI/180):c=blac‌​k@0,tile=10x10[txta]‌​;[0][txta]overlay=x=‌​'min(0) ,-Hsin(55*PI/1‌​80))+100':y='мин(0,W‌​sin(55*PI/180))+50':‌​shortest=1" output_video.mp4

Osama Bin Saleem 04.04.2022 14:42

Не могли бы вы взглянуть на это @Gyan

Osama Bin Saleem 04.04.2022 20:12
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
13
43
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это ваш основной шаблон. Я предполагаю, что вход 720p.

ffmpeg -i 720p_input -f lavfi -i "color=black@0:s=64x64,format=yuva420p" -filter_complex "[1]trim=end_frame=1,drawtext=font = {font_family}:text = {watermark_text}:fontcolor = {font_color}:fontsize = {font_size}{background_box}:{watermark_position},rotate=a = {degree}*PI/180:ow=hypot(iw,ih):oh=ow:c=black@0,loop=-1:1:0,tile=15x9,trim=end_frame=1[wm];[0][wm]overlay=0:0" -c:a copy -preset encoding_preset ./watermark/{media_id}.mp4

{degree} следует заменить на угол поворота. Максимальный размер каждой текстовой ячейки — 64 x sqrt(2) = 90 pixels с каждой стороны. 15x9 — мозаичный макет. Отрегулируйте это, чтобы покрыть весь входной кадр.

Мне просто нужно было изменить фильтр «поворот» на это, и это сработало. Большое спасибо! rotate=(30*PI/180):ow=rotw(30*PI/180):oh=rot(30*PI/180)

Osama Bin Saleem 05.04.2022 09:58

Другие вопросы по теме