GP2X-Video-Encoder-Script


Lox2Eagle

Member
Joined
Dec 12, 2006
Messages
238
Location
Köln
ICQ
217134494
LOCATION
Köln
Da ich mit den bestehenden Encoder-Scripten nicht wirklich zufrieden war, hab ich mir mal ein eigenes zusammengeschustert. Was es ausspuckt, läßt sich in den Beispieldateien betrachten:

[Akryls (11.5MB)]
[Elephants Dream(25MB)]

Elephants Dream vom Orange Open Movie Project löste die Idee zum Script als erstes aus, da ich nicht einsah, warum es unter einer Dateigröße von 60MB absolut unerträglich anzuschauen war. Jetzt ist es weniger als halb so groß und sieht auch noch besser aus :)
  • Das Script erstellt einen OGM-Container, stellt aber noch ein AVI hintenan um von der GP2X als Video erkannt zu werden.
  • Bei leisen Videos wird die Laustärke angehoben, damit man gegebenenfalls auch über die Lautsprecher etwas hören kann.
  • Alles in allem läuft es noch recht fix durch: knapp 60% der Laufzeit auf einem AMD64 4000+ bis zum fertigen Video.
  • 90 Minuten Film werden zu einer ~200MB großen Videodatei.
  • Vorraussetzungen sind oggenc, mencoder(mplayer) sowie ogmtools.
  • Einfach als meinethalben gp2xenc abspeichern, dann mit gp2xenc foo.avi das Video erzeugen.
Hier mal ganz dreist das von boeseronkel2k verschönerte Script:
Code:
#!/bin/bash

if [ -z "$@" ]
then
    echo " USAGE: encode videofile1 videofile2"
    echo " EXAMPLE: convert2gp2x \"/tmp/the big apple.avi\" /mnt/fun/*.mpeg"
    echo "" 
else
	for i in "$@";
	do
	if [ -r "$i" ]
        then
            echo "processing $i..." 
			mkfifo "$i".fifo
			oggenc "$i".fifo --resample 32000 -q1 -o "$i".ogg & mplayer -vc null -vo null -af volnorm -ao pcm:waveheader:fast:file="$i".fifo "$i"
			
			mencoder -sws 10 -vf scale=320:-3,harddup -ffourcc DX50 -nosound -ovc lavc -lavcopts vbitrate=250:v4mv:mbd=2:trell:cmp=3:vhq=1:vpass=1:last_pred=2:dia=-1:vb_strategy=1:turbo "$i" -o /dev/null -passlogfile "$i"pass.log
			mencoder -sws 10 -vf scale=320:-3,harddup -ffourcc DX50 -nosound -ovc lavc -lavcopts vbitrate=250:v4mv:mbd=2:trell:cmp=3:vhq=1:vpass=2:last_pred=2:dia=-1 "$i" -o small."$i" -passlogfile "$i"pass.log
			ogmmerge -o small."$i".ogm.avi small."$i" "$i".ogg
			
			rm -f "$i".fifo
			rm -f "$i".ogg
			rm -f "$i"pass.log
			rm -f small."$i"
       echo ""
   else
       echo "ERROR: cannot read $i"
   fi
    done
fi 
exit 0
Alte Fassung mit nur dem Nötigsten Code:
Code:
#!/bin/bash
mkfifo "$1".fifo
oggenc "$1".fifo --resample 32000 -q1 -o "$1".ogg & mplayer -vc null -vo null -af volnorm -ao pcm:waveheader:fast:file="$1".fifo "$1"

mencoder -sws 10 -vf scale=320:-3,harddup -ffourcc DX50 -nosound -ovc lavc -lavcopts vbitrate=250:v4mv:mbd=2:trell:cmp=3:vhq=1:vpass=1:last_pred=2:dia=-1:vb_strategy=1:turbo "$1" -o /dev/null -passlogfile "$1"pass.log 
mencoder -sws 10 -vf scale=320:-3,harddup -ffourcc DX50 -nosound -ovc lavc -lavcopts vbitrate=250:v4mv:mbd=2:trell:cmp=3:vhq=1:vpass=2:last_pred=2:dia=-1 "$1" -o small."$1" -passlogfile "$1"pass.log
ogmmerge -o small."$1".ogm.avi small."$1" "$1".ogg

rm -f "$1".fifo
rm -f "$1".ogg
rm -f "$1"pass.log
rm -f small."$1"

