Jak narysować obrazek z tekstem w środku tego wiersza poleceń?


8

Muszę pomalować obraz z tekstem na środku za pomocą wiersza polecenia, aby dalej umieścić w filmie. Prosty żółty tekst na czarnym tle.

Próbowałem FFmpegsposób:

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

Co dało mi następujący błąd:

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

Próbowałem zainstalować ivtools i próbowałem drawtooli idrawktóre oczywiście są przeznaczone dla środowisk stacjonarnych.

Jak stworzyć programowo prosty obraz z tekstem w Ubuntu?

Odpowiedzi:


19

Co z tym poleceniem:

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

wprowadź opis zdjęcia tutaj

Używając powyższego polecenia, tworzysz pusty obraz .png, którego kolor tła jest czarny.

-background kolor
   ustawić kolor tła.
   domyślny kolor tła (jeśli żaden nie jest określony lub znaleziony na obrazie) to biały.

Rozmiar utworzonego obrazu to 800 x 480 ( width[xheight]).

-size width [xheight] [+ offset]
   ustaw szerokość i wysokość surowego obrazu.

-pełnij kolor,
   który ma być używany podczas wypełniania grafiki pierwotnej.

Ta opcja akceptuje nazwę koloru, kolor heksadecymalny lub numeryczną specyfikację RGB, RGBA, HSL, HSLA, CMYK lub CMYKA. Zobacz Nazwy kolorów, aby dowiedzieć się, jak poprawnie określić argument koloru.

Na przykład,

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

Umieść specyfikację koloru w cudzysłowach, aby zapobiec interpretacji znaku „#” lub nawiasów przez powłokę.

Aby wydrukować pełną listę nazw kolorów, użyj opcji -list color .

-pointsize rozmiar rozmiar
   czcionki PostScript, OPTION1 lub TrueType.

-gravity typ
   ustawia bieżący grawitacyjny propozycję dla różnych innych ustawień i opcji.

Dostępne opcje to: NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast. Użyj -list grawitacji, aby uzyskać pełną listę ustawień grawitacji dostępnych w instalacji ImageMagick.

label:'your Text Here' napisz swój tekst do image.png.

Zobacz także więcej przykładów .

Zobacz pełne opcje wiersza polecenia


8

Gdybyśmy rozmawiali o zewnętrznym wideo, zrobiłbym prosty plik SVG w inkscape z ciągiem zastępczym, na przykład OLISTRING, pobierz go tak , jak chcę, a następnie zmanipuluj go w wierszu polecenia, aby zastąpić mój dynamiczny tekst. I użyj Inkscape, aby go zrasteryzować .

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

Prawdziwą korzyścią z tego podejścia jest to, że jesteś ograniczony tylko tym, co możesz zrobić w Inkscape ... Zyskujesz również dość wyraźną moc wyjściową dzięki silnikowi renderującemu Inkscape.

Oto wynik:

wprowadź opis zdjęcia tutaj

Jak wynika z tego (przechodząc przez mój 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

Znalazłem rozwiązanie: zainstalowałem Imagestick:

sudo apt-get install imagemagick

A potem użyłem czegoś takiego:

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

A potem użyj

man convert

przeglądać dokumentację i grać na głos.


-1

Komenda ffmpeg nie działała, ponieważ ubuntu nie ma ffmpeg, zamiast tego ma libav .

Spróbuj ffmpeg -versionpotwierdzić (zwróci 0,8. Coś IIRC).

Jeśli otrzymasz najnowszą wersję (2.4.3) ze strony http://ffmpeg.org, to drawtext będzie działał.


Dziwaczny! Jestem na Ubuntu 14.04 i ffmpegzwraca wersję 1.2.6. Wiem, że istniała pewna różnica zdań między ffmpegi avconv. Zauważam, że avconvjest to link do ffmpeg. Bardzo dziwne.
Paddy Landau,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.