Dienstag, 13. November 2007

flv nach 3gp konvertieren

Um Videos von youtube usw. auf das Handy zu bringen ist es notwendig diese in das 3gp-Format zu konvertieren.

Die Software ffmpeg liefert da unter Linux all die notwendigen Programme.


Mit dem Kommando:


$ mencoder ~/The_Switch_-_Vancouver_Film_School__VFS_.flv \
-nosound -ovc lavc -lavcopts vcodec=mpeg4 \
-vf expand=176:144,scale=176:144 -o ~/tmp/cube.avi -ofps 12


wandeln man z.B. den Film The_Switch_-_Vancouver_Film_School__VFS_.flv in das avi-Format um in der für das Handy notwendigen Größe.

Der avi-Film wird unter dem Namen cube.avi im ~/tmp-Verzeichnis abgelegt.


Anschließend holt man die Audiodaten aus der Originaldatei, die Audiodaten werden in der Datei audiodump.wav abgespeichert, diese Datei liegt in dem Verzeichnis in dem das Kommando gestartet wurde:

$ cd ~/tmp
$ mplayer -vo null -ao pcm -af resample=8000,volume=+4db:sc \ ~/The_Switch_-_Vancouver_Film_School__VFS_.flv

Im ~/tmp-Verzeichnis findet sich die Datei audiodump.wav.
Nun werden die avi-Datei und die wav-Datei zusammengeführt:

$ ffmpeg -i ~/tmp/cube.avi -i ~/tmp/audiodump.wav -b 48000 \
-ac 1 -ab 12200 -map 0.0 -map 1.0 \
~/tmp/The_Switch_-_Vancouver_Film_School__VFS_.3gp


Als Ergebnis erhälten man die Datei ~/tmp/The_Switch_-_Vancouver_Film_School__VFS_.3gp, die nun aufs Handy kopiert werden kann um sie dort abzuspielen.

Will man nicht immer so lange Kommandozeilen eingegeben, kann man die Arbeit auch einem Shellscript überlassen.

Als Beispiel folgt ein Shellscript, dem man beim Aufruf den Namen des zu konvertierenden Flash-Files übergibt, d.h. wenn das Shellscript unter dem Namen flv23gp.sh abgespeichert wurde und das Flash-File den Namen The_Switch_-_Vancouver_Film_School__VFS_.flv hat und im Homeverzeichnis liegt so lautet der Aufruf:

./flv23gp.sh The_Switch_-_Vancouver_Film_School__VFS_.flv

Läuft das Shellscript fehlerlos durch so findet man die Datei The_Switch_-_Vancouver_Film_School__VFS_.3gp im Verzeichnis ~/tmp.

------------------------------------------------------------------------------------------------------------------------------------
#!/bin/bash

DATEI=$1

NAME=${DATEI##*/}
BASENAME=${NAME%%.*}
EXTENSION=${NAME##*.}

mkdir ~/tmp >/dev/null 2>&1

rm -f ~/tmp/movie.avi

rm -f ~/tmp/audiodump.wav

mv $DATEI ~/tmp

cd ~/tmp

mencoder ~/tmp/$NAME -nosound -ovc lavc -lavcopts vcodec=mpeg4 \
-vf expand=176:144,scale=176:144 -o ~/tmp/movie.avi -ofps 12


mplayer -vo null -ao pcm -af resample=8000, \
volume=+4db:sc ~/tmp/$NAME


ffmpeg -i ~/tmp/movie.avi -i ~/tmp/audiodump.wav -b 48000 \
-ac 1 -ab 12200 -map 0.0 -map 1.0 ~/tmp/$BASENAME.3gp


rm -f ~/tmp/movie.avi
rm -f ~/tmp/audiodump.wav

exit 0

------------------------------------------------------------------------------------------------------------------------------------

Weitere Links zum Nachlesen:
http://kanotix.wordpress.com/2006/08/17/video-in-3gp-umwandeln-fur-mobiltelephone/
http://www.niemueller.de/wiki/?ConvertVideoTo3GP
http://www.xmedia-recode.de/hilfe/3gp.html

PS: Verbesserungen in der Filmqualität können eventuell mit folgenden geänderten Optionen erreicht werden (geänderte Werte sind in roter Farbe gehalten):
mencoder QUELLDATEI.avi -nosound -ovc lavc -lavcopts \
vcodec=mpeg4 -vf expand=176:144,scale=176:144 \
-o movie.avi -ofps 16


ffmpeg -i movie.avi -i audiodump.wav -b 96k -ac 1 \
-ab 12200 -map 0.0 -map 1.0 filmout.3gp

127.0.0.1