iPhone
Mein neues Spielzeug, der WD TV Live, kann Thumbnails (Vorschau-Bilder) zu einer Video-Datei anzeigen, wenn im selben Ordner eine jpg-Datei (am besten mit 120×180 Pixeln) mit dem selben Namen wie das Video liegt. Zur Datei video.mkv wird also z.B. video.jpg angezeigt.
Ich hab mir also ein Shell-Script besorgt, dass aus den Videos automatisch die Bilder generiert. Ich hab mich da für Sekunde 45 entschieden, weil bei einigen Filmen ganz am Anfang ja erstmal nutzlose Trailer der beteiligten Unternehmen laufen… Weil es vor a120llem bei 720p- oder 1080p-Videos ne Weile dauern kann, bis da ein einzelnes Bild generiert ist, hab ich dann (weil ich nicht so lang warten wollte ;) heute ein Shell-Script geschrieben, das vier Dateien auf einmal abarbeitet (ich hab nen Quad-Core). Das Script sollte man auch ohne allzu großen Aufwand anpassen können, dass es andere Aufgaben mit mehr oder weniger gleichzeitigen Jobs parallel abarbeitet (bald vielleicht auch meine Log-Files…).
Vorraussetzungen: ffmpeg, imagemagick
#!/bin/bash #set -x # file types: TYPES='.+\.(mkv|avi|mpg|mpeg|mov|wmv|mp4|flv)$' # make thumbnail at second ## of the movie OFFSET=45 # number of parallel processes WORKERS=4 NL=' ' queue_put() { queue_name=$1 value=$2 if [ -n "${!queue_name}" ]; then queue_val="${!queue_name}" eval "$queue_name=\"$queue_val$NL$value\"" #read $queue_name <<< "$queue_val$NL$value" else read $queue_name <<< "$value" fi } queue_pop() { queue_name=$1 var=$2 queue="${!queue_name}" if [ -n "$queue" ]; then index=$(expr index "$queue" "$NL") read $var <<< "${queue%%$NL*}" if [ $index -eq 0 ]; then read $queue_name <<< '' else eval "$queue_name=\"${queue#*$NL}\"" # read $queue_name <<< "${queue#*$NL}" fi fi } echo "searching for missing thumbnails..." allfiles=$(find . -regextype posix-extended -iregex "$TYPES" -exec /bin/bash -c "file=\"{}\"; exit \$(test ! -f \"\${file%.*}.jpg\")" \; -printf '%p\n') dir=$(mktemp -d) work() { echo "worker $workerid is starting up..." sleep .25 pipe="$dir/job$workerid" while [ -p "$pipe" ]; do echo READY > "$pipe" read file < "$pipe" if [ "$file" = "DONE" ]; then echo "worker $workerid is shutting down." exit 0 fi thumb=${file%.*}.jpg echo echo echo echo "worker $workerid processing $file..." ffmpeg -itsoffset -$OFFSET -i "$file" -vcodec mjpeg -vframes 1 -an -f rawvideo -y -v -1 "$thumb" mogrify -resize 120x180 "$thumb" done return 0 } masterpid=$$ workerid=0 workers=( ) while [ $workerid -lt $WORKERS ]; do mkfifo "$dir/job$workerid" work & workers[$workerid]=$! let workerid++ done sleep 3 while [ -n "$allfiles" ]; do workerid=0 while [ -n "$allfiles" -a $workerid -lt $WORKERS ]; do pipe="$dir/job$workerid" if [ -p $pipe ]; then response=$(cat < $pipe) if [ "$response" = "READY" ]; then queue_pop allfiles file echo $file > "$pipe" fi fi let workerid++ done sleep .25 done workerid=0 while [ $workerid -lt $WORKERS ]; do cat "$dir/job$workerid" > /dev/null echo DONE > "$dir/job$workerid" wait ${workers[$workerid]} let workerid++ done rm -rf "$dir"
Übrigens: Ordnern kann man mit einem folder.jpg ein Bild zuordnen.
Install Organize Search Engines 1.5rc2
Changes since RC 1:
Organize Search Engines 1.5 RC 1
Changes:
ich brauche ein Icon für den Button zum Ändern des Schlüsselworts in Organize Search Engines. Bisher habe ich dazu das Eigenschaften-Icon missbraucht, der wird jetzt aber für die Eigenschaften gebraucht.
Mal schauen, ob das mit dem Lazy Web auch hier funktioniert…
Ein weiteres altes SEO-Feature, das bald Einzug in Organize Search Engines erhält: das Umsortieren der Suchmaschinen direkt im Auswahlmenü per Drag & Drop.

Dass das letzte noch fehlende Feature (das mir einfällt), das Kontextmenü der Suchmaschinen im Drop-Down, noch kommt, bezweifle ich. Der Engine-Manager ist imho sehr viel bequemer, als es so ein je Kontextmenü sein könnte.
Update 17.02.: Der Backport vom 3.1-Branch auf Firefox 3 hat erstaunlicherweise auch eine kleine Änderung gebraucht :-). Damit ist Version 1.5 fast fertig.
Ich habe endlich die Lösung gefunden (und eingebaut), das ewige Problem zu lösen, dass nach dem Anpassen der Toolbars nichts mehr funktioniert: die Methoden der Searchbar nicht einfach durch eigene ersetzen, sondern ein eigenes XBL-Binding schreiben, dass das Standard-Binding erweitert (extend).
Damit löst sich das Problem mit dem Anpassen einfach in Luft auf, weil immer wenn die Suchleiste neu initialisiert wird, mein Code genauso neu aufgerufen wird. Das Binding hat mir dann außerdem auch erlaubt, einigen Kompatibilitäts-Code für Thinger (mehrere Suchleisten, leider nur bis Fx 2) rauszuschmeißen, weil mein Code ganz von selbst mitgeladen wird.
So im Nachhinein ist das sowieso die viel sauberere Lösung, aber das hat damals halt mit einer einzigen ersetzten Methode angefangen und ist dann immer mehr geworden…
(Nein, ich erwarte nicht, dass das ein Leser hier versteht, oder dass es ihn interessiert. Aber ich wollte es mal loswerden.)
Da ich weiß, dass darauf mindestens eine Person gewartet hat, und das schon mehr ist als bei den meisten der (viel zu seltenen) Postings hier, kommt hier jetzt also ohne lange Einleitung meine Facharbeit…
Thema: Numerische Verfahren zur Nullstellenberechnung (mit Computerereinsatz)
Bitte auf keine gefundene Fehler hinweisen, sie ist eh schon abgegeben und so muss ich mir (zumindest bis zur mündlichen Prüfung) keinen unnötigen Kopf drum machen.
PS: Die Quelltexte stehen aus alter Tradition MPL/GPL/LGPL lizenziert. Die Arbeit selbst unter der Creative Commons Namensnennung-Weitergabe unter gleichen Bedingungen 3.0 Deutschland Lizenz.