Wie zeichnet man ein Bild mit Text in der Mitte über die Kommandozeile?

8

Ich muss ein Bild mit Text in der Mitte über die Befehlszeile malen, um es weiter in das Video einzufügen. Ein einfacher gelber Text auf schwarzem Hintergrund.

Ich habe es versucht FFmpeg:

ffmpeg -loop 1 -r 1 -i b.png -b:v 1M -vf "scale=320:240, drawtext=fontfile=/usr/share/fonts/truetype/DejaVuSans.ttf: text='Test Text'" -vcodec mpeg4 -acodec aac preroll.mp4

Welches gab mir den folgenden Fehler:

[AVFilterGraph @ 0xf56020] No such filter: 'drawtext'

Ich habe versucht, ivtools zu installieren und habe versucht, drawtoolund idrawdie sind offensichtlich für Desktop-Umgebungen.

Wie erstelle ich programmgesteuert ein einfaches Bild mit Text in Ubuntu?

Vladimir Stazhilov
quelle

Antworten:

19

Was ist mit diesem Befehl:

convert -background black -size 800x480 -fill "#ff0080"  -pointsize 72 -gravity center label:'Ask Ubuntu' output.png

Geben Sie hier die Bildbeschreibung ein

Mit dem obigen Befehl erstellen Sie ein leeres PNG-Bild, dessen Hintergrundfarbe schwarz ist.

-background Farbe
   der Hintergrundfarbe.
   Die Standardhintergrundfarbe (falls keine angegeben oder im Bild gefunden wird) ist Weiß.

Die erstellte Bildgröße beträgt 800x480 ( width[xheight]).

-size width [xheight] [+ offset] Legt
   die Breite und Höhe des Rohbilds fest .

-Füllfarbe Farbe
   zum Füllen eines Grafikprimitivs.

Diese Option akzeptiert einen Farbnamen, eine Hex-Farbe oder eine numerische RGB-, RGBA-, HSL-, HSLA-, CMYK- oder CMYKA-Spezifikation. Unter Farbnamen finden Sie eine Beschreibung, wie Sie das Farbargument richtig angeben.

Zum Beispiel,

 -fill blue
 -fill "#ff0080"
 -fill "rgb(255,0,128)" 

Fügen Sie die Farbspezifikation in Anführungszeichen ein, um zu verhindern, dass das "#" oder die Klammern von Ihrer Shell interpretiert werden.

Verwenden Sie die Option -list color, um eine vollständige Liste der Farbnamen zu drucken .

-Punktgröße Größe
   Punktgröße der PostScript-, OPTION1- oder TrueType-Schriftart.

-gravity type
   legt den aktuellen Schwerkraftvorschlag für verschiedene andere Einstellungen und Optionen fest.

Zur Auswahl stehen: Nordwest, Nord, Nordost, West, Mitte, Ost, Südwest, Süd, Südost. Verwenden Sie die Schwerkraft -list , um eine vollständige Liste der in Ihrer ImageMagick-Installation verfügbaren -gravity- Einstellungen zu erhalten.

label:'your Text Here' Schreiben Sie Ihren Text in image.png.

Auch weitere Beispiele .

Siehe vollständige Befehlszeilenoptionen

αғsнιη
quelle
8

Wenn wir über ein externes Video sprechen würden, würde ich ein einfaches SVG in inkscape mit einer Platzhalterzeichenfolge wie erstellen OLISTRING, es so erhalten, wie es aussehen soll, und es dann in der Befehlszeile bearbeiten , um meinen dynamischen Text zu ersetzen. Und Inkscape verwenden, um es zu rastern .

inkscape -z -e intro.png -w 1920 -h 1080 <(sed 's/OLISTRING/My Video!/' drawing.svg)

Der eigentliche Vorteil dieses Ansatzes besteht darin, dass Sie nur durch die Möglichkeiten in Inkscape eingeschränkt sind. Dank der Rendering-Engine von Inkscape erhalten Sie auch eine ziemlich gestochen scharfe Ausgabe.

Hier ist das Ergebnis:

Geben Sie hier die Bildbeschreibung ein

