Übersetzungsskript

Ich habe gestern ein großartiges Übersetzungsskript gebastelt. Auf einen Tastatur-Shortcut gelegt, übersetzt es mir gerade markierte Worte, wenn ich den Shortcut drücke. Hier die Version von Englisch nach Deutsch:

#!/bin/bash
zenity --info --no-markup --text="$(dict -d eng-deu $(xsel))"

Voraussetzungen für das Skript sind (in Ubuntu) die Pakete zentiy, dict und xsel. Man kann sie natürlich durch andere ersetzen. Dazu muss man dann halt den Befehl entsprechend anpassen.

Ich würde mich sehr über Verbesserungsvorschläge oder Ideen für weitere Einsatzgebiete in den Kommentaren freuen.

edit: Ich habe grade noch eine weniger aufdringliche Version gebastelt. Diese basiert statt auf zenity auf libnotify-bin und einem laufenden Notify-System (welches in allen größeren Desktopumgebungen eingebaut ist):

#!/bin/bash
notify-send "$(xsel)" "$(dict -f -d eng-deu $(xsel) | grep '  ')"

Selfsigned Zertifikate in Chromium

Möchte man in Chromium selbst signierte Zertifikate akzeptieren, muss man sich zunächst einmal das Zertifikat besorgen. Dazu geht man auf die entsprechende Webseite, klickt auf das Schloss-Symbol neben dem roten, durchgestrichenen https und da auf Zertifikatinformationen. In dem Fenster kann man das Zertifikat dann im Reiter Details in eine Datei exportieren.

Da Chromium von sich aus keine Möglichkeit mitbringt, das Zertifikat nun auch zu akzeptieren muss man da von Hand ran. Unter Linux geht das absurderweise mit einem Tool von Firefox.

Das heißt certutil und gibt es bei Ubuntu im Paket libnss3-tools. Also erst mit:

aptitude install libnss3-tools

das Paket installieren und dann das Zertifikat, dass man nach DATEINAME exportiert hat mit

certutil -d sql:$HOME/.pki/nssdb -A -t "C,," -n ZERTIFIKATSNAME -i DATEINAME

zur Datenbank hinzufügen. Jetzt sollte das Zertifikat akzeptiert werden und die lästige Warnung verschwinden.

Gefunden habe ich den Befehl auf http://code.google.com/p/chromium/wiki/LinuxCertManagement

sudo & Pipes

Wenn man einen Befehl mit sudo durch eine Pipe leiten möchte, wie z.B.:

sudo echo "xscreensaver-command -lock" > usr/lib/kde4/libexec/kscreenlocker

besteht das Problem, dass nur der Teil vor dem > mit root-Rechten ausgeführt wird und nicht der ganze Befehl.
Nach kurzem Googlen habe ich auf dieser Seite folgende Lösung gefunden:
Statt sudo BEFEHL  gibt man sudo bash -c 'BEFEHL' ein. Das führt dazu, dass sudo eine Bash mit root-Rechten ausführt, die dann den eigentlichen Befehl ausführt.
Also für mein Beispiel:

sudo bash -c 'echo "xscreensaver-command -lock" > /usr/lib/kde4/libexec/kscreenlocker'

(Dieser Befehl sorgt übrigens dafür, dass man in KDE seinen Bildschirm mit xscreensaver statt mit kscreensaver sperren kann.)

Videodateien zusammenführen

Oft hat man mehrere Videodateien, die eigentlich zusammengehören oder auch verschiedene Spuren eines Videos (z.B. seperate Untertiteldateien), die man gerne zusammenführen möchte.

Dazu gibt es verschiedene Tools. Je nachdem, welches Containerformat man gerne hätte, kann man zwischen avimergemkvmerge aus MKVToolnix oder MP4Box aus dem Projekt GPAC wählen.


avimerge
kann nur Videodateien aneinanderhängen oder Audiodateien als neue Tonspur zu einem bestehenden Video hinzufügen.

Der Befehl

avimerge -o big.avi -i my_file1.avi my_file2.avi

vereint die beiden Dateien my_file1.avi und my_file2.avi zu einer großen big.avi.

mkvmerge ist da schon mächtiger. Das liegt zu einem großen Teil sicher auch daran, dass der moderne Matroska (MKV) Container wesentlich mehr kann, als der alte AVI Container. Man kann Videos zusammenführen, Tonspuren hinzufügen, Untertitel hinzufügen, beliebige Attribute ändern und sogar mehrere Videospuren in eine Datei packen.

Dank der schönen GUI namens mmg ist das auch für Anfänger ziemlich einfach.

MP4Box hat einen ähnlichen Umfang wie mkvmerge. Es erzeugt nur MP4 statt Matroska. Allerdings hat es leider keine GUI.

Der Befehl

MP4Box -cat video1.avi -cat video2.avi -new big.mp4

führt video1.avi und video2.avi zu einer großen Datei big.mp4 zusammen.

Und zum Schluß noch ein Tip für Menschen, die unbedingt mpeg1 oder mpeg2 Containern brauchen: mpeg-Dateien kann man mit mencoder zusammenführen:

