2016-07-11 6 views
0

Ich versuche, einige Text auf Video mit ffmpeg zu überlagern. Ich bin in der Lage, Text mit dem unten stehenden Befehl zu überlagern.Overlaying Text auf Video mit erforderlichen Winkel mit 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 

Es ist mir erlaubt, nur horizontal oder vertikal zu überlagern.

Aber ich möchte es mit einem Winkel wie 45 Grad anhängen.

dass Denn wenn ich den Befehl ändern wie

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 

Damit ich Overlay-Video bin immer so:

enter image description here

Da in diesem ersten bis 45 Grad Ich bin rotierendes Video, Anfügen Text und bringt es zurück zur ursprünglichen Position. Also verliere ich Grenzen.

Bitte schlagen Sie mir die beste Möglichkeit vor, Text mit dem gewünschten Winkel auf Video zu überlagern.

Vielen Dank im Voraus.

Antwort

3

Grundlegende Methode ist, um Text auf einer leeren Leinwand, dann eine Alpha-Ebene für den Text, Drehen des Ergebnisses und überlagern, dass auf dem Hauptvideo.

Im folgenden Befehl sollte a durch den Winkel ersetzt werden. Die Koordinaten für den Zeichentext werden stattdessen in dem Overlay verwendet. Abhängig von der Länge Ihres Textes kann ein Teil davon abgeschnitten werden, wenn Sie ihn gegen den Uhrzeigersinn drehen. Überprüfen und justieren Sie den Y-Offset entsprechend.

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

Es ist wirklich nützlich und ein weiterer kleiner Zweifel, können wir dem Text fett oder kursiv Effekte hinzufügen ... und ist es möglich, Text zu bestimmten Zeitpunkten hinzuzufügen. Ich meine nur von 10. bis 20. Sekunde des Videos und das verbleibende Video sollte ohne Text sein. –

+0

Für selektives Timing fügen Sie 'enable = 'zwischen (t, 10,20)'' hinzu, um Text zu zeichnen. Sie können den Fett- oder Kursiv-TTF für diesen Stil verwenden. – Mulvya

+0

Hallo zur Rotation, es scheint etwas, wo ich falsch mache. Bitte überprüfen Sie diesen Befehl einmal "ffmpeg -i input1.mp4 -filter_complex" color = schwarz: 100x100 [c]; [c] [0] scale2ref [ct] [mv]; [ct] setsar = 1, zeichenkette = fontfile =. ./../public/fonts/Roboto-Regular-webfont.ttf:text='Testtext ': fontsize = 36: fontcolor = weiß, split [text] [alpha]; [text] [alpha] alphameringe, route = 55: ow = rotw (55): oh = roth (55): c = schwarz @ 0 [txt]; [mv] [txta] überlagerung = x = 'min (0, -H * sin (55)) + 100 ': y =' min (0, W * sin (55)) + 50 ': kürzeste = 1 "output_video.mp4". Damit erreiche ich fast 90 Grad, aber ich möchte 55 Grad erreichen. Bitte führe mich, wo ich falsch liege. –

1

Eine Methode ist, indem sie mit den FFmpeg subtitles oder ass Filter ASS oder SRT Untertitel verwendet wird.

enter image description here

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

SRT Untertitel sind viel einfacher als ASS und unterstützen keine Rotation, aber Sie können es manuell mit dem Filter hinzufügen:

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

Sie können die Untertitel erstellen und Stil mit Aegisub oder manuell.