Alle Beiträge von adlerweb

Videostabilisierung unter Linux

Egal wie ruhig man ist: Auf großen Zoomstufen oder beim Bewegen verwackelt fast jedes Video. Professionelle Aufnahmegeräte bieten für diesen Zweck meist eine Stabilisierung in Kamera oder Objektiv, dies ist jedoch aufwändig und kostet entsprechend viel Geld. Besitzer von Consumergeräten müssen aber nicht ganz auf eine solche Stabilisierung verzichten: Viele Videoeditoren bieten entsprechende Bildfilter, welche (auf Kosten der Videoqualität) softwareseitig die Stabilisierung übernehmen. Als kostenlose Lösung ist vielen die entsprechende Funktion der Videoplatform YouTube bekannt, jedoch lässt sich diese nur auf komplette Videos anwenden und ist nicht konfigurierbar, zudem möchte man nicht jedes Video auf der zu Google gehörenden Platform bereitstellen. Leider sieht es unter Linux dünn aus – zwar kann man über wine die Lösung Virtualdub/Deshaker nutzen und der Editor KDEnlive bietet passende Filter im Menü, beide Lösungen lassen sich jedoch nur schwer automatisieren und leidet unter nervigen kleinen Bugs.

Bild: https://www.adlerweb.info/blog/wp-content/uploads/2013/05/kdenlivestab.png

Um nun bei mir das ganze zu erschlagen habe ich ein Script geschrieben, welches alles nötige übernimmt. Die eigentliche Stabilisierung steckt in der Software transcode, da diese jedoch mit vielen Codecs Probleme hat muss das Video entsprechend vorbereitet werden. Durch den Zwischenschritt als MPEG2 ist temporär ein vielfaches des ursprünglichen Speicherplatzes nötig, der sollte beim Umgang mit Videos ja ohnehin reichlich vorhanden sein. Das Ausgabeformat ist derzeit auf 8MBit/s x264 mit 128k MP3 eingestellt, der Stabilisierungsfilter läuft mit Standardwerten.

ffmpeg -i $1 -vcodec mpeg2video -b:v 10000k $1.mpg
ffmpeg -i $1 -acodec libmp3lame -b:a 128k $1.mp3
transcode -J stabilize -i $1.mpg -y null,null -o dummy
transcode -J transform -i $1.mpg -y xvid,pcm -w 10000k -o $1.stab.temp.mp4
ffmpeg -i $1.stab.temp.mp4 -i $1.mp3 -vcodec libx264 -acodec copy -b:v 8000k -map 0:0 -map 1:0 $1.stab.avi
rm $1.stab.temp.mp* $1.mp3 $1.mpg $1.*.trf

Voraussetzungen sind ffmpeg und transcode. Debian/Ubuntu liefern zum Teil statt ffmpeg dessen Fork avconf, in diesem Fall einfach im Script den Befehl anpassen.

http://www.youtube.com/watch?v=HMkRF2yz8M0

Goodbye Google Talk

Google Talk war ein guter Ansatz des Internetriesen: Ein eigener Internetmessenger, stark integriert in die Google-Systeme aber basierend auf dem offenen Protokoll XMPP (ehem. Jabber). Dank der offenen Struktur konnte man auch Clients von anderen Anbietern nutzen und so den Dienst z.B. in den Linux-Desktop integrieren. Auch war man nicht zwingend an Google gebunden: Als Nutzer anderer XMPP-Dienste konnte man mit den bei Google angemeldeten Nutzern – ähnlich wie auch bei E-Mail – problemlos kommunizieren.

Nun ist Schluss: Google hat auf Android-Geräten wie angekündigt Google Talk entfernt und setzt jetzt ausschließlich auf die in Google+ integrierten Hangouts. Keine Drittanbieter-Clients, keine API, keine Kommunikation außerhalb der Google-Dienste. Hier zeigt sich abermals, dass Google nach und nach ihre Rolle als Verfechter freier Standards ablegt und immer mehr geschlossene Systeme aufbaut. Sicher keine gute Sache für die Nutzer, denn dies hat schon früher dazu geführt, dass Nutzer tausende Clients und Endgeräte brauchten um mit anderen zu kommunizieren. Man kann nur Google an eins erinnern: dont be evil.

