====== ffmpeg ======
===== Video transcodieren (Auflösung und Dateigröße kleiner machen) =====
==== mit h264 ====
ffmpeg -i video_1920x1080.mp4 -vf scale=-1:720 -c:v libx264 -crf 18 -preset veryslow -c:a copy video_1280x720.mp4
* -i = input file
* -vf = videofilter, in diesem Fall wird scale verwendet, -1 bedeutet proportional verändert
* -c:v = video codec, in diesem Fall h264
* -crf = Qualitätsstufe: 0 ist lossless und 52 stärkste Kompression
* -preset = wirkt sich auch auf die Qualität aus
* -c:a audio codec, bei copy wird er übernommen
==== HEVC, h265 2pass-Kodierung ====
ffmpeg -y -i input.mp4 -c:v libx265 -b:v 2600k -x265-params pass=1 -an -f null /dev/null && \
ffmpeg -i input.mp4 -c:v libx265 -b:v 2600k -x265-params pass=2 -c:a copy output.mp4
==== libaom AV1 2 pass-Kodierung====
Leider ist die AV1-Kodierung auf einem Standard-Notebook oder Office-PCs unglaublich langsam und daher unrealistisch (Stand 01/2023). Ohne effektive GraKa kommt man danicht weiter.
ffmpeg -i input.mp4 -c:v libaom-av1 -b:v 2M -pass 1 -an -f null /dev/null && \
ffmpeg -i input.mp4 -c:v libaom-av1 -b:v 2M -pass 2 -c:a libopus output.mkv
unter Windows
ffmpeg.exe -i input.mp4 -c:v libaom-av1 -b:v 2M -pass 1 -an -f null NUL &&
ffmpeg.exe -i input.mp4 -c:v libaom-av1 -b:v 2M -pass 2 -c:a libopus output.mkv
* -i = input file
* -c:v = video codec hier AV1 (sehr, seeehr langsam)
* -b:v = video Bitrate bei ca 2 MB
* -pass 1 = erster Durchgang
* -pass 2 = zweiter Durchgang
* -an = Audio auslassen (im ersten Durchgang) "audio none"
* -f = format
* null /dev/null [Linux] = Null Muxer (ohne Datei-Ausgabe), null NUL[Windows]
* -c:a libopus = audio codec opus
===== video/audio-delay korrigieren =====
Fall 1: audio beginnt vor video (150 ms = 0.15 s)
ffmpeg -i video.mp4 -itsoffset 0.150 -i video.mp4 -c:v copy -c:a copy -map 0:0 -map 1:1 video_insync.mp4
Fall 2: video beginnt vor audio (150 ms = 0.15 s)
ffmpeg -i video.mp4 -itsoffset 0.150 -i video.mp4 -c:v copy -c:a copy -map 0:1 -map 1:0 video_insync.mp4
===== videos zusammenführen (concatenate) =====
ffmpeg -f concat -safe 0 -i liste.txt -c copy OUT.mp4
wobei liste.txt unter Windows
file 'd:/videos/t1.mp4'
file 'd:/videos/t2.mp4'
===== video schneiden =====
ffmpeg -i in.mp4 -ss [start] -t [dauer] -c copy out.mp4
oder
ffmpeg -i in.mp4 -ss [start] -to [bis-zum-zeitpunkt] -c copy out.mp4
===== audio file einem video hinzufügen =====
ffmpeg -i IN-video-mit-EN-tonspur.mp4 \
-i audio-DE.m4a \
-c copy \
-map 0:v:0 \
-map 0:a:0 \
-map 1:a:0 \
-metadata:s:a:0 language=eng \
-metadata:s:a:1 language=deu \
OUT-video-EN-DE.mp4
Das ''mapping'': Datei ''0'' ist das Video, Datei ''1'' die deutsche Audiospur und schreibt die Metadaten der Sprache mit hinein, damit man bei switchen im Video die entsprechende Tonspur angezeigt bekommt
===== Links =====
* [[https://trac.ffmpeg.org/wiki/Encode/H.264|h264-encoding guide]]
* [[https://trac.ffmpeg.org/wiki/Encode/AV1|libaom AV1 Encoding Guide]]
* [[https://ffmpeg.app|ffmpeg wasm-version for using online]]
==== videoformate 16:9 ====
Recommended width and height for videos with 16:9 aspect ratios:
Best Choice: 2nd Best: 3rd Best:
Multiples of 16 Multiples of 8 Multiples of 4
1920 x 1080 1792 x 1008 1856 x 1044
1280 x 720 1152 x 648 1216 x 684
1024 x 576 896 x 504 1088 x 612
768 x 432 640 x 360 960 x 540
512 x 288 384 x 216 832 x 468
256 x 144 128 x 72 704 x 396
576 x 324
448 x 252
320 x 180
192 x 108
===== Transkodieren mit allen Streams =====
entscheidend ist ''-map 0'', das alle streams einbindet
ffmpeg -i input.mkv -c copy -map 0 output.mp4
oder mit h264 transcode-Einstellungen
ffmpeg \
-analyzeduration 100M -probesize 100M \
-i input.mkv \
-map 0 \
-codec:v libx264 -crf 21 \
-codec:a aac -b:a 384k \
-codec:s copy \
output.mp4
===== Untertitel einbinden =====
ffmpeg -i infile.mp4 -i infile.srt -c copy -c:s mov_text outfile.mp4