Manchmal braucht man Dateien in anderen Formaten. Und dafür gibts ein paar mächtige Tools, die einem dabei helfen, von allen möglichen Formaten in alle möglichen Formate umzuwandeln. Auf ein paar solcher Tools, die man immer mal wieder benutzt, will ich hier eingehen.
Es gibt dafür auch ganz viele Webseiten, wo man irgendwas hochladen könnte, aber so etwas will ich explizit vermeiden. Meine Daten sollen schon noch bei mir bleiben. Alle Tools, die ich anspreche, sind Command-Line-Tools welche in den gängigen Linux Distributionen und unter macOS mittels Homebrew verfügbar sind. Wenn man beispielsweise 20 Dateien konvertieren will, baut man sich ein kleines Script mit den passenden Argumenten für den aktuellen Anwendungsfall und es läuft.
Bilder mit ImageMagick
ImageMagick wird an den meisten vielleicht schon mal als convert
vorbeigekommen sein.
jpg
nach png
konvertieren ist dabei quasi noch der fast langweiligste Anwendungsfall den ImageMagick kann:
convert input.jpg output.png
Man kann (mit aktuellen Versionen) auch ausgefallenere Formate, wie das relativ neue Foto Format heic
in das ebenfalls recht neue Format webp
umwandeln:
convert input.heic output.png
In diesem Blogpost geht es zwar nur um das Umwandeln zwischen unterschiedlichen Formaten, aber ich will auch kurz auf weitere Features von ImageMagick eingehen, welche ich noch gern benutze.
So kann man beispielsweise die Größe eines Bildes verkleinern, damit man auf seiner Webseite nicht die volle Kamera Bildgröße hochladen muss (-resize '2000x1000>'
).
Auch kann man die Metadaten wie der Ort des Bildes mal eben entfernen (-strip
).
Die Argumente lassen sich natürlich kombinieren.
Das Zuschneiden oder Strecken, Wasserzeichen und noch viele weitere Dinge sind ebenfalls möglich.
Im Grunde kann convert
vieles was ein Tool wie Gimp auch kann, nur eben automatisierbar auf der Command-Line.
Das Skript, welches ich aktuell für meine Fotos auf der Webseite verwende, sieht so aus:
convert input.jpg \
-background black -alpha remove \
-sampling-factor 4:2:0 \
-strip \
-resize '2000x1000>' \
-quality 85 \
output.jpg
Bewegtbild und Ton mit FFmpeg
FFmpeg wandelt viele Medien um. So kann man beispielsweise den Ton aus einem Video ziehen oder von einem Format in das andere umwandeln. Ich habe darüber auch schon mal in einem eigenen Post berichtet.
# Video
ffmpeg -v error -stats -i input.mp4 output.webm
ffmpeg -v error -stats -i input.avi output.mp4
# Video to Audio
ffmpeg -v error -stats -i input.mp4 output.mp3
# Audio
ffmpeg -v error -stats -i input.wav output.mp3
ffmpeg -v error -stats -i input.ogg output.mp3
Man kann auch zum Beispiel den Ton aus einem Video entfernen, um ein quasi gif
zu erzeugen.
Das Argument -an
steht dafür für “Audio none”.
ffmpeg -v error -stats -an -i input.mp4 output.mp4
Zuschneiden oder Ausschneiden von Abschnitten aus einer Datei sind ebenfalls mit FFmpeg möglich.
Textdokumente mit Pandoc
Das Erste, was mir bei Pandoc einfällt, ist das Diagramm auf deren Webseite, welches man sieht, sobald man ein wenig herunter scrollt. Viele Formate in viele Formate.
LaTeX zu PDF oder Markdown zu HTML sind die langweiligsten Umwandlungen, die Pandoc kann.
docx
zu Markdown, Markdown zu EPUB, EPUB zu HTML, HTML zu Open Document Text Format (odt
), odt
zu DokuWiki, DokuWiki zu MediaWiki, MediaWiki zu LaTeX, …
Was man halt gerade so braucht.
pandoc -o output.html input.docx
SVG zu PNG oder PDF mit Inkscape
Vielleicht nicht mehr ganz so relevant, aber dennoch immer mal benötigt. Ich arbeite ganz gern mit SVG, wenn es möglich ist. Einfach, weil es kleinere Dateien und bessere Ergebnisse auf allen Auflösungen erzielt. Manchmal braucht man jedoch altmodische Pixelgrafiken und LaTeX kann von Haus aus leider auch kein SVG. Hier kommt Inkscape zu Hilfe, welches alle möglichen SVG Eigenheiten kennt und damit klarkommt.
inkscape input.svg -o output.png
inkscape input.svg -o output.pdf
Und jetzt komme ich
Nachdem ich immer mal so etwas brauche wie “diese Bilder als jpg” und nicht immer eine kleine Bash Schleife bauen wollte, habe ich mir kleine Commands gebaut.
Diese waren jedoch nicht allzu gut konfigurierbar.
Daher habe ich mal irgendwann, ich wollte ja ein wenig mehr Rust lernen, eine kleine Rust binary geschrieben, die dies für mich abstrahiert.
Ich kann einfach edc jpg --<tab>
eingeben und dann aus den Möglichkeiten auswählen, die ich gerade jetzt brauche.
Resize oder Strip beispielsweise.
Und dann eben die Inputs.
Die Outputs werden dann automatisch im neuen Unterorder converted
erzeugt, welches Überschreibungen verhindert.
Natürlich fehlen dort immer Dinge. Gerade wenn ich so diesen Blogpost schreibe, fällt dies besonders auf. Aber das war ja auch der Zweck: Immer mal ein Grund etwas mit Rust zu machen.
Fazit
Vermutlich fehlen in dieser Liste noch ein paar coole Tools, um Dinge zu konvertieren. Vielleicht fällt dir ja eines ein, dann bin ich neugierig, was bisher an mir vorbeigegangen ist und nehme diese gern hier mit auf!