Archiv nach Kategorien: Programme

Thema der GnomeShell ändern

Mit der “user theme” Erweiterung für die GnomeShell lassen sich Themen sehr einfach wechseln. Prinzipiell muss dafür nur mit “dconf” der Schlüssel “/org/gnome/shell/extensions/user-theme/name” geändert werden. Damit die Erweiterung die Themen auch findet, müssen diese zuvor im Ordner “~/.themes” abgelegt worden sein.

Um nun das Thema zu ändern, genügt es, folgenden Befehl in der Konsole abzusetzen:

dconf write /org/gnome/shell/extensions/user-theme/name "'DarkGlass'"

Ebenso könnte mit dem Werkzeug “dconf-editor” der entsprechende Schlüssel angepasst werden.

Weil dieses Vorgehen doch eher umständlich ist, gibt es die Erweiterung “themeselector“, die die Möglichkeit, das Thema zu ändern, direkt in die GnomeShell integriert.

Leider scheint diese Erweiterung noch nicht mit der aktuellen Version der GnomeShell lauffähig zu sein und da es nicht mit einer einfachen Anpassung der Versionsnummer in der Datei “metadata.json” getan war, habe ich ein kleines Python-Skript geschrieben, das ebenfalls in der Lage ist, die GnomeShell-Themen auf die Schnelle zu ändern.

Das Skript findet sich hier auf GitHub und sollte mit Python2 und Python3 lauffähig sein. Voraussetzung ist natürlich die Installation der oben erwähnten und verlinkten Erweiterung “user theme”. Außerdem müssen die Bibliotheken für die Anbindung von Python an die GObject-Introspektion installiert sein, unter Ubuntu oder Arch sind diese beispielsweise im Paket “python-gobject” bzw. “python-gobject2″ zu finden.

Wer schnell mal ein paar Shell-Themen ausprobieren möchte, kann ja einen Blick darauf werden.

//edit: Wie Christoph in den Kommentaren erwähnt, steht diese Funktion auch über das “gnome-tweak-tool” zur Verfügung; da das die meisten Shell-Nutzer wohl installiert haben dürften, besteht natürlich kaum Bedarf für ein zusätzliches Skript :).

freiesMagazin – Python Sonderausgabe

Das freieMagazin hat eine Python-Sonderausgabe veröffentlicht, in der die bisher erschienenen 6 Teile meiner Python-Einführung, die ich nun seit etwa einem halben Jahr für das freieMagazin schreibe, zusammengefasst wurden.

Wer die Reihe noch nicht kennt, kann mit der Sonderausgabe ja mal einen Einstieg wagen. Und auch so ist diese Zusammenstellung vielleicht nochmal eine ganz nette Übersicht für Anfänger.

Ganz lieben Dank an dieser Stelle übrigens an Christian Hausknecht, der mir seit dem zweiten Teil der Reihe als geduldiger und kompetenter Korrektor zur Seite steht!

pyInputStats – Statistiken für Eingabegeräte

Funktastaturen und -mäuse sind in Sachen Energiehunger heute sicher nicht mehr mit den ersten Exemplaren ihrer Gattung zu vergleichen. Dennoch frage ich mich bei jedem Batteriewechsel, ob “die paar” Tastendrücke und Mausschubser tatsächlich den Batteriehunger meiner handbetätigten Eingabegeräte rechtfertigen.

Wie viele Tastendrücke, Mausklicks und Mausbewegungen so eine Batterie aushält, wäre doch eigentlich interessant zu wissen. Und überhaupt – was setze ich über meine Tastatur täglich so ans System ab?

Zur Beantwortung solcher Fragen gibt es zahlreiche Tools, teilweise sogar für Linux-Systeme. Das Programm “WhatPulse” beispielsweise ist “sogar” Freeware – aber eben auch “nur” Freeware. Als Möchtegern-Entwickler juckt es mich da direkt in den Fingern, mir das gute, alte xlib nochmal anzusehen – da müsste doch was zu machen sein….?

