WerkzeugKisteFFmpeg

FFmpeg-spezifische Befehle, ausgelagert aus der WerkzeugKiste.

Inhalt

Weitere Doku, Quellen, etc.

Offizielle Doku: https://ffmpeg.org/ffmpeg.html

Liste nützlicher FFmpeg-Befehle

Mehrere Audio-Spuren kopieren

Standardmäßig kopiert ffmpeg nur eine Ton- und Videospur

Mit -map 0 wird "alles" aus der Eingabedatei übernommen.
ffmpeg -i input.mp4 -map 0 output.mp4

Vorhandene Metadaten entfernen

ffmpeg -i file_in.mp4 -map_metadata -1 -c copy file_out.mp4

Compressor und Normalisierung

ffmpeg -i input.mp4 -af acompressor=threshold=-21db:ratio=3:attack=200:release=1000 -af loudnorm=I=-30:LRA=7:TP=-1.5 -ar 48000 output.mp4

Audio Fadeout

Beispiel: Ausblend-Effekt auf die letzten 10 Sekunden eines 65 Sekunden langen Videos:
  • t = "in" oder "out"
  • st = start
  • d = duration
ffmpeg -i input.mp4 -af afade=t=out:st=55:d=10 output.mp4

Stereo-Ton zu Mono konvertieren

ffmpeg -i video.mp4 -ac 1 -c:v copy video-mono.mp4

Besser (ansonsten Clipping möglich):

ffmpeg -i video.mp4 -ac 1 -af "volume=-2.7dB" -c:v copy video-mono-noclipping.mp4

5.1 zu Stereo konvertieren

ffmpeg - i INFILE.mkv -ac 2 -af "pan=stereo|FL=0.5*FC+0.707*FL+0.707*BL+0.5*LFE|FR=0.5*FC+0.707*FR+0.707*BR+0.5*LFE" outfile.mp4

Siehe auch: https://superuser.com/questions/852400/properly-downmix-5-1-to-stereo-using-ffmpeg

Audioqualität einstellen

Beispiel: Auf Mono reduzieren und 64 kbps cbr mit internem aac kodierer:
ffmpeg -i video.mp4 -c:a aac -b:a 64k -ac 1 -c:v copy video-mono-aac-64kbps.mp4

Hinweis: "aac_he" (statt "aac") liefert bessere Qualität, ist aber nur für Stereo geeignet.

Zusätzliche Tonspur und Namensgebung

Quelle: https://superuser.com/questions/834244/how-do-i-name-an-audio-track-with-ffmpeg
ffmpeg -i video.mp4 -i audio-extra.wav -c:v copy -map 0:v -map 0:a -map 1:a -metadata:s:a:0 title="One" -metadata:s:a:1 title="Two" -shortest video-with-additional-audio.mp4

Standardtonspur einstellen

Hierzu dient die Option "-disposition:a:x default". Befehl sonst wie oben:
ffmpeg -i video.mp4 -i audio-extra.wav -c:v copy -map 0:v -map 0:a -map 1:a -metadata:s:a:0 title="One" -metadata:s:a:1 title="Two" -disposition:a:1 default -disposition:a:0 none -shortest video-with-additional-audio.mp4

Quelle: https://video.stackexchange.com/questions/29467/change-default-audio-track-of-video-file-using-ffmpeg

Tonspur überschreiben

ffmpeg -i video.mp4 -i audio-neu.wav -c:v copy -map 0:v:0 -map 1:a:0 -shortest audio-replaced.mp4

Equalizer / Audiofilter

ffmpeg -i input.wav -af "equalizer=f=440:width_type=o:width=2:g=5,equalizer=f=1000:width_type=h:width=200:g=-10" output.wav

Quelle: https://superuser.com/questions/695843/how-to-use-equalizer-on-ffmpeg

Video und Audio zusammenführen

ffmpeg -i video.mp4 -i audio.aac -c copy -shortest combined.mp4

Zusammenführung mit Konvertierung

ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -shortest combined.mp4

Quelle und weitere Detailinfos: https://superuser.com/questions/277642/how-to-merge-audio-and-video-file-in-ffmpeg

Framerate ändern

Um die Framerate (sinnvoll) zu ändern braucht es zwei Befehle.

Beispiel: Framerate von 29.97 fps auf 60 fps verdoppeln und Videolaufzeit verkürzen (Zeitraffer-Video ohne Ton):
  • -r 60
    Setzt die Framerate auf 60 Bilder pro Sekunde fest
  • -filter:v "setpts=0.49933*PTS"
    Ändert die Zeitstempel der einzelnen Frames Die Zahl 0.49933 ergibt sich aus dem Verhältnis der alten zur neuen Framerate (29.97 / 60)
Vollständiger Befehl:
ffmpeg -i MVI_1234-30fps.mov -r 60 -filter:v "setpts=0.49933*PTS" ausgabe-60fps.mp4

