Seit kurzem bin ich Besitzer des LG KU990 Viewty. Es ist ein DivX-zertifiziertes Handy und spielt somit DivX-Videos ab. Dazu kann man nun den mitgelieferten DivX-Converter nutzen, muss man aber nicht.
Unterstützte Codecs und Bitraten
Das Viewty spielt offiziell nur DivX-Videos ab. Es kann praktisch aber auch andere MPEG4-Varianten abspielen, wenn sie als DivX getarnt sind. So kann z.B. Xvid verwendet werden, wenn der FOURCC-Code z.B. auf "DX50" (DivX 5) gesetzt wird. Als Audiocodec ist MP3 geeignet. Man darf allerdings max. 44100Hz nehmen.
Eine Video-Bitrate von 4000kbit ging problemlos. Soviel sollte man aber nicht brauchen. 1000kbit ist schon extrem gut. 500kbit reichen zur Ansicht am Handy auch noch.
Auflösung
Maximal 307200 Pixel (z.B. 640*480). Die Verhältnisse können jedoch fast beliebig gewählt werden (Seitenverhältnisse von 5:1 bis 1:5 waren problemlos).
Maximale Auflösung für unterschiedliche Seitenverhältnisse:
- 4:3 ⇒ 640*480
- 5:4 ⇒ 620*494
- 16:9 ⇒ 740*414
Programme zur Enkodierung
Unter Windows
Unter Windows kann man den mitgelieferten DivX-Converter nehmen. Alternativ könnte man AutoGK nutzen (Achtung: DivX wählen, alternativ Xvid und FOURCC-Code überschreiben).
Unter Linux (und Windows)
Will oder kann man keine Windows-Programme nutzen, bietet sich FFmpeg an.
Beispiel mit FFmpeg, Xvid 700kbit/MP3 112kbit (Quellmaterial ist eine DVB-T-Aufnahme im Seitenverhältnis 16:9. Zum Demultiplexen wurde ProjectX benutzt):
Linux:
ffmpeg -i src.m2v -i src.mp2 -vcodec xvid -s 740*414 -b 700kb -vtag DX50 \ -acodec mp3 -ab 112kb -ar 44100 out_740x414.avi
FFmpeg für Windows nutzt abweichende Namen für die Codecs:
ffmpeg -i src.m2v -i src.mp2 -vcodec libxvid -s 740*414 -b 700kb -vtag DX50 \ -acodec libmp3lame -ab 112kb -ar 44100 out_740x414.avi
Automatische Enkodierung von VDR-Aufnahmen
Um meine VDR-Aufnahmen automatisch zu enkodieren, habe ich ein Python-Skript geschrieben, das diese Aufgabe in folgenden Schritten erledigt:
- Prüfen, ob die Aufnahme in einer Ausschlussliste liegt. Bestimmte Aufnahmen werden dann nicht enkodiert.
- Demultiplexen mit ProjectX. Somit wird sichergestellt, dass die Aufnahme unbeschädigt und synchron ist.
- Berechnung der maximalen Größe (max. 307200 Pixel) entsprechend dem Seitenverhältnis.
- Enkodierung mit Xvid (Optional im 2-Pass-Verfahren).
- Löschen von temporären Dateien.
Um dieses Skript für jede Aufnahme auszuführen, erstellt man am besten ein Shell-Skript, das das Python-Skript aufruft.
Das Shell-Skript muss im Verzeichnis recording-hooks
(unter Debian /etc/vdr/recording-hooks/) der VDR-Konfiguration liegen:
#!/bin/bash # Use Latin1 as charset export LC_ALL=de_DE # Run vdr2xvid nicely in the background nice -n 19 /pfad/zu/vdr2xvid.py $1 $2 &
Viel Spaß beim gucken :)
Erstellt am 24.11.2007 um 21:16 Uhr von streawkceur.
Abrufe: 45853
-
Kommentare: 40 -
Trackbacks: 0 -
Trackback-Link: http://gedankenkonstrukt.de/blog/trackback/?id=52.
Tags: divx, film, handy, ku990, mpeg4, python, video, viewty, xvid.
Web-Frameworks in Python
Hurra! Ich habe in letzter Zeit ein wenig mit Python rumgespielt und mich da insbesondere für die Web-Frameworks interessiert.
!Die drei großen scheinen Django, TurboGears und Pylons zu sein.
Ich habe sie jeweils nur kurz ausprobiert. Hier meine Erfahrungen:
Django
Django hat für fast alle Aufgaben (Templating, ORM, Routing/Dispatch) eigene Komponenten entwickelt.
- Pro: Fühlt sich sehr integriert und solide an.
- Pro: Einheitliche Dokumentation an einem Ort.
- Contra: Man muss auch jede Komponente neu lernen und wird sie kaum außerhalb Django nutzen können
- Contra: Wenn einem eine Komponente nicht passt, hat man i.d.R. Pech gehabt.
- Contra: Kleinere potenzielle Entwicklerschaft je Komponente.
TurboGears
TurboGears (TG) geht einen anderen Weg und versucht so viele Komponenten wie möglich wiederzuverwenden und zu integrieren. TG 1.0 benutzt standardmäßig Kid für's Templating, SQLObject als ORM und CherryPy fürs Routing/Dispatching. Man hat aber zusätzlich die Möglichkeit mit relativ wenig Aufwand andere Komponenten dafür zu nutzen.
- Pro: Größere Flexibilität
- Pro: Modularer Aufbau
- Pro: Bringt viele nette Helfer mit (z.B. Datenbankeditor)
- Contra: Fühlt sich weniger integriert an als Django
- Contra: Größere Komplexität
- Contra: Die in Version 1.0 standardmäßig verwendeten Komponenten sind nicht mehr State of the Art.
Pylons
Pylons geht den gleichen Weg wie TG, benutzt aber "modernere" Komponenten wie SQLAlchemy als ORM und Routes fürs Routing/Dispatching. Außerdem setzt es auf WSGI auf und hat somit eine solide Basis, die auch eine bessere Wiederverwendung von Anwendungsteilen ermöglichen soll.
- Pro: Extrem modular
- Pro: Nutzt moderne Komponenten
- Pro: Setzt auf WSGI auf
- Pro: Hat möglicherweise das größte Potenzial
- Contra: Fühlt sich am wenigsten integriert an
Die gute Nachricht
Da ich kein Freund von monolithischen Systemen bin, war ich zwischen TG und Pylons hin- und hergerissen. TG fühlt sich etwas integrierter and und bringt mehr Goodies mit. Pylons ist hingegen moderner.
Diese Probleme scheinen sich aber bald zu lösen! Denn wie Mark Ramm in seinem Blog schreibt, wird TG 1.1 modernere Komponenten wie Genshi und SQLAlchemy nutzen. TG 2.0 wird sogar komplett auf Pylons aufsetzen und damit von dessen Vorteilen profitieren können.
Da freut man sich doch drauf :)
Erstellt am 28.06.2007 um 20:06 Uhr von streawkceur.
Abrufe: 14832
-
Kommentare: 1 -
Trackbacks: 0 -
Trackback-Link: http://gedankenkonstrukt.de/blog/trackback/?id=41.
Tags: django, framework, pylons, python, turbogears, web, webdev, webframework, wsgi.
Problem
Gleiches Problem, gleiche Lösung. Aber zur Abwechslung mal in Python. Bin ohnehin in letzter Zeit recht interessiert in Python, da dachte ich mir, dass das doch mal eine nette Übung ist.
Lösung
Hier also das Python-Script:
#!/usr/bin/python import urllib2, re pattern = re.compile('title="([^"]*)".*xmlUrl="([^"]*)"', re.I) opml = open("Meine_Thunderbird_Feeds.opml", "r") for line in opml: result = pattern.search(line) if result: title, url = result.group(1), result.group(2) try: urllib2.urlopen(url) except urllib2.HTTPError, e: print "ERROR (%s): %s -> %s\n" % (e, title, url)
Abgrenzung zur Perl-Version
- Parst auch kein XML
- Wird allerdings nicht als "Bad Behavior" erkannt.
Erstellt am 23.06.2007 um 14:11 Uhr von streawkceur.
Abrufe: 1742
-
Kommentare: 0 -
Trackbacks: 1 -
Trackback-Link: http://gedankenkonstrukt.de/blog/trackback/?id=37.
Tags: atom, check, code, feeds, http, opml, python, rss, xml.