Herausgekommen ist das kleine Programm “pyInputStats”. Es klinkt sich mit der Record Extension (PDF) in die Tastatur- und Mausereignisse ein und kann so Statistiken über Mausklicks, gedrückte Tasten und Cursorbewegungen erstellen. Die Daten werden dabei so einer SQLite-Datenbank abgelegt, dass keine Rückschlüsse auf konkrete Texteingaben möglich sind. Im Normalbetrieb läuft das Programm weitestgehend unsichtbar und legt lediglich ein Icon im Systray ab. Erst nach einem Klick auf das kleine Lineal kommen die Grafiken zum Vorschein.

Was lässt sich mit dem Programm ablesen?

pyInputStats kann die gesammelten Daten auf unterschiedliche Weise darstellen:

  • Gesamtzahl aller Tastenanschläge und Mausklicks. Zurückgelegte Cursor-Meter.
  • Durchschnittliche Cursor-Meter, Tastenanschläge und Mausklicks.
  • Tages-Übersicht: Darstellung dieser Daten für einen bestimmten Tag – mit grafischer Darstellung des Tagesverlaufs.
  • Monats-Übersicht: Grafische Darstellung der Daten über einen gegebenen Monat.
  • Tasten-Statistik: Wie oft wurde welche Taste gedrückt?

Probleme und Anmerkungen

Das Skript ist dahingehend recht effizient, als dass es nicht ständig nach neuen Tasten- und Mausinformationen pollt, sondern sich direkt von der xlib über derartige Ereignisse benachrichtigen lässt. Das ändert natürlich nichts an der Tatsache, dass durch das Skript bei jedem Tastendruck und jeder Mausbewegung verschiedene Zähler hochgezählt werden müssen. In der Praxis macht sich dies jedoch nicht bemerkbar – zusätzlicher und eigentlich unnötiger Ballast ist es natürlich dennoch.

Auch sei darauf hingewiesen, dass sich mit dem Programm keine Texteingaben nachvollziehen lassen – es eignet sich also nicht als Keylogger. Allerdings wird schon protokolliert, in welchem Zeitabschnitt wie oft geklickt wurde, wie weit die Maus bewegt wurde und wie viele Tastenanschläge gemacht wurden. Wie in dem oben verlinkten Bild zu sehen, lässt sich aus diesen Daten durchaus ablesen, wann der PC wie intensiv genutzt wurde – eine durchaus sensible Information.

Die grafische Darstellung der Daten ist noch nicht ganz ausgereift. Gerade bei der ersten Nutzung werden vermutlich negative Werte etc. angezeigt. Bereits nach wenigen Minuten sollten die Grafen aber vernünftige Werte anzeigen.

Schließlich und letztlich bietet das Programm die Möglichkeit an, einen Autostart-Eintrag für den derzeitigen Nutzer anzulegen, so dass das Programm bei jeder Anmeldung gestartet wird. Diese Funktion ist derzeit noch etwas fehleranfällig, weswegen im Zweifelsfall händisch ein Autostart-Eintrag angelegt werden sollte.

Abhängigkeiten

Benötigt werden unter anderem die Pakete:

  • python-xlib
  • python-pysqlite2

sowie gegebenenfalls:

  • python-setuptools

Installation

Wie immer findet sich das Projekt bei Launchpad. Ein beherztes bzr branch lp:pyinputstats befördert Quellen auf das lokale System, wenn Bazaar installiert ist. Ansonsten kann das Paket natürlich auch ganz normal heruntergeladen werden.

Eine Installation ist grundsätzlich nicht notwendig – das Skript kann aus dem Skript-Verzeichnis mit python pyinputstats gestartet werden. Wer das Skript dennoch im System verankern möchte, kann einfach den Befehl python setup.py install mit Root-Rechten ausführen.

Probleme und Fehler bitte ich im Launchpad-Bugtracker oder hier in den Kommentaren zu notieren. Dafür schonmal vielen Dank! Und jetzt heißt es: Wer schafft die meisten Tastenanschläge am Tag? Mein erstes Gebot lautet 36.676.

I wanna watch this!

Wer sich auf Youtube, Google Video oder sonstwo im Netz gerne von Flash-Videos berieseln lässt, kennt das Problem: Nach x Minuten bequemt sich der Monitor in den Energiesparmodus und erst panisches Rütteln an der Maus überzeugt das System davon, dass der Nutzer noch am PC ausharrt – der Monitor wird wieder geweckt.