Überlegungen zu Reclaim.fm

Vor einigen Tagen hat Sascha Lobo in seinem Überraschungsvortrag auf der re:publica 2013 seine Strategie zur Rückeroberung der Netzdaten präsentiert: Mir Reclaim.fm möchte er dafür sorgen, dass die Blogs und Webseiten der Internetnutzer wieder aus ihrem Winterschlaf erwachen. Keine so schlechte Idee: Viele Daten liegen heute in der Cloud und diese ist – wie nicht zuletzt einige Ausfälle in letzter Zeit erneut bewiesen haben – nicht unfehlbar. Ich selbst bin nicht so tief in der Cloud versunken wie manch anderer: Die Inhalte wichtiger Twitter-Erkenntnisse finden sich in Blog-Posts wieder, viele YouTube-Videos stehen auch über meinen Server zum Download bereit, aber einige Sachen verschwinden auch in den Tiefen des Netzes.

Der erste Ansatz, welcher auf der Projektseite explizit als Entwicklerschnellschuss beschrieben wird, ist technisch zwar deutlich verbesserungswürdig, das Konzept ist aber vielversprechend: Statt eigener Systeme zu entwickeln setzt man auf Standards: Youtube-Videos, Facebook-Posts, Tweets – alles wird durch separate „Proxy-Scripts“ verarbeitet und am Ende als RSS ausgegeben. Da dieses Feed-Format weit verbreitet ist sind die Inhalte so über so ziemlich jeden Newsreader nutzbar. Unter anderem besteht so auch die Möglichkeit per Blog-Syndication (z.B. FeedWordPress für WordPress-Blogs) die Inhalte auf die eigene Webseite zu duplizieren.

Auch wenn die Scripte noch in einem frühen Stadium stecken: Das Grundkonzept funktioniert. Auch bei mir landen jetzt Inhalte aus verschiedenen Netzen in einer (auf der Startseite versteckten) Blog-Kategorie, jedoch ist noch ein weiter weg zu gehen: Bilder und Video werden so z.B. derzeit nur auf die Cloud-Dienste verlinkt, hier sollte besser eine lokale Kopie erfolgen um die Inhalte wirklich dauerhaft zu sichern. Auch hoffe ich, dass mit den ersten Versionen eine bessere Versionsverwaltung folgt: Momentan gibt es die Scripte nur als ZIP-Datei, kein GIT-Repository oder ähnliches – Patches erstellen ist somit nur schwer möglich.

Ein Anfang ist immerhin gemacht – ich hoffe, dass viele mitziehen und ihre Daten zukünftig nicht einfach nur großen Unternehmen schenken sondern selbst nutzen und dabei vorzugsweise auf freie Formate und Protokolle setzen, denn wie sich an der Nachricht über das Abhören von Skype zeigt sind die Warnungen der Verfechter von XMPP, PGP & Co nicht zwingend durch Verfolgungswahn entstanden.

Zurück unter den Lebenden: @Saffig mit News & Terminen

Nach der Umgestaltung der Internetseite der Ortsgemeinde Saffig bin ich nun auch dazu gekommen den Twitter-Bot auf das neue System umzustellen, damit gibt es jetzt wieder aktuelle Nachrichten aus dem Rathaus und Hinweise auf Veranstaltungen direkt in die Timeline.

Neue Daten von den Fußtruppen: Die Rhein-Zeitung über Ingress

