Bildbearbeitung/-konvertierung

Ekkart Kleinod  • 

Links zu den Programmen ganz unten.

Animiertes gif erstellen

Werkzeug: convert aus imagemagick

Evtl. vorher Originalbilder verkleinern, sonst kann das lange dauern.

$> convert -delay 20 -loop 0 *.jpg loop.gif
  • delay - Anzeigedauer pro Bild in Ticks, wobei 1 Tick = 1/100 Sekunde ist
  • loop - Anzahl der Wiederholungen, 0 = unendlich

Erfahrungswerte Sony alpha 6000

  • Originalgröße 6000x4000
  • verkleinern auf 600x400
  • loop: 8-10
  • 60 Bilder = 11 MB (600x400)
  • 100 Bilder = 17 MB (600x400)

Film erstellen

Werkzeug: ffmpeg

Alle JPGs im Verzeichnis unbearbeitet (Größe) in mp4 umwandeln, 12 Frames pro Sekunde.

$> ffmpeg -f image2 -pattern_type glob -framerate 12 -i '*.jpg' test.mp4

Alle JPGs im Verzeichnis in mp4 umwandeln, Ausgabegröße 1920x1280, 12 Frames pro Sekunde.

$> ffmpeg -f image2 -pattern_type glob -framerate 12 -i '*.jpg' -s 1920x1280 test.mp4

Erfahrungswerte Sony alpha 6000

  • Originalgröße 6000x4000
  • framerate: 15
  • 60 Bilder = 5,5 MB (1920x1080)
  • 100 Bilder = 9,5 MB (1920x1080)

SVG in PDF umwandeln

Mit Inkscape geht das ganz schnell über "Speichern unter", hier interessiert die Kommandozeile.

Einzelnes Bild

Werkzeug: Inkscape

$> inkscape --without-gui --export-pdf file.pdf file.svg

Alle Bilder eines Verzeichnisses

Hier die schnelle Variante, die Bilder mit Namen file.svg.pdf erzeugt:

$> find -name "*.svg" -exec inkscape --without-gui --export-pdf {}.pdf {} \;

Wenn man den Namen noch korrigieren will, könnte man z.B. folgendes tun:

$> rename s/svg.pdf/pdf/ *.pdf

Batch-resize

Werkzeug: convert aus imagemagick

EOS-Größe auf 900×600 bringen (über Prozentangabe)

$> find -name "*jpg" -exec convert -resize 26.04% {} {} \;

Bilder auf Maximalgröße 1024 in Höhe oder Breite bringen

$> find -name "*jpg" -exec convert -resize 1024x1024 {} {} \;

Batch-Konvertieren und -Umbenennen

Werkzeug: convert aus imagemagick

Das Umbenennen geht aber mit dem Double Commander einfacher.

$> find -name "*.png" -exec convert {} {}.jpg \;
$> rm *.png
$> rename s/.png// *.jpg

Rotieren

Wenn man von Hand ein oder mehrere Bilder rotieren möchte, geht das über Nautilus mit installiertem Bilder-Bearbeitungs-Plugin ganz einfach.

Von der Kommandozeile ist jhead eine gute Wahl. Man kann ein oder mehrere Bilder rotieren, im Zusammenspiel mit find auch in mehreren Unterverzeichnissen. jhead dreht dabei nur Bilder, die der Drehung bedürfen, dreht in die richtige Richtung und setzt das Orientation-Flag zurück.

$> jhead -autorot <file>
$> jhead -autorot *.jpg
$> find -name "*.jpg" -exec jhead -autorot {} \;

Oder ein Bild nicht rotieren, sondern nur das Orientierungsflag zurücksetzen?

$> jhead -norot <file>
$> jhead -norot *.jpg
$> find -name "*.jpg" -exec jhead -norot {} \;

Dateiname in Bild einblenden

Werkzeug: convert aus imagemagick

Einbinden weißer Text "Testtext" unten rechts in Bild x.jpg, Ausgabe in x.stamped.jpg:

$> convert x.jpg -gravity southeast -font DejaVu-Sans-Mono-Bold -pointsize 24 -fill white -annotate 0 "Testtext" x.stamped.jpg

Zur besseren Lesbarkeit mit schwarzem Schatten hinterlegen

$> convert x.jpg -gravity southeast -font DejaVu-Sans-Mono-Bold -pointsize 24 -fill black -annotate 0 "Testtext" -fill white -annotate +3+3 "Testtext" x.stamped.jpg

Das Ganze in ein Script verpackt Download fotoname:

#!/bin/bash

# v1.0, 2011-07-31
# Ekkart Kleinod (http://www.ekkart.de/)
# GNU General Public License v.3 (GPL 3)
# http://www.gnu.org/licenses/gpl-3.0.html

# Dieses Skript druckt den Namen aller Bilder eines
# Verzeichnisses in die rechte untere Ecke des Bildes.
# Die Ursprungsbilder werden dabei ueberschrieben.
# Optional kann ein eigener Text statt des Dateinamens angegeben werden.

# This script prints the name of all image files in the
# directory into the southeast corner of the image.
# The original images are overwritten.
# Optionally an own text can be given instead of the filename.

# definitions
FONTNAME=DejaVu-Sans-Mono-Bold
FONTSIZE=36
TEXT='%t' # see http://www.imagemagick.org/script/escape.php

# optional parameter for output text (escape sequences allowed)
if [ -n "$1" ]
then
    TEXT=$1
fi

# execution
find -maxdepth 1 -name "*.jpg" -exec convert {} -gravity southeast -font $FONTNAME -pointsize $FONTSIZE -fill black -annotate 0 $TEXT -fill white -annotate +3+3 $TEXT {} \;

# EOF

Um den richtigen Font-Namen zu finden, einfach die Fonts ausgeben und gleich in eine Datei speichern, die man dann durchsucht:

$> convert -list font > fonts.txt

Größe ändern mit Rand

Größe eines Bild ändern und, wenn nötig, einen schwarzen Rand ins Bild nehmen, so dass alle Bilder die gleiche Größe haben.

$> convert -define jpeg:size=1920x1080 <filename> -thumbnail "1920x1080>" -background black -gravity center -extent 1920x1080 <filename>

in einem bash-Script

#!/bin/bash

SIZE=1920x1080

for file in *.jpg
do
    convert -define jpeg:size=$SIZE $file -thumbnail "$SIZE>" -background black -gravity center -extent $SIZE $file
done

in einer Zeile

$> SIZE=1920x1080; for file in *.jpg; do convert -define jpeg:size=$SIZE $file -thumbnail "$SIZE>" -background black -gravity center -extent $SIZE $file; done