Ich habe deshalb schon einige Abende damit verbracht, im 5-Minuten-Intervall mein Mausrad zu rollen, weil die Maus von der Couch aus noch erreichbar war und ich keine Lust hatte im Energiespar-Menü das Abschalten des Bildschirms im Leerlauf zu deaktivieren :). Faulheit ist nicht immer ökonomisch!

Das dauerhafte Deaktivieren dieser Option ist für mich aber auch keine Alternative – ich habe keine Lust mir jedes Mal, wenn ich den PC verlasse, zu überlegen, ob es sich lohnt den Bildschirm auszuschalten oder nicht.

Das Ärgerliche bei der ganzen Sache: Totem und andere Videoplayer geben dem System einfach Bescheid: Hey, es sieht zwar aus, als sei der Nutzer untätig, aber eigentlich schaut er ein Video. Lass das mal mit dem Bildschirmschoner/Energiesparmodus. Flash bietet diesen Luxus nicht. Verschiedene Ansätze wurden daher bereits diskutiert und ich dachte, ich füge einfach mal einen weiteren hinzu:

I wanne watch this (iwwt)

IWWT ist ein kleines Python-Skript, das in festen Intervallen die Fenstertitel der Fenster auf dem Desktop auf das Vorhandensein bestimmter Zeichenketten überprüft. Findet sich also “youtube”, “google video” oder ähnliches in einem Fenstertitel, deaktiviert das Tool den Bildschirmschoner und sorgt dafür, dass der Mauszeiger nach 1 Sekunde unsichtbar wird.

Natürlich räumt das Skript hinterher auch auf: Findet sich kein entsprechender Fenstertitel mehr, wird für Bildschirmschoner und Maus wieder das Standardverhalten aktiviert.

Als kleine Erweiterung kennt das Skript noch den Schalter “-a”, mit dem nur aktive Fenster der Prüfung unterzogen werden.

Abhängigkeiten

Benötigt werden folgende Pakete:

  • python-wnck
  • unclutter

Ersteres stellt für Python eine Schnittstelle zum Fenstermanager bereit, das zweite Paket versteckt den Mauszeiger bei Untätigkeit.

Einstellungen

Das Skript kann verhältnismäßig leicht angepasst werden: In Zeile 23 ff. können die verschiedenen Fenstertitel (bzw. Bestandteile davon) eingetragen werden, bei denen der Bildschirmschoner deaktiviert werden soll. In Zeile 35 wird festgelegt, wie viele Sekunden das Skript zwischen zwei Überprüfungen warten soll, in Zeile 38 und 39 lassen sich die vom Skript aufgerufenen Programme konfigurieren.

Ecken und Kanten

Auch diese Lösung ist nicht perfekt. Sie funktioniert ausschließlich mit GNOME. Außerdem muss der Benutzer alle von ihm genutzten Video-Seiten vorher definieren.

Das 30-sekündige Pollen aller Fenstertitel ist weiterhin nicht unbedingt eine schöne Lösung. Der Timeout kann grundsätzlich aber auf x-1 Sekunden eingestellt werden (wobei x die Leerlaufzeit des Monitors bzw. Bildschirmschoners ist).

Damit man das Skript nicht jedes Mal, wenn man ein Video schauen möchte, von Hand aufrufen muss (das wäre wohl kaum eine Arbeitserleichterung), empfiehlt es sich mMn, das Skript bei der Anmeldung direkt ausführen zu lassen (System->Einstellungen->Startprogramme).

Download

iwwt.py.tar

lsR SID: SID Musik für den Ubuntu-Desktop

Wer auf 8-Bit-Musik steht oder einfach nur manchmal nostalgisch an seinen C64 zurück denkt, wird sicher schon auf die verschiedenen Möglichkeiten gestoßen sein, SID-Musik auch heute noch zu hören: Abgesehen von verschiedenen Youtube-Videos (siehe oben) gibt es etwa MP3-Aufnahmen von bekannten SID-Stücken und sogar aufgepeppte Remixes im Netz zu finden.

Natürlich ist nicht immer der Umweg über MP3 & Co nötig: Die kleinen .sid-Files sind meist nur wenige Byte groß und lassen sich mit einem geeigneten Programm direkt auf dem heimischen PC emulieren. Da der SID-Soundchip des C64 halb-analog aufgebaut ist, sind die emulierten SID-Töne zwar nie 100% originalgetreu – dem großen Minimal-Electro-Hörgenuss steht aber nichts entgegen.

