![如何通过命令行在中心绘制带有文字的图画?](https://linux22.com/image/865163/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%9C%A8%E4%B8%AD%E5%BF%83%E7%BB%98%E5%88%B6%E5%B8%A6%E6%9C%89%E6%96%87%E5%AD%97%E7%9A%84%E5%9B%BE%E7%94%BB%EF%BC%9F.png)
我需要通过命令行绘制一个中心带有文本的图像,以便进一步放入视频中。黑色背景上简单的黄色文本。
我尝试过的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 就可以工作了。