¿Cómo dibujar una imagen con texto en el centro de eso a través de la línea de comandos?

8

Necesito pintar una imagen con texto en el centro a través de la línea de comandos para poner más en el video. Un simple texto amarillo sobre fondo negro.

Lo intenté de la FFmpegmanera:

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

Lo que me dio el siguiente error:

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

Traté de instalar ivtools y lo intenté drawtooly idrawque obviamente son para entornos de escritorio.

¿Cómo crear una imagen simple con texto en Ubuntu programáticamente?

Vladimir Stazhilov
fuente

Respuestas:

19

¿Qué pasa con este comando:

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

ingrese la descripción de la imagen aquí

Al usar el comando anterior, crea una imagen .png vacía cuyo color de fondo es negro.

-Antecedentes de color
   establece el color de fondo.
   El color de fondo predeterminado (si no se especifica o se encuentra en la imagen) es blanco.

El tamaño de la imagen creada será 800x480 ( width[xheight]).

-size width [xheight] [+ offset]
   establece el ancho y la altura de la imagen en bruto.

-color de color
   de relleno para usar al rellenar un gráfico primitivo.

Esta opción acepta un nombre de color, un color hexadecimal o una especificación numérica RGB, RGBA, HSL, HSLA, CMYK o CMYKA. Consulte Nombres de colores para obtener una descripción de cómo especificar correctamente el argumento de color.

Por ejemplo,

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

Encierre la especificación de color entre comillas para evitar que el "#" o los paréntesis sean interpretados por su shell.

Para imprimir una lista completa de nombres de colores, use la opción -list color .

-tamaño de puntos tamaño de
   puntos de la fuente PostScript, OPTION1 o TrueType.

-gravity type
   establece la sugerencia de gravedad actual para varias otras configuraciones y opciones.

Las opciones incluyen: NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast. Use -list gravity para obtener una lista completa de configuraciones de gravedad disponibles en su instalación de ImageMagick.

label:'your Text Here' escribe tu texto en image.png.

Ver también más ejemplos .

Ver opciones completas de línea de comandos

αғsнιη
fuente
8

Si estuviéramos hablando de video externo, haría un SVG simple en inkscape con una cadena de marcador de posición como OLISTRING, quiero que se vea y luego manipularlo en la línea de comando para sustituir mi texto dinámico. Y usar Inkscape para rasterizarlo .

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

El beneficio real de este enfoque es que solo está limitado por lo que puede hacer en Inkscape ... También obtiene una salida bastante nítida gracias al motor de renderizado de Inkscape.

Aquí está el resultado:

ingrese la descripción de la imagen aquí

Como se muestra a partir de esto (pasando por mi 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
fuente
7

Encontré una solución: Imagestick instalado:

sudo apt-get install imagemagick

Y luego usé algo como:

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

Y luego usar

man convert

para ver documentación y jugar en voz alta.

Vladimir Stazhilov
fuente
-1

El comando ffmpeg no funcionó porque ubuntu no tiene ffmpeg, sino que tiene libav .

Intente ffmpeg -versionconfirmar (devolverá 0.8.algo IIRC).

Si obtiene la última versión (2.4.3) de http://ffmpeg.org , drawtext funcionará.

OrangeDog
fuente
¡Extraño! Estoy en Ubuntu 14.04 y ffmpegdevuelve la versión 1.2.6. Sé que hubo algún desacuerdo entre ffmpegy avconv. Me doy cuenta de que avconves un enlace a ffmpeg. Tan raro.
Paddy Landau