Come disegnare un'immagine con il testo al centro di quello tramite la riga di comando?


8

Ho bisogno di dipingere un'immagine con il testo al centro tramite la riga di comando per inserire ulteriormente nel video. Un semplice testo giallo su sfondo nero.

Ho provato il FFmpegmodo:

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

Che mi ha dato il seguente errore:

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

Ho provato a installare ivtools e ho provato drawtoole idrawche sono ovviamente per ambienti desktop.

Come creare una semplice immagine con testo in Ubuntu a livello di codice?

Risposte:


19

Che dire di questo comando:

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

inserisci qui la descrizione dell'immagine

Usando il comando precedente si crea un'immagine vuota .png il cui colore di sfondo è nero.

-background colore
   impostare il colore di sfondo.
   il colore di sfondo predefinito (se non viene specificato o trovato nell'immagine) è bianco.

Le dimensioni dell'immagine creata saranno 800x480 ( width[xheight]).

-size width [xheight] [+ offset]
   imposta la larghezza e l'altezza dell'immagine non elaborata .

riempire il colore del
   colore da usare per riempire una primitiva grafica.

Questa opzione accetta un nome di colore, un colore esadecimale o una specifica numerica RGB, RGBA, HSL, HSLA, CMYK o CMYKA. Vedi Nomi di colore per una descrizione su come specificare correttamente l'argomento colore.

Per esempio,

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

Racchiudere le specifiche del colore tra virgolette per evitare che "#" o le parentesi vengano interpretate dalla shell.

Per stampare un elenco completo di nomi di colori, utilizzare l' opzione -list color .

-pointsize size
   pointsize del font PostScript, OPTION1 o TrueType.

-gravity type
   imposta l'attuale suggerimento di gravità per varie altre impostazioni e opzioni.

Le scelte includono: Nord-Ovest, Nord, Nord-Est, Ovest, Centro, Est, Sud-Ovest, Sud, Sud-Est. Utilizzare -list gravity per ottenere un elenco completo delle impostazioni -gravity disponibili nell'installazione di ImageMagick.

label:'your Text Here' scrivi il tuo testo in image.png.

Vedi anche altri esempi .

Vedi le opzioni complete della riga di comando


8

Se stessimo parlando di un video esterno, farei un semplice SVG in inkscape con una stringa segnaposto come OLISTRING, prenderei il modo in cui voglio che appaia, quindi lo manipolerei dalla riga di comando per sostituire il mio testo dinamico. E usare Inkscape per rasterizzarlo .

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

Il vero vantaggio di questo approccio è che sei limitato solo da ciò che puoi fare in Inkscape ... Ottieni anche un risultato piuttosto nitido grazie al motore di rendering di Inkscape.

Ecco il risultato:

inserisci qui la descrizione dell'immagine

Come reso da questo (passando attraverso il mio 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>

7

Ho trovato una soluzione: installato Imagestick:

sudo apt-get install imagemagick

E poi ho usato qualcosa del tipo:

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

E poi usa

man convert

per vedere la documentazione e suonare aroud.


-1

Il comando ffmpeg non ha funzionato perché ubuntu non ha ffmpeg, ha invece libav .

Prova ffmpeg -versiona confermare (restituirà 0.8.qualcosa di IIRC).

Se si ottiene l'ultima versione (2.4.3) da http://ffmpeg.org, drawtext funzionerà.


Bizzarro! Sono su Ubuntu 14.04 e ffmpegrestituisce la versione 1.2.6. So che c'è stato un disaccordo tra ffmpege avconv. Ho notato che avconvè un collegamento a ffmpeg. Così strano.
Paddy Landau,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.