如何通过命令行在文本的中心绘制图片?


8

我需要通过命令行在中间用文本绘制图像,以进一步放入视频中。在黑背景的简单的黄色文本。

我尝试了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'

我试图安装ivtools,并试图drawtoolidraw这显然是针对桌面环境。

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

Answers:


19

这个命令呢:

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

在此处输入图片说明

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

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

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

-size width [xheight] [+ offset]
   设置原始图像的宽度和高度。

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

此选项接受颜色名称,十六进制颜色或数字RGB,RGBA,HSL,HSLA,CMYK或CMYKA规范。有关如何正确指定color参数的说明,请参见颜色名称

例如,

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

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

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

-pointsize 大小
   PostScript,OPTION1或TrueType字体的点大小。

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

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

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

请参阅更多示例

查看完整的命令行选项


8

如果我们在谈论外部视频,我将在inkscape中使用诸如的占位符字符串制作一个简单的SVG OLISTRING,获取其所需的外观,然后在命令行上进行操作以替换我的动态文本。然后使用Inkscape对其进行栅格化。

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

这种方法的真正好处是,您仅受Inkscape所能做的限制...由于Inkscape的渲染引擎,您还可以获得清晰的输出。

结果如下:

在此处输入图片说明

从此渲染(通过my 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

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

sudo apt-get install imagemagick

然后我使用了类似的东西:

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

然后用

man convert

查看说明文件并畅玩。


-1

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

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

如果您从http://ffmpeg.org获得了最新版本(2.4.3),则drawtext将起作用。


怪异的!我在Ubuntu 14.04上并ffmpeg返回版本1.2.6。我知道ffmpeg和之间存在一些分歧avconv。我注意到这avconv是的链接ffmpeg。太奇怪了。
Paddy Landau 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.