Unter Ubuntu stehen die beiden Konsolenprogramme sidplay und sidplay2 zu diesem Zweck bereit, etwas grafischer wird es mit xsidplay. Das Browser-Plugin sidplug ist auch noch immer verfügbar, lässt sich unter Ubuntu aber nur noch durch etwas Handarbeit zum Laufen bringen.

Die bekannte High Voltage SID Collection bietet ein großes Archiv, das SID-Töne bekannter C64-Spiele enthält. Auch bekannte Bands wie Welle:Erdball und viele andere Größen der SID-Szene scheinen das Archiv zu unterstützten, so dass auch immer wieder neue Stücke hinzu kommen.

Da die HVSC auf der Festplatte erstmal recht umfassend daher kommt, habe ich vor einiger Zeit mein Projekt lsR SID ins Leben gerufen. Dabei handelt es sich zunächst um einen simplen Browser für die HVSC, der die Dateien aber zugleich auch abspielen und bewerten kann. Mit lsR SID kann man sich durch die großen SID-Massen kämpfen, seine Lieblingsstücke bewerten und in Wiedergabelisten speichern.

Die Funktionen im Einzelnen:

  • Sortierung der SIDs nach Verzeichnis
  • Sortierung der SIDs nach Interpret
  • Suche
  • Bewertungen
  • Abspielstatistiken
  • Wiedergabelisten (.spf) können gelesen und gespeichert werden
  • Unterstützung der Songlength-Database
  • Vorspulen (kind of)

lsR SID ist natürlich alles andere als fertig, ermöglicht es aber bereits, sich einen Überblick über die HVSC zu verschaffen und die gute alte 8-Bit-Musik zu genießen.

Abhängigkeiten zur Zeit sind:

  • sidplay
  • alsa-oss
  • python-configobj
  • pulseaudio-utils
  • und natürlich eine Kopie des HVSC Archives (entpackt)

Eine Kopie des Programms könnt ihr mit dem Befehl “bzr branch lp:lsr.sid” erstellen oder auf der Projektseite herunterladen. Gestartet wird das Programm mit dem Befehl “python lsrsid” oder “./lsrsid” aus dem Programmverzeichnis.

StarScale2 – Ein Bewertungs-Widget für PyGTK

Auch wenn GTK eigentlich keine Wünsche offen lässt und man Bewertungen sicher auch mit anderen Widgets realisieren kann: Bewertungen mit Sternen sind mittlerweile sehr weit verbreitet und für die Benutzer sehr intuitiv zu bedienen.

Bisher habe ich für Python nur das Widget StarHScale von Markus Mruss entdeckt, das aber in der auf dem Blog beschriebenen Variante einige kleinere Probleme hat.

Ich habe auf Basis von StarHScale nun StarScale2 erstellt – ein kleines Bewertungswidget für PyGTK. Folgende Features habe ich neu implementiert:

  • Drei verschiedene Darstellungsarten (Normal, Überlappend, halbe Sterne)
  • Automatische Anpassung an die Größe des Containers.
  • Auf Wunsch auch statische Größe.
  • Nicht-selektierte Sterne werden in Graustufen dargestellt.
  • Einfache Anpassungsmöglichkeiten der Grafiken.
  • Signal (“rating-changed” und “rating-changing”)

Das Ganze wurde noch nicht großartig getestet und hat sicher noch Ecken und Kanten. Verbesserungsvorschläge und Patches sind (wie immer) willkommen.

starscale2.tar.gz

DVDs kopieren

In den letzten Tagen habe ich verschieden DVD-Ripping-Tools getestet. Die einfache Aufgabe: DVD mit Filmen aber auch Serien bequem, einfach und schnell mit möglichst hoher Qualität auf die Festplatte befördern.

Die Kandidaten: dvd::rip, AcidRip, ogmrip, HandBrake, k9copy und LemonRip.