Qualität / Bitrate einstellen

Option:
  • -crf N
Der Standard für N ist 23. Niedrigere Zahlen liefern bessere Qualität. Empfehlung: 18 bis 20.

Beispielbefehl:
ffmpeg -i MVI_1234-30fps.mov -r 60 -filter:v "setpts=0.49933*PTS" -crf 18 ausgabe-60fps.mp4

Rotation um 90°

Nur das Flag setzen / löschen

ffmpeg -i input.mp4 -map_metadata 0 -metadata:s:v rotate="90" -codec copy output.mp4

Auflösung verändern / skalieren

Quelle: https://trac.ffmpeg.org/wiki/Scaling
ffmpeg -i input.avi -vf scale=320:240 output.avi

Typische Auflösungen 16 zu 9:
  • 2560 x 1440
  • 1920 x 1080
  • 1600 x 900
  • 1280 x 720
  • 1152 x 648
  • 960 x 540
  • 854 x 480 (nicht exakt)
  • 768 x 432
  • 640 x 360
  • 576 x 324
  • 480 x 270
  • 424 x 240

Bildausschnitt wählen (crop)

Quelle: https://codepre.com/ffmpeg-how-to-crop-video-by-example.html
ffmpeg -i input.mp4 -filter:v "crop=w:h:x:y" -c:a copy output.mp4

w: breite
h: höhe
x: Position von links gemessen
y: Position von oben gemessen

Zeitausschnitt wählen (von bis)

ffmpeg -i input.mp4 -ss 5 -t 100 output.mp4

ss: Ab Zeitpunkt (5 Sekunden)
t: Dauer (100 Sekunden)

Format der Zeitangaben: [-][<HH>:]<MM>:<SS>[.<m>...]
Quelle: man ffmpeg-utils

Spuren entfernen

  • Untertitelspur entfernen: -map -0:s
  • Datenspur löschen: -map -0:d
ffmpeg -i Input.mkv -crf 23 -ac 2 -b:a 160k -acodec aac -map 0 -map -0:s -map -0:d -map_chapters -1 Output.mp4

Standard-Untertitel deaktivieren

Standardmäßig erzeugt ffmpeg nur eine Video- und Audiospur, deswegen müssen die Spuren explizit kopiert werden.

Beide Optionen sind erforderlich:
  • -default_mode infer_no_subs
  • -disposition:s:0 0
ffmpeg -i Input.mkv -map 0:a -map 0:v -map 0:s -c copy -default_mode infer_no_subs -disposition:s:0 0 Output.mkv

Dateien aneinander hängen (concat)

Quellen: Einfache Variante:

Zunächst eine Datei 'liste.txt' (oder anderer Dateiname) mit den Dateinamen der Eingabevideos nach folgendem Schema erstellen:
file 'teil1.mp4'
file 'teil2.mp4'
file 'teil3.mp4

Dann folgenden ffmpeg-Befehl aufsühren:

ffmpeg -f concat -i liste.txt -c copy ausgabe.mp4

Timecode einfügen

ffmpeg -i INPUT.mp4 -vf drawtext="fontsize=15:fontfile=/Library/Fonts/DroidSansMono.ttf:\<br />timecode='00\:00\:00\:00':rate=29.97:text='TCR\:':fontsize=48:fontcolor='white':\<br />boxcolor=0x000000AA:box=1:x=10:y=10" OUTPUT.mp4

Mit Positionierung des Timecode unten in der Mitte für ein 720p-Video. Die Koordinaten werden von oben links angegeben.

ffmpeg -i INPUT.mp4 -vf scale=854x480 -crf 23 -vf drawtext="fontsize=15:fontfile=/Library/Fonts/DroidSansMono.ttf:\<br />timecode='00\:00\:00\:00':rate=30:text='TCR\: ':fontsize=48:fontcolor='white':\<br />boxcolor=0x000000AA:box=1:x=640-text_w/2:y=670" OUTPUT.mp4

Werte für 1080p: x=960...y=1020

Werte für 480p: x=427...y=430

Quelle: https://linux.goeszen.com/how-to-do-a-timecode-overlay-with-ffmpeg.html

Anzahl der Frames ermitteln

ffprobe -v error -select_streams v:0 -show_entries stream=nb_frames -of default=nokey=1:noprint_wrappers=1 INPUTFILE

Siehe auch

  • Andere Topics und online-Links
Topic-Revision: r4 - 04 Mar 2024, EinExperte
Diese Seite läuft auf FoswikiDas Urheberrecht © liegt bei den mitwirkenden Autoren. Alle Inhalte dieser Kollaborationsplattform sind Eigentum der Autoren.
Ideen, Anfragen oder Probleme bezüglich bitmuehle wiki? Feedback senden