ffmpeg

Hier eine kleine Übersicht für ffmpeg mit den verschiedenen Parametern.

Parameter:

  • -i → Inputvideo
    -acodec → Ausgangscodec für Audiospur
    -ac → Audiokanäle
    -ar → Audiosamplerate
    -ab → Audiobitrate
    -vcodec → Ausgangscodec für Videospur
    -b → VideoBitrate
    -r → Framerate Outputvideo
    -s → Seitenverhältnis
    -ss → 00:01:00 Die erste Minute überspringen
    -t → 00:01:30 1m30s des Films bearbeiten


Zu einem bestehenden Video (film.avi) eine neue Tonspur (ton.ac3) hinzufügen.

ffmpeg -i film.avi -i ton.ac3 -vcodec copy -acodec copy film.mit.ac3.avi -acodec copy -newaudio

Hierbei wird die Videospur nicht erneut encodiert, sondern nur gemuxt. (zusammengeführt)

Bei einer 6-Kanal-Tonspur gab es bei mir ein paar Probleme. Wenn die untere Fehlermeldung beim Abspielen im VLC kommen sollte, muß der Container gewechselt werden. Vielleicht gibt es noch eine andere Möglichkeit oder es wird in den kommenden ffmpeg-Versionen gefixt. Für mich ist das aber im Moment die schnellste Variante.

Kein passendes Decodierungsmodul:
VLC unterstützt das Audio- oder Videoformat „undf“ nicht. Leider können Sie daran nichts ändern.

Mit dem Befehl wird eine ac3 5.1 Audiospur zu einem bestehenden avi Video mit Tonspur hinzugefügt und der Container wird von avi auf mp4 geändert.

ffmpeg -i film.avi -i ton.ac3 -f mp4 -vcodec copy -acodec copy film.mit.ac3.mp4 -acodec copy -newaudio

Video nach mp4 codieren. (iPhone kompatibel)

ffmpeg -i ./sample.avi -acodec libfaac -ac 2 -ar 44100 -ab 128k -vcodec mpeg4 -b 1200k -mbd 2 -cmp 2 -subcmp 2 -s 320:178 ./final.iphone.mp4

ffmpeg.puttyVorher mit ffmpeg -i ./sample.avi das aktuelle Seitenverhältnis herausfinden und merken. Ihr könnt die Pixel (624×352) benutzen oder ihr nehmt DAR 39:22. Es wird also 22 / 39 * 320 gerechnet. Das iPhone hat eine Auflösung von 960 x 640 Pixel. Als Auflösung wähle ich immer 320, 640 oder 960. Bei dieser Rechnung kommt 180,51 raus, also benutzen wir den Parameter -s 320:180 bei den anderen Auflösungen dann 640:360 bzw. 960:540.

Video nach mov codieren. (wird von Quicktime erkannt und funktioniert auch auf dem MAC)

ffmpeg -i sample.mpg -vcodec mpeg4 -b 1500k -f mov sample.mov

Hier wird nur das Videomaterial umgewandelt, Ton bleibt unverändert. Für den Ton sollte man die unteren Einstellungen benutzen.

ffmpeg -i sample.mpg -vcodec mpeg4 -b 1500k -acodec libfaac -ac 2 -ar 44100 -ab 128k -f mov sample.mov

Video nach mkv codieren.
Meine Digicam eine Canon Digital IXUS 100 IS nimmt Videos im mov-Format auf. Da die Videos sehr groß sind, bringe ich sie in ein anderes Format. Erst wollte ich die Filme in avi umwandeln, aber die Auflösung war zu groß. Ich wollte aber so wenig wie möglich an den Videos rumrechnen, da ich sie später noch in einem Schnittprogramm verarbeiten will. Deshalb habe ich mich für mkv als Videocontainer mit mp3lame als Audiocodec entschieden. Hier kann ich die Auflösung und den Codec so lassen wie sie sind und habe die wenigsten Verluste. Bei dem Ton hab ich mich für mp3lame entschieden, da meine Kammera eh nur mono aufnimmt.

ffmpeg -i mvi_xxxx.mov -f matroska -vcodec copy -acodec libmp3lame -ac 1 -ar 44100 -ab 192 ./mvi_xxxx.mkv

Eine bestimmte Audiospur extrahieren und/oder umwandeln.
ffmpeg.mapoptionDie -map Option ist nur nötig, wenn es mehrere Audiospuren in einem Videocontainer gibt. Oft ist die 0:0 für die Videospur und die anderen für die Audiofiles. Ich hatte es aber auch schon das 0:0 die Subtitel waren und es bei 0:1 mit Video weiter ging. Einfach kontrollieren.
In dem unteren Code wird die erste mp2 Audiospur einfach gespeichert oder gleich in wav bzw. in mp3 konvertiert. Der Parameter -sn steht für disable Subtitel und -vn steht für disable Video.