dvd::rip
dvd::rip eignet sich sehr gut zum Rippen und Kodieren von DVDs und erinnert mich am ehesten an GordianKnot. Es gibt sehr viele Einstellungsmöglichkeiten, die eigentlich jedem Wunsch gerecht werden. Beim Versuch einen größeren Film in drei Teile zu splitten hatte ich aber das Problem, dass Video und Ton asynchron waren (aus welchem Grund auch immer). Zudem fand ich gerade das Rippen von mehreren Titeln recht unkomfortabel. Sehr positiv: Es ist möglich, das Rippen eines Films auf mehrere Rechner zu verteilen – sogenannte Cluster. Auch finde ich das Programm erstaunlich übersichtlich dafür, dass es dem Nutzer so viele Möglichkeiten bietet.

ogmrip
ogmrip ist in erster Linie ein DVD-Ripper, der Das Rippen einfach machen soll – was m.E. auch gut gelingt. Sehr schön ist die Möglichkeit, verschiedene Profile anzulegen: So kann man mit einem Klick auswählen, ob man den Film für seine Telefon, für den PC oder für seinen DVD-Player kodieren möchte. Dummerweise war ich just in diesem Fall in der unglücklichen Situation, einen Film in Graustufen kodieren zu wollen – keine Ahnung, ob das einen großen Unterschied macht – mit ogmrip war der entsprechende Schalter nicht zugänglich (getestet mit XViD). Viel schlimmer war allerdings die Tatsache, dass ogmrip beim Rippen mehrfach abgestürzt ist und “Segmentation Faults” ausgespuckt hat. Weiterhin hat sich das Programm beim Zuschneiden mehrfach aufgehängt. Positiv dahingegen fand ich die Möglichkeit, mehrere Titel einer DVD in den Queue zu schieben und dann in einem Rutsch abarbeiten zu lassen.

AcidRip
AcidRip ist ein weiteres Frontend für den mencoder. Im Gegensatz zu ogmrip wird hier der mencoder aber nicht so sehr vor dem Benutzer versteckt: Einige wichtige Optionen (wie Audio, Untertitel, Codec, Bitrate, Crop und Scale) sind über Schalter zugänglich, weitergehende Funktionen müssen als mencoder-Parameter in Textboxen eingetragen werden. AcridRip ist insgesamt leicht zu bedienen, bietet aber nur die Möglichkeit, jeweils eine Audio- und Untertitelspur zu setzen.
AcidRip wird häufig als Ripper für Einsteiger bezeichnet, ich sehe darin aber eher ein mencoder-Frontend, das den mencoder nicht so weit “wegabstrahiert”, wie etwa ogmrip. Für ein Einsteigerprogramm wirkt AcidRip dann auch reichlich unübersichtlich und müsste anders strukturiert sein. Insgesamt aber eigentlich ein schönes Tool für Fortgeschrittene die eine GUI nutzen möchten, ohne sich von dieser in der Wahlfreiheit beschneiden zu lassen.

k9copy
Bei k9copy handelt es sich – der Name deutet es an – um ein KDE-Programm. Da ich für Gnome aber lediglich DVD95 als Alternative kenne und mit dieser in der Vergangenheit nicht sonderlich zufrieden war, habe ich mir stattdessen mal k9copy näher angesehen. k9copy (und DVD95) sind in erster Linie dazu da, große DVDs (DVD9) so zu verkleinern, dass sie auf einen handelsüblichen DVD Rohling passen (DVD5). Um das zu erreichen werden die Filme umkodiert, es lassen sich aber auch Tonspuren und Untertitelspuren streichen, weiterhin werden die Menüs etwas zusammengestaucht. Vorteil dieser Methode ist der Umstand, dass man ein komplettes Backup seiner DVD hat, ohne auf besondere Features (wie Kommentare des Regisseurs) verzichten zu müssen. Auch findet ja mancheiner Gefallen an aufwändig gestalteten Menüs und möchte diese nicht missen. Der Nachteil liegt auf der Hand: Durch das Umkodieren auf DVD5 nimmt die Qualität des Materials deutlich ab. Das Ausmaß der Qualitätseinbuße hängt aber in erster Linie davon ab, auf wie viele Tonspuren man verzichten kann und wie groß das Ausgangsmaterial ist. Nicht jede DVD9 ist prall gefüllt und eine sechs GB große DVD lässt sich durchaus ohne große Einbußen zusammenstauchen.

