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
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:
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