ffmpeg -i sample.ts -sn -vn -map 0:1 -acodec copy sample.mp2
ffmpeg -i sample.ts -sn -vn -map 0:1 -acodec pcm_s16le -ac 2 -ab 192k sample.wav
ffmpeg -i sample.ts -sn -vn -map 0:1 -acodec libmp3lame -ab 192k sample.mp3

Wenn man nur eine Tonspur hat kann man auch folgenden Code verwenden.

ffmpeg -i sample.ts -sn -vn -acodec copy sample.mp2

Die Ausgabeformate und auch die Bitraten sollte man sich aus der ersten Info (ffmpeg -i sample.ts) entnehmen.

Audiofile in MP3 codieren

ffmpeg -i audio.wav -acodec libmp3lame -ar 44100 -ab 160k audio.mp3

Die Ausgabe ist dann 160Kbit/44,1KH MP3.

MP3 Dateien aneinander hängen.
Mit einer der beiden Varianten die verschiedenen Audiofiles zusammenführen.

cat audio1.mp3 audio2.mp3 audio3.mp3 > audio.mp3
cat audio{1-3}.mp3 > audio.mp3

Anschließend mit ffmpeg den Dateiheader neu schreiben.

ffmpeg -i audio.mp3 -acodec copy audio.final.mp3

Audiofile für eine Elmeg Telefonanlage konvertieren.
Die original Files der Telefonanlage waren mit pcm_alaw, 8000 Hz, mono, s16, 64 kb/s codiert. Jetzt brauchen wir nur ein Audiofile ins gleiche Format bringen.

ffmpeg -i sample.m4a -acodec pcm_alaw -ar 8000 -ab 64k sample.elmeg.wav

Videobearbeitung XVID-avi mit dem 2-Pass Verfahren.
Hier versuche ich einen kleinen Ablauf für die Konvertierung in ein Video im XVID-Container zu geben. Mein Ausgangsmaterial ist mit einer Dreambox 8000 aufgenommen worden. Ist aber eigentlich egal, das Ergebnis ist wichtig. 🙂

# audio extrahieren
ffmpeg -i sample.ts -vn sample.audio.mp2

# Ton umrechnen
ffmpeg -i sample.audio.mp2 -acodec libmp3lame -ab 192k sample.mp3

# Die ersten 2 Schritte kann man eventuell auch zusammenfassen
ffmpeg -i sample.ts -sn -vn -acodec libmp3lame -ab 192k sample.mp3

# Video umrechnen ohne Ton 2 Durchggänge
ffmpeg -i sample.ts -y -pass 1 -f avi -vcodec libxvid -vtag XVID -aspect 16:9 -b 1200k -an sample.out.ohne.ton.avi && ffmpeg -i sample.ts -y -pass 2 -f avi -vcodec libxvid -vtag XVID -aspect 16:9 -b 1200k -an sample.out.ohne.ton.avi

# Bild und Ton wieder zusammenführen -async 50 ist für die Ton/Bildsynchronisation da.
ffmpeg -i  sample.out.ohne.ton.avi -i sample.audio.mp3 -vcodec copy -acodec copy -async 50 sample.avi

Der folgende Code muß noch richtig getestet werden. Bei mir hat er mit einem kleinen Testfile ca. 3min ganz gut funktioniert. Hier wird aber nur das Videomaterial neu gerechnet, Audio bleibt wie es ist. War bei dem Test aber nicht so kritisch, da im Digitalfernsehen der Stereoton in mp2 vorliegt. Da gewinnt man nicht so viel Speicherplatz wie bei wav (DVD).

ffmpeg -i sample.ts -y -pass 1 -f avi -vcodec mpeg4 -vtag XVID -aspect 16:9 -b 1200k -acodec copy -async 50 sample.out.avi && ffmpeg -i sample.ts -y -pass 2 -f avi -vcodec mpeg4 -vtag XVID -aspect 16:9 -b 1200k -acodec copy -async 50 sample.out.avi

Video direkt auf dem iPhone umwandeln.
Hier bin ich noch am testen, ich hätte gern eine Einstellung die einen guten Kompromiss zwischen Geschwindigkeit und Größe darstellt.

