
Ich erstelle mit ffmpeg ein Video aus einem einzelnen Bild und zeichne Text über das Video.
Wie kann ich drawtext
das erreichen, indem ich die skalierte Videogröße anstelle des Bildmaßstabs darüberlege?
Wenn ich jetzt einen Text hinzufüge, beginnen die X- und Y-Achsen in der oberen linken Ecke des Bildes und nicht im skalierten Video selbst. Das Bild hat kleinere Abmessungen als der Videomaßstab, daher muss ich den Text unabhängig von der Bildgröße zeichnen. Wenn der Text über den Bildmaßstab hinausgeht, wird er abgeschnitten, obwohl der ungefüllte schwarze Rand des verbleibenden skalierten Videos noch vorhanden ist.
Dies ist der Befehl, den ich verwende.
ffmpeg -loop 1 -r 1 -i image.jpg -b:v 1M -vf "scale=320:240, drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSerif-Bold.ttf: text='Test Text': x=200: y=100: fontsize=30: [email protected]: box=1: [email protected]" -t 20 output.mp4
Antwort1
Wenn das Bild die einzige Videoquelle ist, dannist nurdas Bild und "Overlay aus der oberen linken Ecke des Videos" bedeutet dasselbe wie "Overlay von der oberen linken Ecke des Bildes". Also machst du es richtig.
Der schwarze Rand, den Sie erwähnen, istnichtTeil des Videos. Es wird eingefügt durchmancheMediaplayer beim Öffnen sehr schmaler Videos, da die Bedienleiste des Mediaplayers breiter als das Video ist. Der VLC Mediaplayer hat beispielsweise eine ziemlich breite Bedien-/Menüleiste und füllt das Video mit großen Rändern auf. Der Windows Media Player zeigt jedoch keinen schwarzen Rand an, da seine Bedienelemente in die 320p-Videobreite passen.
Antwort2
Mit dem folgenden Befehl hat es funktioniert:
ffmpeg -loop 1 -i image.jpg -r 29.970 -c:v libx264 -t 15 -pix_fmt yuv420p -profile:v high -level 4.2 -vf "scale=1920:1080, drawtext = text='Resumes in %{eif\:15-t\:d}': x=200: y=100: fontsize=30: [email protected]: box=1: [email protected]" out.mp4