Sowohl DVD95 als auch k9copy bieten die Möglichkeit, die DVD nicht zu verkleinern, sondern zu rippen (weswegen die beiden Programme hier überhaupt Erwähnung finden). Während diese Möglichkeit bei DVD95 aber sehr rudimentär ist und sich kaum beeinflussen lässt, bietet k9copy ein breites Spektrum verschiedener Einstellungen. Es lassen sich viele verschiedene Codecs definieren, wobei jeweils die Parameter für ffmpeg oder mencoder von Hand eingegeben werden müssen. Es gibt allerdings auch Codec-Vorgaben, so dass die meisten Benutzer vom händischen Einstellen verschont bleiben. Zum Kodieren muss der Benutzer dann lediglich einen der Codecs auswählen und noch einige Details wie Dateigröße oder Bitrate auswählen und kann entscheiden, ob es zwei Durchläufe geben soll oder nicht. Auch das Cropping kann man sich dabei abnehmen lassen.

Hier fiel mir allerdings sehr negativ auf, dass man diese Einstellungen (Dateigröße, Video-Bitrate, Audio-Bitrate, Cropping) für jeden einzelnen Titel auf einer DVD wiederholen muss; ich habe keinen Schalter gefunden, mit dem sich diese Einstellung auf alle zu rippenden Titel anwenden ließ. Im Regelfall möchte man vermutlich nur einen einzigen Titel (etwa den Hauptfilm) auf die Festplatte bringen und wird sich daran nicht stören. Sobald man aber 6 Folgen einer Serie kopieren möchte, wird das schon sehr mühselig. So ist k9copy für KDE-Film-Liebhaber eine gute Wahl, Gnome-Serien-Fans werden sich aber oft darüber ärgern.

Lemonrip
Lemonrip ist ein beeindruckendes kleines Perl-Programm: Gerade einmal 1750 Zeilen wiegt es und kommt dafür mit einer praktischen GUI daher. Auch Lemonrip setzt auf mencoder auf und vereinfacht das Rippen von DVDs deutlich. Leider geht das in diesem Beispiel sehr zu Lasten der Konfigurierbarkeit: So konnte ich bei meinem Test lediglich zwischen 5 Profilen wählen, etwa “XVID 700MB” und “XVID 1100MB”. Weitere Einstellungen (Graustufen, Audio-Format und Audio-Bitrate, Anzahl der Durchläufe u.v.m.) ließen sich nicht über die GUI vornehmen. Zwar kann man weitere Profile direkt im Quellcode ergänzen und anscheinend auch in bestimmten Dateien eintragen – allerdings nur als komplette mencoder-Befehlszeile. Für Anfänger ist diese Möglichkeit also denkbar ungünstig. Auch gab es keine Möglichkeit, eine ISO-Datei oder DVD-Struktur auf der Festplatte als Quelle anzugeben. Angesichts der Tatsache, dass mencoder sowohl ISO-Dateien als auch DVD-Strukturen wie gewöhnliche DVDs einlesen kann, also eigentlich eine unnötige Beschränkung. Schließlich könnte die GUI auch an der einen oder anderen Stelle noch optimiert werden: So kann man zwar für jeden Titel einer DVD ein anderes Profil wählen – der Dialog dazu lässt sich aber nur über die Werkzeugleiste aufrufen, obwohl das jeweilige Profil in einer Liste neben dem Titel eingetragen ist. Hier wäre eine DropDown-Box sicher intuitiver. Auch die Auswahl der Sprache und des Untertitels könnte auf diese Weise deutlich vereinfacht werden.

Insgesamt stören an Lemonrip viele Einschränkungen und “Nicklichkeiten”. Vielleicht werden zukünftige Versionen in dieser Hinsicht Abhilfe schaffen. Sehr gefallen hat mir dahingegen die übersichtliche Darstellung des DVD-Inhaltes: Alle Titel werden in einer Liste dargestellt und lassen sich mit einem Hacken zum Rippen anwählen. Damit wäre Lemonrip gerade auch zum Rippen von Serien ideal und hatte im “Test” nach meinen Dafürhalten die intuitivste GUI.