Wie daraus gerendert (durch meine gehen sed)

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   width="1920"
   height="1080"
   id="svg2"
   version="1.1"
   inkscape:version="0.48.4 r9939"
   sodipodi:docname="New document 1">
  <defs
     id="defs4" />
  <sodipodi:namedview
     id="base"
     pagecolor="#000000"
     bordercolor="#666666"
     borderopacity="1.0"
     inkscape:pageopacity="1"
     inkscape:pageshadow="2"
     inkscape:zoom="0.35"
     inkscape:cx="375"
     inkscape:cy="520"
     inkscape:document-units="px"
     inkscape:current-layer="layer1"
     showgrid="false"
     inkscape:window-width="1920"
     inkscape:window-height="1130"
     inkscape:window-x="-2"
     inkscape:window-y="-3"
     inkscape:window-maximized="1" />
  <metadata
     id="metadata7">
    <rdf:RDF>
      <cc:Work
         rdf:about="">
        <dc:format>image/svg+xml</dc:format>
        <dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
        <dc:title></dc:title>
      </cc:Work>
    </rdf:RDF>
  </metadata>
  <g
     inkscape:label="Layer 1"
     inkscape:groupmode="layer"
     id="layer1"
     transform="translate(0,27.637817)">
    <flowRoot
       xml:space="preserve"
       id="flowRoot2985"
       style="fill:black;stroke:none;stroke-opacity:1;stroke-width:1px;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;font-family:Sans;font-style:normal;font-weight:normal;font-size:72px;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;text-align:center"><flowRegion
         id="flowRegion2987"><rect
           id="rect2989"
           width="1917.1428"
           height="662.85712"
           x="0"
           y="174.28572"
           style="text-anchor:middle;text-align:center;font-size:72px" /></flowRegion><flowPara
         id="flowPara2991"></flowPara></flowRoot>    <flowRoot
       xml:space="preserve"
       id="flowRoot2993"
       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
       transform="translate(0,192.36218)"><flowRegion
         id="flowRegion2995"><rect
           id="rect2997"
           width="1917.1428"
           height="700"
           x="0"
           y="151.42857" /></flowRegion><flowPara
         id="flowPara2999"
         style="font-size:244px;font-weight:bold;text-align:center;text-anchor:middle;fill:#ffff00;-inkscape-font-specification:Sans Bold">OLISTRING</flowPara></flowRoot>    <flowRoot
       xml:space="preserve"
       id="flowRoot3001"
       style="fill:black;stroke:none;stroke-opacity:1;stroke-width:1px;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:1;font-family:Sans;font-style:normal;font-weight:normal;font-size:40px;line-height:125%;letter-spacing:0px;word-spacing:0px"><flowRegion
         id="flowRegion3003"><rect
           id="rect3005"
           width="0"
           height="85.714287"
           x="962.85712"
           y="397.14285" /></flowRegion><flowPara
         id="flowPara3007"></flowPara></flowRoot>  </g>
</svg>
Oli
quelle
7

Ich habe eine Lösung gefunden: Imagestick installiert:

sudo apt-get install imagemagick

Und dann habe ich so etwas benutzt wie:

convert -pointsize 36 -fill red -draw 'text 10,10 "Loh pidr text" ' b.png test1.jpg

Und dann benutzen

man convert

Dokumentation zu sehen und herumzuspielen.

Vladimir Stazhilov
quelle
-1

Der Befehl ffmpeg hat nicht funktioniert, da Ubuntu kein ffmpeg hat, sondern libav .

Versuchen Sie ffmpeg -versionzu bestätigen (wird 0.8.something IIRC zurückgeben).

Wenn Sie die neueste Version (2.4.3) von http://ffmpeg.org erhalten, funktioniert drawtext.

OrangeDog
quelle
Bizarr! Ich bin auf Ubuntu 14.04 und ffmpeggebe Version 1.2.6 zurück. Ich weiß, dass es einige Meinungsverschiedenheiten zwischen ffmpegund gab avconv. Ich stelle fest, dass dies avconvein Link zu ist ffmpeg. So seltsam.
Paddy Landau