ffmpeg -i  bilder/IMG_0676.MOV -y -pass 1 -f avi -vcodec mpeg4 -vtag XVID -aspect 16:9 -r 25 -s 640:360 -b 1000k -acodec copy -async 50 sample.out.avi && ffmpeg -i  bilder/IMG_0676.MOV -y -pass 2 -f avi -vcodec mpeg4 -vtag XVID -aspect 16:9 -r 25 -s 640:360 -b 1000k -acodec copy -async 50 sample.out.avi
ffmpeg -i  bilder/IMG_0676.MOV -y -f avi -vcodec libx264 -aspect 16:9 -r 25 -s 480:272 -b 800k -acodec copy -async 50 sample.out1.avi

Bei dem zweiten Code ist das Video auf ca 10% geschrumpft. (von 9,2MB auf 923KB)

ffmpeg -i  bilder/IMG_0675.MOV -y -pass 1 -aspect 16:9 -r 25 -mbd rd -s 480:272 -b 800k -ab 64k -async 50 IMG_0675.mp4 && ffmpeg -i  bilder/IMG_0675.MOV -y -pass 2 -aspect 16:9 -r 25 -mbd rd -s 480:272 -b 800k -ab 64k -async 50 IMG_0675.mp4

erster Durchgang:
real    16m22.302s
user    13m24.637s
sys     0m0.000s
zweiter Durchgang:
real    15m27.776s
user    13m22.950s
sys     0m0.000s

Dreamboxaufnahmen in ein anderes Format umwandeln.
ffmpeg.putty tsIn diesem Beispiel ist die erste Tonspur stereo de und die dritte ac3 de.
Jetzt muß noch das Format gewählt werden und dann kann es schon los gehen.
Für ein Telefon oder ein Tablet sollten eigentlich 800×480 reichen. Wenn ich richtig gelesen habe ist das die Displayauflösung des Galaxy SII.

ffmpeg -i sample.ts -sn -vn -map 0:1 -acodec copy sample.mp2  # erste Tonspur wählen –Stream #0.1[0x781](ger): Audio: mp2–

ffmpeg -i sample.ts -sn -vn -map 0:3 -acodec copy sample.ac3   # dritte Tonspur wählen –Stream #0.3[0x783](ger): Audio: ac3–

# Video im 2pass Verfahren in ein XVID umrechnen. Auflösung [PAR 1:1 DAR 16:9] ist 16:9
ffmpeg -i sample.ts -y -pass 1 -f avi -vcodec libxvid -vtag XVID -aspect 16:9 -r 25 -s 800:450 -b 1200k -an sample.out.ohne.ton.avi && ffmpeg -i sample.ts -y -pass 2 -f avi -vcodec libxvid -vtag XVID -aspect 16:9 -r 25 -s 800:450 -b 1200k -an sample.out.ohne.ton.avi

# Audio und Video zusammenführen. Wenn nur eine Tonspur gewünscht wird, dann einfach das -i sample.* weglassen.
ffmpeg -i  sample.out.ohne.ton.avi -i sample.mp2 -i sample.ac3 -vcodec copy -acodec copy -async 50 sample.avi

 

2 Kommentare zu „ffmpeg“

  1. Hallo!
    Auf der Suche nach geeigneten Commandlinetools zum Konvertieren meiner DM8000 Aufnahmen (DVB-S und S2) bin ich auf deinen Blog gestoßen. Ich quäle mich auf einem Debian-Linuxserver mit mencoder und jetzt auf mit ffmpeg meine Aufnahmen in ein Format zu bringen, dass ich dann auf meinem Smartphone (Galaxy S2) und/oder Android-Tablet unterwegs abspielen kann.
    Hättest du da ein paar Tips für mich?
    Ich hab schon das Problem die richtige Audiospur mit mencoder zu identifizieren. Gibt es dafür ein tool oder gewisse Regeln?
    Würde mich über eine Antwort sehr freuen!
    Danke und schönes Wochenende!

    1. Kleiner Tipp zum umrechnen, nimm mit der Box am besten einen kleines Stück Film auf, ca 10-30s und teste deine Einstellungen an diesem File. 
      Wenn defekte avi’s entstehen, dann schau dir mal ProjektX an. Dieses Programm hatte ich früher um meine D-Box Aufnahmen auf meinen PC zu bekommen. Dabei wurden schon verschiedene Fehler im Stream beseitigt. So oft rechne ich DVB-Aufnahmen nicht mehr um, daher fehlt mir da die Praxis. Aber das was ich bis jetzt gemacht hab, hat eigentlich immer funktioniert, auch ohne ProjektX.

Kommentarfunktion geschlossen.