Skip to content

mit ffmpeg Videos für und von Handys (und Digitalkameras) wandeln

Linux

Unheimlich praktisch, aber mehr als Notiz für mich selbst:
Mit diesem Aufruf wandelt man via ffmpeg1 einen Film (Datei, nich DVD) ins 3GP Format für Handys um. Ist nur eine Zeile, der Shebang dient der Bequemlichkeit, so lässt sich der Aufruf bequem als Skript2 speichern.

#!/bin/bash
ffmpeg -i “$1” -f 3gp -vcodec h263 -qmin 5 -qmax 8 -b 120 -r 18 -acodec libamr_nb -ar 8000 -ab 12.2k -ac 1 -s 176×144 “$2.3gp”
gespeichert als 3gp-encoder.sh ruft man es auf mit 3gp-encoder.sh <Quellvideo> <Handyversion> also z.B. 3gp-encoder.sh Mallorcaurlaub.avi Malle. Die Endung .3GP wird automatisch angehängt damit man sie nicht vergisst.
Die Auflösung ist hier 176×144 Pixel, das ist die passende Auflösung von vielen Sony Ericsson (und vermutlich anderen) Handys (176×200, also volle Breite), sieht aber auch auf meinem P1i auf 320×240 gezoomt gut aus. Solange die Qualität in Ordnung ist empfehle ich eine niedrige Auflösung um Platz zu sparen. Die Filme die hiermit erzeugt werden brauchen etwa 1,2MB pro Minute.
Weiter mögliche Auflösungen sind 128×96, 176×144, 352×288, 704×576, und 1408×1152, wobei die letzten beiden praktisch wohl kaum für Telefone nötig sind.
Spielen kann man vor allem noch mit den Bitraten -(a)b und den Bilderns pro Sekunde (-r), hier 18, aber natürlich sind auch alle weiteren Parameter variabel, die manpage zu ffmpeg verrät mehr.
Diese Einstellungen sind nach meiner Erfahrung passend für die meissten Filme, Ausnahmen erledigt man eher mit einem individuell angepassten Aufruf statt es im Script selbt zu ändern.

Vermutlich gibt es ffmpeg auch für MacOS X und evtl. auch als cygwin-Version für Windows, dann geht das auch dort


Nachtrag: aufgrund Sams Nachfrage hier noch der Weg in die andere Richtung, aus einem mit dem Handy aufgenommenen Video ein auf dem PC gebräuchlicheres Format machen:
Dies ist mit ffmpeg auch recht einfach, nach dem Schema ffmpeg -i handyvideo.3gp -f <format> -vcdodec <video-codec> -acodec <audio-codec>. Ggf. sind noch weitere Parameter für die jeweiligen Codecs nötig, ich habe testweise ein Video meines P1i mit folgendem Aufruf gewandelt:
ffmpeg -i DSC00140.3GP -f avi -vcodec mpeg4 -r 24 -acodec mp2 -ar 22050 test.avi
Ausgabeformat (Container) avi, Videocodec mpeg4 und Audiocodec mp2 (mp3 unterstützt mein ffmpeg nur beim decodieren).
Da die Framerate beim ersten Versuch 1000 und das resultierende Video nur 2 Sekunden lang war habe ich die Framerate mit ‘-r 24’ auf 24 festgelegt. Da der Ton im Handyvideo mit 8kBit aufgenommen war was mp2 nicht unterstützt habe ich ihn mit ‘-ar 22050’ auf 22kBit wandeln lassen. Diese Einstellungen werden aber von Handy zu Handy variieren. Als Videocodec hätte ich auch einfach ‘copy’ angeben können da mein Handy schon in mpeg4 aufzeichnet.
Eine Übersicht der vom installierten ffmpeg unterstützten Formate bekommt man mit ffmpeg -formats. Die Buchstaben in der ersten Spalte zeigen die Möglichkeiten: D für decodieren, E für encodieren, A ist ein Audiocodec, V ein Videocodec.
Man kann so z.B. auch die Filme der Digitalkamera (meist MJPEG als Videocodec) in etwas sinnvolleres wandeln

(Titel des Artikels dem erweiterten Inhalt angepasst)

____

1 ffmpeg braucht dafür Support für die Codec amr und h263 (plus dem Eingangformat), unter Gentoo werden diese mit USE=“amr h263” aktiviert

2 die Bezeichnung “Skript” ist ein wenig übertrieben für nur eine Zeile aber mir fällt grad nicht apssenderes/genaueres ein.