Bild: https://www.adlerweb.info/blog/wp-content/uploads/2013/05/ingress.pngKurz war die Nachricht von Lars Wienand, Social-Network-Guru der Rhein-Zeitung: Er wolle einen Beitrag über Ingress, das neue Argumented-Reality-Spiel des Internetriesen Google, schreiben und suche daher Spieler aus der Umgebung. Nunja, ich hatte einige Wochen zuvor endlich meinen Invite für die mehr oder minder geschlossene Betaphase erhalten und wartete verzweifelt auf Portale in Laufweite, aber hey, in Koblenz waren Portale und es hatten sich schon ein paar Koblenzer angekündigt. Außerdem kenne ich Lars schon von einigen Twittertreffen und weiß, dass es in seiner Anwesenheit üblicherweise nicht langweilig wird. Auch Ingress-Frischling Sebastian Fuchs von „nebenan“ hatte Interesse und so ging es dann zusammen schnell nach Koblenz. Nunja, sofern das beim Koblenzer Berufsverkehr möglich ist, aber laut Twitter steckte auch der Herr der RZ irgendwo auf der Europabrücke im Stau. Glücklicherweise waren in unmittelbarer Nachbarschaft des Treffpunktes am deutschen Eck noch Parkplätze zu finden und wir damit fast pünktlich. Auf dem Eck war keine große Suchaktion notwendig: Eine Truppe mit Brillen, Tablets und meterweise Ladekabel sieht vielversprechend aus. Viele der Mitspieler stammten – wie irgendwie zu erwarten war – aus dem Umfeld der Koblenzer Uni und alle Spielnamen waren irgendwie bekannt. Kein Wunder: Alle Anwesenden gehörten zur Fraktion der „Resistance“ – die in Koblenz spärlich gesäten Anhänger der gegnerischen „Enlightened“ hatten offenbar keine Zeit. Auch iPhone-Besitzer (und damit nicht Ingress-Spieler) Wienand tauchte irgendwann auf – nicht unbedingt zu spät, denn das Eck-Portal war vermutlich bei sämtlichen Wartenden inzwischen ausgebrannt. Im Interview ging es um die Motivation, den Datenschutz und vieles weitere, was sich im Artikel entsprechend wiederfindet. Im Anschluss ging es dann noch in geschrumpfter Formation kurz durch Koblenz Portale entdecken – und Laufen. Am Jesuitenplatz durften wir feststellen, dass ein naheliegendes Portal durch einen Spieler der Enlightened angegriffen wurde – nichts wie hin. Murphy war aber natürlich schneller: Offenbar ist war der Spieler an uns vorbei und nun an unserer Ausgangsposition zu Gange, dort konnten wir dann jedoch 2 auf den Bildschirm konzentrierte Menschen finden – und ihnen einen etwas erschrockenen Blick entlocken, als sie die mit Handys & Tablets ausgestattete Menschenreihe hinter sich entdeckten. Aber Spiel ist Spiel: Man kam in ein freundliches Gespräch und verabschiedete sich kurz darauf – solche Geplänkel geben beiden Seiten Punkte und helfen allen Spielern.

Viele weitere Infos gibt es im Artikel der Rhein-Zeitung.

Alternative für vzcompress / Volkszähler

Seit einiger Zeit nutze ich – wie auch vorgestellt –  das Projekt Volkszähler um meine Messwerte zu erfassen. Der Grund für den Wechsel ist schnell erkennbar: Es ist dem angestaubten RRDTool designtechnisch um Generationen voraus, technisch hatte ich jedoch bereits damals bedenken angemeldet: Die Daten wandern einfach in eine MySQL-Datenbank – rrdtool verwendet hier ein System, welches die zeitliche Auflösung mit dem Alter der Daten senkt und so Speicher spart.

Das Ergebnis war zu erwarten: Über 10GB belegte meine Datenbank zuletzt, also muss Abhilfe geschafft werden. Genau für diesen Zweck findet ich im offiziellen Repo ein Tool namens „vzcompress„, welches unter Angabe der Kanäle und Zeiten per Argument alte Daten nach Zeiträumen zusammenfasst und somit nachträglich den Speicherverbrauch senken kann. Kann. Leider ist das Script nur für Pulssensoren (MeterInterpreter) geeignet, lässt man es auf einen Datenbestand mit absoluten Sensoren (SensorInterpreter) los wird der Datenbestand wegen der in dem Fall unpassenden Zusammenfassungsmethode quasi zerstört.

