如何通过命令行在中心绘制带有文字的图画?

如何通过命令行在中心绘制带有文字的图画?

我需要通过命令行绘制一个中心带有文本的图像,以便进一步放入视频中。黑色背景上简单的黄色文本。

我尝试过的FFmpeg方法:

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

这给了我以下错误:

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

我尝试安装ivtoolsdrawtool并尝试过,idraw显然适用于桌面环境。

如何在 Ubuntu 中以编程方式创建带有文本的简单图像?

答案1

这个命令怎么样:

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

在此处输入图片描述

通过使用上述命令,您可以创建一个空的 .png 图像,其背景颜色为黑色。

-背景颜色
   设置背景颜色。
   默认背景颜色(如果未指定或在图像中找到)为白色。

创建的图像尺寸将为 800x480( width[xheight])。

-尺寸宽度[x高度][+偏移]
   设置原始图像的宽度和高度。

-充满颜色
   填充图形基元时使用的颜色。

此选项接受颜色名称、十六进制颜色或数值 RGB、RGBA、HSL、HSLA、CMYK 或 CMYKA 规范。请参阅颜色名称有关如何正确指定颜色参数的描述。

例如,

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

将颜色规范括在引号中,以防止 shell 解释“#”或括号。

要打印颜色名称的完整列表,请使用-列表颜色选项。

-点大小尺寸
   PostScript、OPTION1 或 TrueType 字体的点大小。

-重力类型
   为各种其他设置和选项设置当前重力建议。

选项包括:西北、北、东北、西、中心、东、西南、南、东南。使用-列表重力获取完整列表-重力ImageMagick 安装中可用的设置。

label:'your Text Here'将您的文本写入 image.png。

查看更多示例

查看完整的命令行选项

答案2

如果我们谈论的是外部视频,我会在 Inkscape 中制作一个简单的 SVG,并使用类似的占位符字符串OLISTRING,让它看起来像我想要的那样,然后在命令行上操作它来替换我的动态文本。并使用 Inkscape 对其进行栅格化。

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

这种方法的真正好处在于您只受限于在 Inkscape 中可以做的事情...借助 Inkscape 的渲染引擎,您还可以获得非常清晰的输出。

结果如下:

在此处输入图片描述

从这里可以看出(通过我的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>

答案3

我找到了一个解决方案:安装 Imagestick:

sudo apt-get install imagemagick

然后我用了类似的东西:

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

然后使用

man convert

查看文档并试用。

答案4

ffmpeg 命令不起作用,因为ubuntu 没有 ffmpeg,而是有 libav

尝试ffmpeg -version确认(将返回 0.8.something IIRC)。

如果你从http://ffmpeg.org然后 drawtext 就可以工作了。

相关内容