2016-07-11 5 views
0

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

ffmpeg -i input1.mp4 -filter_complex "[0:v]transpose=2[anticlockwiserotated];[anticlockwiserotated]drawtext=fontfile=../../public/fonts/Roboto-Regular-webfont.ttf: text='Test Text':x=100: y=50: fontsize=36: fontcolor=white:[textapplied];[textapplied]transpose=1" output_video.mp4 

Это позволяет мне накладывать только горизонтально или вертикально.

Но я хочу добавить его под углом, равным 45 градусам.

Для этого, если я изменить команду, как

ffmpeg -i input1.mp4 -filter_complex "[0:v]rotate=45*PI/180[anticlockwiserotated];[anticlockwiserotated]drawtext=fontfile=../../public/fonts/Roboto-Regular-webfont.ttf: text='Test Text':x=100: y=50: fontsize=36: fontcolor=white:[textapplied];[textapplied]rotate=315*PI/180" output_video.mp4 

К этому я получаю наложение видео, как:

enter image description here

Потому что в этом первое я вращающееся видео до 45 градусов, добавляя текст и вернуть его в исходное положение. Поэтому я теряю границы.

Пожалуйста, предложите мне лучший способ наложения текста с требуемым углом на видео.

Заранее спасибо.

ответ

3

Основной метод - генерировать текст на пустом холсте, затем альфа-слой для текста, поворачивая результат и накладывая его на основное видео.

В приведенной ниже команде a следует заменить на угол. Вместо этого вместо этого используются координаты для drawtext. В зависимости от длины текста некоторые из них могут быть обрезаны, если вы повернули его против часовой стрелки. Поэтому проверьте и отрегулируйте смещение Y соответственно.

ffmpeg -i input1.mp4 -filter_complex 
     "color=black:100x100[c]; 
     [c][0]scale2ref[ct][mv]; 
     [ct]setsar=1,drawtext=fontfile=../../public/fonts/Roboto-Regular-webfont.ttf: 
      text='Test Text':fontsize=36:fontcolor=white,split[text][alpha]; 
     [text][alpha]alphamerge,rotate=a:ow=rotw(a):oh=roth(a):[email protected][txta]; 
     [mv][txta]overlay=x='min(0,-H*sin(a))+100':y='min(0,W*sin(a))+50':shortest=1" 
     output_video.mp4 
+0

Это действительно полезно и еще одно небольшое сомнение, можем ли мы добавить жирные или курсивные эффекты к тексту ... и возможно ли добавить текст в определенный период времени. Я имею в виду от 10-го до 20-го числа видео, а оставшееся видео должно быть без текста. –

+0

Для выборочной синхронизации добавьте 'enable = 'между (t, 10,20)'' в drawtext. Вы можете использовать Bold или Italic TTF для этого стиля. – Mulvya

+0

Привет за поворот кажется, что я делаю неправильно. Проверьте эту команду один раз: «ffmpeg -i input1.mp4 -filter_complex» color = black: 100x100 [c]; [c] [0] scale2ref [ct] [mv]; [ct] setsar = 1, drawtext = fontfile =. ./../public/fonts/Roboto-Regular-webfont.ttf:text='Test Text ': fontsize = 36: fontcolor = white, split [текст] [alpha]; [текст] [alpha] alphamerge, rotate = 55: вл = rotw (55): О = Roth (55): с = черный @ 0 [txta]; [MV] [txta] наложения = х = мин (0, -Н * Sin (55)) + 100 ': y =' min (0, W * sin (55)) + 50 ': shortest = 1 "output_video.mp4". При этом я почти получаю 90 градусов, но намерение - получить 55 градусов. Пожалуйста, направляйте меня, где я делаю неправильно. –

1

Один из способов заключается в использовании ASS или SRT субтитров с FFmpeg subtitles или ass фильтров.

enter image description here

ffmpeg -i input -filter_complex "subtitles=diagonal.ass" output 

SRT субтитры намного проще, чем АПС и не поддерживают вращение, но вы можете добавить ее вручную с фильтром:

ffmpeg -i input -filter_complex "subtitles=diagonal.srt:force_style='Angle=45'" output 

Вы можете создать и стиль субтитров с Aegisub или вручную.