Also auf in den Kampf: Da sich mein Perl in Grenzen hält habe ich die Funktion in PHP neu implementiert und passend zu meinen Anforderungen erweitert. Das Script liest nun die verfügbaren Kanäle direkt auf den Konfigurationsdateien bzw. der Datenbank aus und unterstützt ein oder mehrere Kompresssionsschemata um ein abgestuftes Komprimieren zu ermöglichen, also z.B.

Newer than 7 Days      Keep Original
Older than 7 Days      Datapoint per 1 Minute
Older than 30 Days     Datapoint per 5 Minutes
Older than 6 Month     Datapoint per 15 Minutes
Older than 1 Year      Datapoint per 30 Minutes

Die bisher bei Volkszähler implementierten Sensoren wählen automatisch eine passende Methode:

	SensorInterpreter = Mittelwert
	MeterInterpreter = Summe
	CounterInterpreter = Maximalwert

Als Zeitstempel wird immer das Ende der zusammengefassten Zeitperiode verwendet. Auf der Konsole können Live-Statusmeldungen ausgegeben werden um den Fortschritt zu verfolgen. Getestet (im Sinne von es sind noch Daten da die stimmen könnten) ist das Ganze gegen MySQL und SensorInterpreter, andere Sensoren sollten funktionieren, bei anderen Datenbanken könnte es Probleme geben, da die SQL-Queries hardcoded sind.

Das Script selbst findet sich auf Github – für den Betrieb muss ggf. noch eine JSON-Datei gepatched werden.
Dank der Mailingsliste konnten bereits ein paar Schnitzer erkannt und zum Teil auch schon behoben werden. Auch einige interessante Verbesserundvorschläge versprechen noch bessere Ergebnisse.

Asterisk 11 und chan_capi

CAPI, CAPI, was war das doch gleich. Achja, ISDN. Ja, ich nutzt es tatsächlich noch – ganz ohne VoIP verbindet sich mein lokaler Asterisk mit einer guten, alten und vor allem aktiven AVM B1 mit dem Telefonnetz. Oder sagen wir eher verband, denn das letzte Update brachte auch Asterisk 11 mit – einer Software, welche offenbar jeder Art von Non-IP-Telefonie nicht sonderlich viel zu bieten hat. Eigene Schnittstellen gibt es nicht und das vor mir zuletzt genutzte chan_capi lässt sich wegen einer API-Änderung nicht mehr nutzen. Da ich nichts passenden finden konnte und die Änderungen überschaubar aussahen habe ich die bisherigen Array-Zugriffe durch die nun vorgeschriebenen Getter/Setter-Methoden geändert. Kompilieren funktioniert schon mal, allerdings hat Murphy natürlich zugeschlagen: Meine ISDN-Leitung hat irgendwo ein kaputtes Stück Kupfer, daher kann ich momentan nicht testen und die Karte im Zweitserver, welcher noch Netz hätte unterstützt passenderweise nur mISDN und somit chan_misdn – gnah. Nunja, der ungetestete Patch steht auf der ML oder meinem Server – wer mutig ist darf sich gerne versuchen – also auf eigenes Risiko und so…

Update 31.07.2013: Auf der ML steht inzwischen ein erweiterter Patch bereit, welcher sicher auch ein Versuch wert ist.

Updates für php-dio und fusecompress-1 @ AUR

Soderle, kleinen Frühjahrsputz für mein Archlinux veranstaltet: php-dio ist jetzt auf Version 0.0.7 – eigentlich unnötig, da offenbar nur Änderungen für Windows drin sind, aber hey, die Optik spielt ja auch eine Rolle. Zudem habe ich mich mal erbarmt und die C-Variante von Fusecompress auf die aktuelle Version gehoben bzw. einige Compile-Patches eingearbeitet – mal schauen, sollte die letzte Version endlich die FUSE-Abstürze auf meinem PC beheben adoptiere ich es eventuell dauerhaft, aber erst mal wird jetzt die neue Version mit meinem /home auf Herz und Nieren getestet…

