| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung |
| ffmpeg [2025-11-20 12:28] – [Videostream für 1 Stunde ohne reencoding] fzap | ffmpeg [2026-03-17 18:25] (aktuell) – fzap |
|---|
| ffmpeg - i input.mp4 -c:v libsvtav1 -vf format=yuv420p10le -preset 6 -crf 23 -g 30 output.mkv | ffmpeg - i input.mp4 -c:v libsvtav1 -vf format=yuv420p10le -preset 6 -crf 23 -g 30 output.mkv |
| </code> | </code> |
| | |
| | ==== AV1-Kodierung mit libsvtav1 nach sebsauvage's Anleitung ==== |
| | |
| | siehe [[https://sebsauvage.net/wiki2/doku.php?id=ffmpeg&s[]=ffmpeg#re-encodage_en_av1]] |
| | |
| | <code bash> |
| | ffmpeg -i input.mkv -map 0:v -c:v libsvtav1 -preset 4 -crf 30 -tune 0 -pix_fmt yuv420p10le -g 120 -map 0:a? -c:a copy -map 0:s? -c:s copy out.mkv |
| | </code> |
| | |
| | * ''-i input.mkv'' input-Name der Eingabedatei. |
| | |
| | * ''-map 0:v -c:v libsvtav1'' es wird der svt-av1-Encoder verwendet. svt-av1 ist schnell |
| | |
| | * ''-crf 30'' Komprimierungsrate. Der CRF ist die gewünschte visuelle Qualität (die Videobitrate ist daher variabel, um eine konstante visuelle Qualität aufrechtzuerhalten. Ein niedrigerer Wert bedeutet bessere Qualität, aber eine größere resultierende Datei. Oberhalb von 36 beginnt die Qualität recht schnell zu sinken. |
| | |
| | * ''-tune 0 ''Um eine konstante Qualität zu erreichen, benötigt man einen Algorithmus, der diese Qualität misst. Durch das Hinzufügen dieser Option wird ein Algorithmus ausgewählt, der dem menschlichen Sehverhalten näher kommt. |
| | |
| | * ''-preset 4'' Der svt-av1-Codec verfügt über unzählige Parameter, daher gibt es verschiedene presets, die es ermöglichen es Ihnen, schneller zu komprimieren (auf Kosten der Größe der endgültigen Datei). Je niedriger der Wert, desto kleiner ist die erhaltene Datei, desto länger ist jedoch die Komprimierungszeit. Folgendes ist zu beachten: Die Werte 4 bis 6 liefern gute Ergebnisse mit anständigen Kodierungszeiten. Die Verwendung von Werten unter 4 verlängert die Komprimierungszeit erheblich und führt zu einem vernachlässigbaren Gewinn. Bereits zwischen 4 und 6 ist der Unterschied gering. Weitere Informationen finden Sie auf dieser Seite. Das Interessante an Preset 4 ist, dass ab diesem Schwellenwert die globale Bewegungskompensation aktiviert wird, was bei Filmen mit viel Bewegung von Vorteil sein kann. Ab 7 beginnt die Qualität immer mehr zu leiden. Hohe Voreinstellungen sind eher für die Echtzeitkodierung konzipiert. |
| | |
| | * ''-pix_fmt yuv420p10le'' Standardmäßig werden Farben/Helligkeit auf 8 Bit kodiert. Diese Option erzwingt die 10-Bit-Kodierung, wodurch Streifenbildung in dunklen Szenen weitgehend vermieden werden kann, ohne die Dateigröße wesentlich zu beeinträchtigen. |
| | |
| | * ''-g 120'' Fügt alle 120 Frames ein I-Frame hinzu. Bei 24 Bildern pro Sekunde sind das alle 5 Sekunden. Referenzbilder erleichtern den Spielern das „Suchen“, d. h. das sofortige Auflegen des Videostreams, wenn Sie den Wiedergabecursor bewegen. (Standardmäßig legt ffmpeg den Wert 9999 fest, was die Navigation in Videos sehr erschwert. |
| | |
| | * ''-map 0:a? -c:a copy'' Für Audio alle Audiospuren unverändert kopieren (ohne Neukodierung). Das kann man natürlich ändern, indem man beispielsweise den Opus-Codec verwendet um größe Kompression im Audiobereich zu erzielen- |
| | |
| | * ''-map 0:s? -c:s copy'' Kopiert auch alle Untertitelspuren. Das '?' (Fragezeichen) wird verwendet, um Fehler zu vermeiden, wenn keine Untertitelspur vorhanden ist (s. o. für Audio). |
| | |
| | * ''output.mkv'' Output-Datei. Ein mkv-Container ist zu empfehlen, da dieser in der Lage ist, den Videostream, aber auch mehrere Audiostreams und Untertitel zu speichern. |
| | |
| |
| ===== Video/Audio-delay korrigieren ===== | ===== Video/Audio-delay korrigieren ===== |
| </code> | </code> |
| |
| ===== 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 ==== | ==== Videoformate 16:9 ==== |
| |
| verwendet den LAME-Encoder mit ''-V 0'' Preset, also VBR und ca. ~245 kbps, siehe [[https://trac.ffmpeg.org/wiki/Encode/MP3|Tabelle]] | verwendet den LAME-Encoder mit ''-V 0'' Preset, also VBR und ca. ~245 kbps, siehe [[https://trac.ffmpeg.org/wiki/Encode/MP3|Tabelle]] |
| | |
| | |
| | ---- |
| |
| ===== Videostream mitschneiden ===== | ===== Videostream mitschneiden ===== |
| </code> | </code> |
| |
| * -y : Überschreiben der out.mp4 ohne Nachfragen | * ''-y'' : Überschreiben der out.mp4 ohne Nachfragen |
| * -i : Input Datei oder URL | * ''-i :'' Input Datei oder URL |
| * -c:v copy: Video-Codec übernehmen (kopieren) | * '' -c:v copy'': Video-Codec übernehmen (kopieren) |
| * -c:a copy: Audio-Codec übernehmen (kopieren) | * ''-c:a copy'': Audio-Codec übernehmen (kopieren) |
| * -t: 1 Stunde aufnehmen | * ''-t: 1:00:00'' Stunde aufnehmen |
| * > /tmp/streamrec.log 2>&1;: nicht nach std-out sondern in Datei /tmp/streamrec.log schreiben | * ''> /tmp/streamrec.log 2>&1;'': nicht nach std-out sondern in Datei /tmp/streamrec.log schreiben |
| * -c copy: Video- und Audio- Codec übernehmen (kopieren) | * ''-c copy'': Video- und Audio- Codec übernehmen (kopieren) |
| |
| ==== Videostream segementieren ==== | |
| | ==== Videostream segementieren à 1 Stunde ==== |
| |
| <code bash> | <code bash> |
| ffmpeg -y -i http://domain.tld/stream.m3u8 -c copy -f segment -segment_time 3600 out%03d.mp4 > /tmp/streamrec.log 2>&1; | ffmpeg -y -i http://domain.tld/stream.m3u8 -c copy -f segment -segment_time 3600 out%03d.mp4 > /tmp/streamrec.log 2>&1; |
| </code> | </code> |
| | |
| * -i : Input Datei oder URL | * -i : Input Datei oder URL |
| * -y : Überschreiben der out.mp4 ohne Nachfragen | * -y : Überschreiben der out.mp4 ohne Nachfragen |
| * -segment_time 3600 : Jedes Segment in [s] = 3600s Länge = 1 Stunde | * -segment_time 3600 : Jedes Segment in [s] = 3600s Länge = 1 Stunde |
| * > /tmp/streamrec.log 2>&1;: nicht nach std-out sondern in Datei /tmp/streamrec.log schreiben | * > /tmp/streamrec.log 2>&1;: nicht nach std-out sondern in Datei /tmp/streamrec.log schreiben |
| | |
| | ==== gestrennten Video- und Audiostream mitschneiden und zusammenführen ==== |
| | |
| | <code bash> |
| | ffmpeg -y -i https://domain.tld/stream/v1.m3u8 -i https://domain.tld/stream/a1.m3u8 -t 00:10:00 -c copy -map 0:0 -map 1:0 streamrecord.mp4 |
| | </code> |
| | |
| | * ''-i https://domain.tld/stream/v1.m3u8'' Videostream |
| | * ''-i https://domain.tld/stream/a1.m3u8'' Audiostream |
| | * ''-t 00:10:00'' Aufnahmezeit = 10 Minuten |
| | * ''-c copy'' Audio und Videocodec übernehmen |
| | * ''-map 0:0'' Videostream in Container einbetten |
| | * ''-map 1:0'' Audiostream in Container einbetten |
| | * ''streamrecord.mp4'' Output Dateiname |
| | ===== 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]] |
| | |
| |