Comment dessiner une image avec du texte au centre via une ligne de commande?

8

J'ai besoin de peindre une image avec du texte au centre via la ligne de commande pour la mettre plus loin dans la vidéo. Un simple texte jaune sur fond noir.

J'ai essayé de FFmpegfaçon:

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

Ce qui m'a donné l'erreur suivante:

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

J'ai essayé d'installer ivtools et essayé drawtoolet idrawqui sont évidemment pour les environnements de bureau.

Comment créer une image simple avec du texte dans Ubuntu par programmation?

Vladimir Stazhilov
la source

Réponses:

19

Qu'en est-il de cette commande:

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

entrez la description de l'image ici

En utilisant la commande ci-dessus, vous créez une image .png vide dont la couleur d'arrière-plan est noire.

-background color
   définit la couleur d'arrière-plan.
   la couleur d'arrière-plan par défaut (si aucune n'est spécifiée ou trouvée dans l'image) est le blanc.

La taille d'image créée sera de 800x480 ( width[xheight]).

-size width [xheight] [+ offset]
   définit la largeur et la hauteur de l'image brute.

-couleur de couleur
   à utiliser lors du remplissage d'une primitive graphique.

Cette option accepte un nom de couleur, une couleur hexadécimale ou une spécification numérique RGB, RGBA, HSL, HSLA, CMYK ou CMYKA. Voir Noms de couleurs pour une description de la façon de spécifier correctement l'argument de couleur.

Par exemple,

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

Mettez la spécification de couleur entre guillemets pour empêcher le "#" ou les parenthèses d'être interprétés par votre shell.

Pour imprimer une liste complète des noms de couleurs, utilisez l' option -list color .

-pointsize size taille en
   points de la police PostScript, OPTION1 ou TrueType.

-gravity de type
   définit la suggestion de la gravité actuelle de divers autres paramètres et options.

Les choix incluent: Nord-Ouest, Nord, Nord-Est, Ouest, Centre, Est, Sud-Ouest, Sud, Sud-Est. Utilisez -list gravity pour obtenir une liste complète des paramètres -gravity disponibles dans votre installation ImageMagick.

label:'your Text Here' écrivez votre texte dans image.png.

Voir également plus d'exemples .

Voir toutes les options de ligne de commande

αғsнιη
la source
8

Si nous parlions de vidéo extérieure, je ferais un simple SVG dans inkscape avec une chaîne d'espace réservé comme OLISTRING, obtenez-le comme je veux qu'il ressemble, puis manipulez-le sur la ligne de commande pour remplacer mon texte dynamique. Et utilisez Inkscape pour le pixelliser .

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

Le véritable avantage de cette approche est que vous n'êtes limité que par ce que vous pouvez faire dans Inkscape ... Vous obtenez également une sortie assez nette grâce au moteur de rendu d'Inkscape.

Voici le résultat:

entrez la description de l'image ici

Comme rendu à partir de cela (en passant par mon 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
la source
7

J'ai trouvé une solution: installé Imagestick:

sudo apt-get install imagemagick

Et puis j'ai utilisé quelque chose comme:

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

Et puis utilisez

man convert

pour voir la documentation et jouer à haute voix.

Vladimir Stazhilov
la source
-1

La commande ffmpeg n'a pas fonctionné car ubuntu n'a pas ffmpeg, il a plutôt libav .

Essayez ffmpeg -versionde confirmer (retournera 0,8 quelque chose IIRC).

Si vous obtenez la dernière version (2.4.3) de http://ffmpeg.org, drawtext fonctionnera.

OrangeDog
la source
Bizarre! Je suis sur Ubuntu 14.04 et ffmpegretourne la version 1.2.6. Je sais qu'il y avait un désaccord entre ffmpeget avconv. Je remarque que avconvc'est un lien vers ffmpeg. Si étrange.
Paddy Landau