mencoder -ovc copy -oac copy -of mpeg Datei1.mpeg Datei2.mpeg -o Datei1und2.mpeg

Fotos bearbeiten mit Imagemagick

Wenn man Bilder mit Imagemagick bearbeiten will, wird einem meist das Programm convert empfohlen.
Allerdings hat dieses Programm den Nachteil, dass es den Bildern neue Namen gibt. Will man die Namen der Bilder behalten, so legt man eine Sicherungskopie der Bilder an und benutzt mogrify.

Um alle Bilder im aktuellen Ordner auf eine Bildgröße von 1024×768 zu resizen benutzt man dann beispielsweise folgenden Befehl (der das Bild auch gleich noch automatisch nach den EXIF-Daten dreht):

mogrify -auto-orient -resize 1024×768 *

Damit gab es allerdings noch ein kleines Problem für mich: Ich wollte gerne, dass die Änderungszeit im Dateisystem (atime aka „Letzte Änderung“) der Erstellungszeit der Bilder entspricht.
Für genau dieses Problem bietet das kleine Programm exiv2 die richtige Lösung:

exiv2 -T mv *

Dieser Befehl überschreibt die atime aller Dateien im aktuellen Ordner mit ihrem EXIF-Datum.

CDs rippen in Ubuntu

Ich habe neulich versucht, ein Programm zu finden, mit dem ich in Ubuntu* bequem CDs ins AAC/M4A Format rippen kann. Das hat sich als problematischer herausgestellt, als man zunächst vermuten könnte.

Während es relativ einfach ist, MP3s oder OGGs zu erstellen, bieten viele Programme erst gar keinen AAC Support.

Mit Grip hat das immer prima geklappt, aber das wird seit Jahren nicht mehr weiterentwickelt und ist auch nicht mehr in den offiziellen Paketquellen zu finden.

Hier mal ein kleiner Überblick über einige der Programme, die ich ausprobiert habe und was sie falsch machen:

  • abcde: Keine GUI.
  • asunder: Benötigt das propietäre neroAAC und schreibt keine Tags.
  • goobox: Kein AAC.
  • Sound Juicer: Wie alle Gstreamer-Ripper: kein Artist-Tag.
  • Rhythmbox: s. Sound Juicer.
  • xcfa: Leerzeichen werden in Dateinamen durch Unterstriche ersetzt. Kann man nicht abschalten.
  • ripperX: Kein AAC.
  • Audex: Versucht faac scheinbar mit falschem Parameter zu benutzen. Bricht mit nichtssagender Fehlermeldung ab.
  • K3b: Kein AAC.
  • Soundkonverter: Keine Tags.
  • audiocd:// in KDE: Kein AAC.

(Näheres zu den Programmen gibt es im Ubuntuusers Wiki.)

Ich habe mich schließlich für das in meinen Augen kleinste Übel entschieden und benutze jetzt abcde in der Kommandozeile. Und ich muss sagen, er ist wirklich was er verspricht: A Better CD Encoder. Wenn man die Config erstmal hat, klappt alles wie am Schnürchen. Eigentlich ist er sehr ähnlich zu Grip. Nur halt ohne GUI.

Meine ~/.abcde.conf ist:

OUTPUTTYPE="m4a"
OUTPUTDIR="$HOME/Musik/neu/"
OUTPUTFORMAT='${ARTISTFILE}/${ALBUMFILE}/${TRACKNUM} ${TRACKFILE}'
VAOUTPUTFORMAT='${ALBUMFILE}/${TRACKNUM} ${ARTISTFILE} ${TRACKFILE}'
ATOMICPARSLEY=AtomicParsley
# The default actions that abcde will take.
ACTIONS=cddb,read,encode,move,clean
# Track padding: force abcde to pad tracks using 0, so every song uses a two
# digit entry. If set to "y", even a single song encoding outputs a file like
# 01.my_song.ext
PADTRACKS=y
XPROCS=4 # Run a few encoders simultaneously
EXTRAVERBOSE=y   # Useful for debugging
# Custom filename munging:
# By default, abcde will do the following to CDDB data to get a useful
# filename:
# * Translate colons to a space and a dash for Windows compatibility
# * Eat control characters, single quotes, and question marks
# * Translate spaces and forward slashes to underscores
# To change that, redefine the mungefilename function.
# mungefilename recieves the CDDB data (artist, track, title, whatever)
# as $1 and outputs it on stdout.
mungefilename ()
{
echo "$@" | sed s,:,-,g | tr / _ | tr -d \'\"\?\[:cntrl:\]
}

Jetzt muss ich nur noch die CD ins Laufwerk legen und abcde eingeben und kurze Zeit später habe ich richtig benannte und getagte .m4a Dateien.

Ich hoffe, ich erspare mit diesem Artikel jemandem die selbe Suche.

*Wenn ich Ubuntu schreibe meine ich auch Kubuntu und Xubuntu… halt alle Distributionen, die die selben Paketquellen verwenden.