Neue Webseite für Saffig

Bild: http://saffig.de/wp-content/uploads/Homepageteam-300×199.jpgZeit wurde es: Die 2007(?) erstellte Webseite meines Heimatortes passte Designtechnisch nicht mehr ganz in die heutige Zeit und auch das in die Jahre gekommene Joomla verhieß nichts Gutes (korrekterweise, denn kurz vorm Umschalttermin zerlegte sich die Originalseite). Offenbar nicht meine Meinung, denn seitens der Ortsgemeinde kam die Anfrage, ob ich nicht helfen könne – vermutlich nicht zuletzt da ich bereits bei einigen Vereinen die Finger im Spiel hatte. Bei den ersten Gesprächen stellte sich schnell heraus, dass das Hauptaugenmerk auf der Bedienbarkeit liegen sollte. Joomla ist zwar kein textbasierter HTML-Editor, jedoch benötigt man doch etwas Einarbeitung um die Funktionen korrekt nutzen zu können. Nun, bei wenigen Änderungen im Monat keine besonders gute Zeitanlage. Nachdem ich mir einige aktuelle CMSsen angeschaut habe landete ich doch wieder bei meinem Standard: WordPress hat dank seiner Herkunft eine sehr einfache und auch für außenstehende geeignete Verwaltungsoberfläche, kann auch ohne Kenntnis von FTP & Co aktualisiert werden und stellt dennnoch einen für die meisten Punkte ausreichenden Funktionsumfang zur Verfügung. Die alten Inhalte übernahm ich „händisch“ per Copy&Paste, so konnte ich auch gleich die Designsünden in Form von übermäßigen <table>s eliminieren. Auch an anderer Stelle freut sich mein Techniker-Ich: Die bisherige Textseite mit Nachrichten wird über die Artikel-Funktion abgewickelt, die ebenfalls textliche Terminliste steckt nun im Plugin AjaxEventCalendar, welches auch gleich einen iCal-Feed drangeflanscht bekam. Dank HTML5/CSS3 skaliert das Design auch passabel bis auf Handys runter, hier habe ich lediglich im CSS die <li>-Bullets aktiviert, sodass die verschachtelte Menüstruktur auch Mobil erkennbar bleibt. Viele weitere Änderungen hatte ich ja bereits gebloggt.

Ich denke, dass die Umstellung ganz gut funktionierte. Bei der Vorstellung kam überweigend positives Feedback und trotz einfacherer Bedienung sollten die Inhalte technisch sauberer bleiben und so auch ein gewisses Maß an Barriere- und damit auch Technikerfreiheit bieten.

www.saffig.de

 

 

Linux-„Hardware“-Reboot

Narf! Schlechte Idee. Auf einem Remoterechner habe ich per SSH ein Update angestoßen, welches auch am Init-System Änderungen durchführte. Im Anschluss sollte ein Reboot kommen, den ich per „reboot“ startete. Leider nicht ganz so erfolgreich, denn der Shutdown startete zwar, aber der erhoffte Reboot blieb aus. Erster Weg: KVM. Leider war die TTY schon weg, auch Ctrl-Alt-Del zeigte keine Wirkung. Passend, denn einen funktionierenden Hardware-Reboot hat die Kiste derzeit nicht. Glück im Unglück: Der SSH-Server lief noch und ich konnte auf eine Shell kommen, aber was soll das ohne funktionierendes Init-System bringen…

Die Lösung lieferte Linuxjournal: Über das Proc-Filesystem lässt sich per SysRq ein Reboot auslösen – und natürlich SysRq auch aktivieren wenn die Distro die Funktion nicht eingeschaltet hat.

echo 1 > /proc/sys/kernel/sysrq
echo b > /proc/sysrq-trigger