HandBrake
Bei HandBrake sollte man die größte Einschränkung vorwegnehmen: Mittlerweile ist das Programm fast ausschließlich auf H.264 ausgelegt. Zwar gibt es noch die Möglichkeit, mit FFmpeg ein nicht näher spezifiziertes MPEG-4 zu erstellen, das ist aber anscheinend eher zu Testzwecken gedacht.
Wenn man diese Prämisse aber akzeptieren kann, erledigt HandBrake seine Aufgabe bestens:  Man kann zwischen verschiedenen Presets wählen und jeder Zeit neue anlegen. Als Quelle akzeptiert HandBrake DVDs, DVD-Verzeichnisstrukturen und ISO-Dateien gleichermaßen. Die einzelnen Titel einer DVD können sehr leicht mit unterschiedlichen Einstellungen gerippt werden, wobei jeweils auch mehrere unterschiedliche Audio- und Untertitelspuren gewählt werden können.

Sehr gut gefallen hat mir auch die “Picture Settings”-Funktion: In einem speziellen Fenster kann man nicht nur die automatische Beschneidung kontrollieren und anpassen oder ggf. eine Größenveränderung einrichten: Man kann auch sehr einfach einen beliebigen Zeitabschnitt von einer beliebigen Stelle des Videos “probekodieren”. Dabei finden alle gemachten Einstellungen (also etwa Video-Bitrate, B-Frames, u.v.m.) Berücksichtigung. So erhält man frühzeitig einen Eindruck davon, wie sich die Einstellungen auf das Endresultat auswirken.

Zum Rippen von Filmen ist HandBrake also geradezu ideal. H.264 ist ohnehin eine bessere Wahl als das etwas in die Jahre gekommene XViD – allerdings benötigt es (auch beim Abspielen) mehr Ressourcen und wird von vielen DVD-Playern noch nicht unterstützt.

Fazit:
Auch wenn ich den ein oder anderen Ripper mehr kritisiert habe: Insgesamt machen die Programme ihren Job durchaus ordentlich. Wer häufig Filme mit dem selben Encoder und den selben Einstellungen rippen möchte, wird sich sicher auch nicht daran stören, dass er bei AcidRip und Lemonrip einige Optionen einmalig von Hand eintippen muss. Ogmrip ist dabei in mancher Hinsicht ein guter Kompromiss zwischen Konfigurierbarkeit und Einsteigerfreundlichkeit, auch wenn ich hier und da einen Schalter vermisse. dvd:rip und HandBrake sind aber m.E. die Programme, die einem auf Wunsch die vielen Einstellungen am besten abnehmen, sie aber nicht völlig verstecken und somit auch Perfektionisten gefallen dürften.

configparser gone pythonic

Zum Lieferumfang von Python gehört ja auch der ConfigParser. Mit dieser Bibliothek lassen sich Konfigurationsdateien erstellen, lesen und bearbeiten, was gerade im Linux-Umfeld ja eine durchaus nützliche Sache ist (wenngleich natürlich nicht alle Konfigurationsdateien dem selben Standard gehorchen). Wer seinen Nutzern aber schnell und unkompliziert die Möglichkeit bieten möchte, bestimmte Verhaltensweisen seines Programms zu beeinflussen, bekommt mit dem ConfigParser ein nützliches Werkzeug dazu an die Hand.

Es geht aber noch besser, wie ich gerade festgestellt habe. Mit ConfigObj lassen sich noch einfacher und pythonischer Konfigurationsdateien bearbeiten. Dazu wird die jeweilige Konfig-Datei auf ein verschachteltes Dictionary abgebildet. Ein Aufruf könnte entsprechend so aussehen:

config[“Section1″] = {}
config[“Section1″][“OptionA”] = “Mein Wert”

Was mir daran besonders gefällt: Statt mit irgendwelchen config.has_section(“Section1″) oder section.has_option(“OptionA”) Aufrufen fragt man ganz bequem und python-intuitiv “Section1″ in config oder “OptionA” in section und erhält die gewünschte Antwort.
ConfigObj bietet darüber hinaus natürlich noch einige Möglichkeiten, wie etwa verschachtelte Sektionen. Was mich aber besonders zum Umstieg bewogen hat, ist der Umstand, dass ConfigObj die Kommentare in den Konfigurationsdateien belässt. ConfigParser hat dahingegen die lästige Angewohnheit, Kommentare beim Schreiben und Aktualisieren von Konfigurationsdateien zu entfernen. Eine Möglichkeit, dieses Verhalten zu ändern, habe ich bisher nicht aufgetan.

