Como desenhar uma imagem com texto no centro disso via linha de comando?

8

Preciso pintar uma imagem com texto no centro via linha de comando para colocar ainda mais no vídeo. Um simples texto amarelo sobre fundo preto.

Eu tentei o FFmpegcaminho:

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

O que me deu o seguinte erro:

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

Eu tentei instalar o ivtools e tentei drawtoole idrawque são obviamente para ambientes de desktop.

Como criar uma imagem simples com texto no Ubuntu programaticamente?

Vladimir Stazhilov
fonte

Respostas:

19

E esse comando:

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

insira a descrição da imagem aqui

Usando o comando acima, você cria uma imagem .png vazia cuja cor de fundo é preta.

-background cor
   definir a cor de fundo.
   a cor de fundo padrão (se nenhuma for especificada ou encontrada na imagem) é branca.

O tamanho da imagem criada será 800x480 ( width[xheight]).

-Size largura [xheight] [+ offset]
   definir a largura e altura da imagem em bruto.

- preencha a
   cor a ser usada ao preencher uma primitiva gráfica.

Esta opção aceita um nome de cor, uma cor hexadecimal ou uma especificação numérica RGB, RGBA, HSL, HSLA, CMYK ou CMYKA. Consulte Nomes de cores para obter uma descrição de como especificar corretamente o argumento de cores.

Por exemplo,

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

Coloque a especificação de cores entre aspas para impedir que o "#" ou os parênteses sejam interpretados pelo seu shell.

Para imprimir uma lista completa de nomes de cores, use a opção -list color .

-pointsize size tamanho da
   fonte PostScript, OPTION1 ou TrueType.

-gravity type
   define a sugestão de gravidade atual para várias outras configurações e opções.

As opções incluem: Noroeste, Norte, Noroeste, Oeste, Centro, Leste, Sudoeste, Sul, Sudeste. Use -list gravity para obter uma lista completa das configurações de -gravity disponíveis na sua instalação do ImageMagick.

label:'your Text Here' escreva seu texto em image.png.

Veja também mais exemplos .

Veja as opções completas da linha de comando

αғsнιη
fonte
8

Se estivéssemos falando de vídeo externo, eu faria um SVG simples no inkscape com uma string de espaço reservado OLISTRING, obtendo a aparência desejada e manipulando-o na linha de comando para substituir meu texto dinâmico. E use o Inkscape para rasterizá-lo .

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

O benefício real dessa abordagem é que você é limitado apenas pelo que pode fazer no Inkscape ... Você também obtém uma saída bem nítida graças ao mecanismo de renderização do Inkscape.

Aqui está o resultado:

insira a descrição da imagem aqui

Como renderizado a partir disso (passando pelo meu 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
fonte
7

Eu encontrei uma solução: Imagestick instalado:

sudo apt-get install imagemagick

E então eu usei algo como:

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

E então use

man convert

para ver a documentação e tocar em voz alta.

Vladimir Stazhilov
fonte
-1

O comando ffmpeg não funcionou porque o ubuntu não possui ffmpeg, mas sim libav .

Tente ffmpeg -versionconfirmar (retornará 0.8.algo IIRC).

Se você obtiver a versão mais recente (2.4.3) em http://ffmpeg.org , o drawtext funcionará.

OrangeDog
fonte
Bizarro! Estou no Ubuntu 14.04 e ffmpegretorna a versão 1.2.6. Eu sei que houve alguma discordância entre ffmpege avconv. Percebo que avconvé um link para ffmpeg. Tão estranho.
Paddy Landau