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

8

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

Eu tentei FFmpeg way:

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 ivtools e tentei drawtool e idraw , que são obviamente para ambientes de área de trabalho.

Como criar uma imagem simples com texto no Ubuntu programaticamente?

    
por Vladimir Stazhilov 13.11.2014 / 13:18

4 respostas

19

E sobre esse comando:

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

Ao usar 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á 800 x 480 ( width[xheight] ).

-size largura [xheight] [+ offset]
defina a largura e a altura da imagem bruta.

-fill cor
cor para usar 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 da cor entre aspas para evitar que o "#" ou os parênteses sejam interpretados pelo seu shell.

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

-ponta tamanho Especifique o tamanho da fonte PostScript, OPTION1 ou TrueType.

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

As opções incluem: Noroeste, Norte, Norte, Oeste, Centro, Leste, Sudoeste, Sul, Sudeste. Use -list gravidade para obter uma lista completa de < Configurações de href="http://www.imagemagick.org/script/command-line-options.php#gravity" -gravity disponíveis na sua instalação do ImageMagick.

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

Além disso, veja mais exemplos .

Veja as opções completas de linha de comando

    
por αғsнιη 13.11.2014 / 14:56
8

Se estivéssemos falando de vídeo externo, eu faria um SVG simples no inkscape com uma string de espaço reservado como OLISTRING , entendesse como eu queria que ele aparecesse e manipulasse isso 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 com esta abordagem é que você está limitado apenas pelo que pode fazer no Inkscape ... Você também obtém uma saída bastante nítida graças ao mecanismo de renderização do Inkscape.

Aqui está o resultado:

Como processado 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>
    
por Oli 13.11.2014 / 13:29
7

Eu encontrei uma solução: instalado Imagestick:

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, em seguida, use

man convert

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

    
por Vladimir Stazhilov 13.11.2014 / 13:27
-1

O comando ffmpeg não funcionou porque o ubuntu não tem o ffmpeg, ele tem a libav .

Teste ffmpeg -version para confirmar (retornará 0,8. algo IIRC).

Se você obtiver a versão mais recente (2.4.3) do link , o texto descritivo funcionará.

    
por OrangeDog 14.11.2014 / 10:23