Wie auch immer: Dank der intuitiven Syntax lassen sich bestehende Programme leicht auf ConfigObj migrieren. Ich konnte zumindest mit wenigen Zeilen Code meine bestehende ConfigParser-Schnittstelle auf ConfigObj umbiegen.

ooaTV

So, den ersten Ansatz meines Python/GStreamer/GTK/V4L-TV-Tools habe ich jetzt bei Launchpad unter GPLv3 veröffentlicht. Auch wenn das Programm noch in den Kinderschuhen steckt, würde ich mich über Mithilfe und Hinweise freuen.

Besonders suche ich nach einer Möglichkeit, einen Videostream, den ich mit nachfolgender Pipe aufzeichne, gleichzeitig mit einem dritten Programm abzuspielen.

gst-launch-0.10 v4l2src device=/dev/video1 ! tee name=videoout ! queue ! videorate ! video/x-raw-yuv,width=640,height=480,fps=25         ! queue  ! xvidenc bitrate=300000 ! queue ! muxout.   osssrc device=/dev/dsp ! tee name=audioout ! queue ! audio/x-raw-int,rate=44100,channels=1,width=16 ! queue ! audioconvert ! lame ! muxout.  avimux name=muxout ! identity sync=TRUE ! filesink location=video.avi

Mir ist durchaus klar, dass ich eben das mit dieser Pipe umsetzen könnte:

gst-launch-0.10 v4l2src device=/dev/video1 ! tee name=videoout ! queue ! videorate ! video/x-raw-yuv,width=640,height=480,fps=25         ! queue  ! xvidenc bitrate=300000 ! queue ! muxout.   osssrc device=/dev/dsp ! tee name=audioout ! queue ! audio/x-raw-int,rate=44100,channels=1,width=16 ! queue ! audioconvert ! lame ! muxout.  avimux name=muxout ! identity sync=TRUE ! filesink location=video.avi videoout. ! queue ! ffmpegcolorspace ! xvimagesink audioout. ! queue ! fakesink

Darum geht es aber eben nicht: Ich möchte mit GStreamer ein Video speichern und dieses – während “hinten” sozusagen noch geschrieben wird – zeitversetzt wiedergeben. Dummerweise wird der Video-Stream anscheinend von GStreamer asynchron geschrieben und erst beim Beenden mit den nötigen Meta-Daten versehen. Hier gab es Hinweise auf das identity-Element mit aktivierter Sync-Option. Allerdings war das in meinem Fall nicht hilfreich.

Update:
Da es schon ein Projekt mit dem Namen pyTV gibt, habe ich mein Programm vorerst ooaTV getauft.

GStreamer-Videorekorder

Ich beschäftige mich gerade wieder etwas eingehender mit GStreamer (Eintrag dazu folgt noch). Dabei reizt mich vor allem die Idee, ein kleines TV-Programm (wie xdtv oder xawtv) mit GStreamer und Python zu implementieren.

Um mir keine unnötige Arbeit zu machen, habe ich mich erstmal umgesehen, ob es derartiges schon gibt – und tatsächlich: GStreamer selbst listet auf seiner Seite ein Programm namens “Cupid” auf, das bereits einen TV-Rekorder auf GStreamer-Basis umsetzt. Allerdings ist der dort gesetzte Link tot und auch auf der Seite des Autoren gibt es keinen Hinweis mehr auf das Programm. Cupid 0.2 war wohl die letzte veröffentlichte Version, sie kompiliert auf meinem Ubuntu 9.10 allerdings nicht mehr und scheint noch von GStreamer 0.8 abzuhängen – keine Ahnung, ob das einfach anpassbar ist. Hier gibt es ein  kleines aber verheißungsvolles Bildschirmfoto des Programms.

Also bleibt das Vorhaben “PyTV” weiterhin reizvoll – oder kennt jemand bereits Umsetzungen davon?

Update:
Ein interessantes Python/GStreamer-Projekt habe ich noch entdeckt: LightMyth – der Versuch, MythTV “leichtgewichtig” zu gestalten.