exit 0


Über Feedback zu den erzeugten Dateien und Verbesserungen am Script würde ich mich freuen,
Loxi
 
Verbesserungen naja nur ein Input file gefällt mir nicht ;) drum änder ich das ma

schaut dann so aus (noch ungetestet, aber müsste klappen)

Code:
#!/bin/bash

if [ -z "$@" ]
then
    echo " USAGE: encode videofile1 videofile2"
    echo " EXAMPLE: convert2gp2x \"/tmp/the big apple.avi\" /mnt/fun/*.mpeg"
    echo "" 
else
	for i in "$@";
	do
	if [ -r "$i" ]
        then
            echo "processing $i..." 
			mkfifo "$i".fifo
			oggenc "$i".fifo --resample 32000 -q1 -o "$i".ogg & mplayer -vc null -vo null -af volnorm -ao pcm:waveheader:fast:file="$i".fifo "$i"
			
			mencoder -sws 10 -vf scale=320:-3,harddup -ffourcc DX50 -nosound -ovc lavc -lavcopts vbitrate=250:v4mv:mbd=2:trell:cmp=3:vhq=1:vpass=1:last_pred=2:dia=-1:vb_strategy=1:turbo "$i" -o /dev/null -passlogfile "$i"pass.log
			mencoder -sws 10 -af volnorm -vf scale=320:-3,harddup -ffourcc DX50 -nosound -ovc lavc -lavcopts vbitrate=250:v4mv:mbd=2:trell:cmp=3:vhq=1:vpass=2:last_pred=2:dia=-1 "$i" -o small."$i" -passlogfile "$i"pass.log
			ogmmerge -o small."$i".ogm.avi small."$i" "$i".ogg
			
			rm -f "$i".fifo
			rm -f "$i".ogg
			rm -f "$i"pass.log
			rm -f small."$i"
       echo ""
   else
       echo "ERROR: cannot read $i"
   fi
    done
fi 
exit 0
 
Das Ergebnis (Elephant Dreams auf 25MB) ist recht beeindruckend.

Aber irgendwas stimmt da noch nicht ganz:
Unter Winamp stürzt das Video nach zweieinhalb Minuten ab.
VLC spielt es komplett ab, zeigt aber eine Gesamtlaufdauer von knapp 50 Minuten an.
Auf dem GP2X läuft es korrekt.

Was sind das für drei Programme, die man dafür braucht? Sind die für Win oder Linux (oder beides)?
 
man braucht dafür die
ogmmerge utils (weiß jetzt nicht genau müsst dafür ma nachschauen)
dann die oggenc gehört zu den vorbis tools
und mencoder, welcher zum mplayer projekt gehört

und zum ausführen des scriptes einen shell interpreter (für windows: m-sys unter linux die sh oder bash und kompatible)
 
Unter Winamp stürzt das Video nach zweieinhalb Minuten ab.
Winamp ist ein Direct Show Video Player der einfachsten Sorte, es erwartet kein OGM Container unter einer .avi endung.

Generell können Direct Show Programme mit OGM Containern wenig Anfangen -> läuft nicht gut aber unter:

http://www.free-codecs.com/download/Ogg_DirectShow_Filters.htm

Da findest ein Direct Show Filter, womit man auch im normalfall OGM's mit Direct Show Playern wie Winamp und dem Windows Media Player abspielen können sollte.
VLC spielt es komplett ab, zeigt aber eine Gesamtlaufdauer von knapp 50 Minuten an.

Wie das bei VLC aussieht weiß ich nicht ob das Format anhand der Dateiendung erkannt wird oder nicht, kannst ja spaßeshalber die Datei in .ogm ändern und schauen, ob dann die Abspieldauer korrekt ausgelesen wird
Auf dem GP2X läuft es korrekt.

Ist klar, der GP2X Video Player basier auf dem Linux mplayer

dieser Player erkennt das format anhand der Datei Header anstatt an der endung, es wird richtig als ogg media file erkannt und gedemuxt

(die Endung .avi muss aber vorhanden sein, weil es sonsnt im auswahl menü des GP2X Media Players nicht angezeigt wird).
 
Danke Euch beiden für's Interesse :)

@boeseronkel
Jap, das Skript funktioniert. Ist auch schönerer Code als meines, bin da noch etwas unbewandert :)

@Modran
Wegen Windows: Die benötigten Programme selbst bekommst Du für so ziemlich jedes OS. Ich habe aber keine Ahnung, ob das mit der Pipe (fifo) funktionieren würde und 'rm' heißt meine ich 'del'. Die named pipe (fifo) ist nötig, da mplayer nicht nach stdout schreiben kann. Zur Not könnte man auch statt fifo in eine einfache WAV-Datei dumpen, was je nach Filmlänge und Samplingrate Dateien im Gigabytebereich geben kann.
Definitiv in bestehender Form möglich wäre es wohl über Cygwin, schöner wäre wenn jemand die Parameter der fünf Zeilen Skript in eine gültige BAT-Datei übertragen könnte.

Auf Macs sollte das Script auch so laufen.

VLC versteh ich auch nicht, selbst laut header ist die Datei in Ton und Bild je ~10m:54s lang.


Gruß, Loxi

[edit]
Habe gerade gelesen, daß erst die künftige Windows Powershell mit Pipes umgehen können soll. Um einen Audiodump käme man mit einer BAT-Datei also vermutlich nicht drumherum.
[/edit]
 
So, ich bräuchte natürlich auch 'nen Videokomprimierungsprogramm - für meine Simpsons-folgen ^_^ . Habe mir jetzt mal Elephant Dreams geholt, bin aber mit so Programmen noch schrecklich unerfahren :( ......
Ich muss die Befehle, die ihr gepostet habt, einfach ein die Kommandozeileneingabe eingeben, oder??
Es gibt auch ein Programm, das 'ne halbe Stunde etwa auf 30mb komprimiert: Kraven's rip pack. Hat jemand von euch da schon Erfahrungen mit gemacht? Hat nämlich letztes mal bei mir ned so funktioniert!

Gruß,
Käse
 
KingCheese said:
[...]
Ich muss die Befehle, die ihr gepostet habt, einfach ein die Kommandozeileneingabe eingeben, oder??
Naja wie aus dem Thread ersichtlich geht das zumindest unter Windows nicht so einfach. Auf einem Mac oder einer Linux-Distri: ja, wenn die vorrausgesetzten Programme installiert sind. Sonst hätte ich nicht geschrieben, daß sie vorrausgesetzt sind. ;)
Es gibt auch ein Programm, das 'ne halbe Stunde etwa auf 30mb komprimiert: Kraven's rip pack.
Das ... kann nicht gut gehen. Schon ein mp3 mit gerade mal 64kb/s *grusel* ist ~15MB groß, eine Videodatei mit der selben Datenrate kannst Du soweit mir bekannt (zumindest heute noch) qualitativ vergessen. Zumindest für mich sind Datenraten unterhalb von 250k für die GP2X in aller Regel von der Bildqualität her unbrauchbar, aber vielleicht bin ich auch pingelig. :)

Wenn jemand eine Vergleichsprobe von Elephants Dream posten würde, um mich vom Gegenteil zu überzeugen, wäre das evtl ganz interessant und ein Grund mein Script von Grund auf neu zu schreiben, hehe... (Ich würd's selbst testen, wenn ich Windows nicht gerade entgültig von der Platte geputzt hätte und aus den VD-Rip-Settings werde ich leider nicht schlau. ;)

Ich konnte mit dem Script auch cartoonlike Videos zufriedenstellend komprimieren, habe es mit ein paar Animes getestet. Verglichen hab ich die Bildqualität nur mit dem reencode-script aus dem Archiv, was mir bis dato die besten Ergebnisse geliefert hatte.


Gruß, Loxi
 
Fahre morgen, also in 6stunden auf klassenfahrt nach england für eine woche.
Deshalb will ich natürlich meinen gp2x mit filmchen füttern.

Jedoch habe ich keine Ahnung, wie ich das script ausführen muss, das es ein video meiner festplatte verändert.

Kann mir jmd (möglichst schnell) helfen?

Gruss:)
 
Hmm, sorry, mein letzter post war ein bisschen missverständlich -_- .
Ich habe mir gleich das Video angeschaut (am PC) und es war sehr gut!! Die Farben sind zwar hin und wieder verschwommen, ich konnte aber die Quali erahnen :wink: .
In eine (text)DAtei kopieren und das dann in einem terminal starten. Dann kommt auch ne Nachricht wie man es benutzt.
Werde ich gleich mal testen, ob ich dass auch hinkriege ......

Gruß,
Käse
 
Back
Top