Benutzer-Werkzeuge

Webseiten-Werkzeuge


ffmpeg

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
ffmpeg [2025-09-04 19:30:32] – [Lautstärke verändern] manfredffmpeg [2025-09-04 19:33:13] (aktuell) – [Lautstärke verändern] manfred
Zeile 1: Zeile 1:
 +====== FFmpeg ======
 +
 +Von **[[https://ffmpeg.org/about.html|FFmpeg]]** gibt es auch einen Fork mit dem Namen [[https://libav.org/avconv.html|AVconv]].
 +
 +  * __probier es einfach mal aus:__
 +    * **ASP@L5:** ''ffmpeg -benchmark -probesize 9223372036854M -analyzeduration 9223372036854M -fflags +genpts+igndts -i Quelle.avi -c:v mpeg4 -b:v 8192k -profile:v 15 -level 5 -g 300 -c:a ac3 -f avi -y Ziel.avi''
 +    * **ASP@L4:** ''ffmpeg -benchmark -probesize 9223372036854M -analyzeduration 9223372036854M -fflags +genpts+igndts -i Quelle.avi -c:v mpeg4 -b:v 3072k -profile:v 15 -level 4 -g 300 -c:a ac3 -f avi -y Ziel.avi''
 +
 +  Diese Optionen haben folgende Bedeutung:
 +  
 +  -benchmark                                                -> erzeugt eine bessere Ausgabe
 +  
 +  -probesize 9223372036854M -analyzeduration 9223372036854M -> durchsucht den GANZEN Film, sonst werden beispielsweise Untertitelspuren nicht gefunden, die erst sehr spät im Film einsetzen (hier wurden die größtmöglichen Werte gewählt, um auf jeden Fall absolut jeden Film komplett zu durchsuchen)
 +  
 +  -fflags +genpts+igndts                                    -> repariert bestimmte Beschädigungen an Containern, betroffene Filme können sonst nicht gelesen werden
 +
 +  FFmpeg 4.1.3 (Sept. 2019):
 +  opus in MP4 support is experimental, add '-strict -2' if you want to use it.
 +  Could not write header for output file #0 (incorrect codec parameters ?): Experimental feature
 +  Error initializing output stream 0:1 --
 +
 +  * //__2018-10-02:__ [[http://www.linux-magazin.de/news/dav1d-ein-decoder-fuer-av1/|Dav1d: Ein Decoder für AV1]] => Open-Source-Entwickler haben einen neuen Decoder namens Dav1d angekündigt. Der soll schon bald AV1, den Codec der Alliance for Open Media, zum Leben erwecken.//
 +  * //__2018-11-08:__ [[http://www.linux-magazin.de/news/ffmpeg-4-1-bringt-zahlreiche-neue-filter/|FFmpeg 4.1 bringt zahlreiche neue Filter]] => Für das AV1-Format enthält FFmpeg 4.1 einen entsprechenden Parser, zudem unterstützt das Framework das Format in MP4-Dateien. Ein Decoder fehlt allerdings noch. Dieser soll mit der nächsten FFmpeg-Version erscheinen.//
 +
 +  * [[https://github.com/FlatheadV8/Film2MP4]] -> hier ist ein Skript welches auf Basis von __FFmpeg/AVconv__ und __[[https://de.wikipedia.org/wiki/X264|x264]]__ Filme bearbeiten kann
 +  * [[http://ffmpeg.org/faq.html]]
 +  * [[https://trac.ffmpeg.org/wiki/Null#a-benchmarkoption|FFmpeg -benchmark option]]
 +    * ''%%ffmpeg -benchmark ...%%''
 +    * ''%%bench: utime=8.483s%%''
 +    * ''%%bench: maxrss=52736000kB%%''
 +  * [[https://trac.ffmpeg.org/wiki/FilteringGuide|FFmpeg Filtering Guide]]
 +  * __[[::EDV:MM:FFmpeg - QSV (Intel QuickSync Video encoders)]]__
 +  * __[[::FFmpeg, freie Codecs und Standardformate]]__
 +    * **[[::x264]]**
 +      * [[https://sites.google.com/site/linuxencoding/x264-ffmpeg-mapping]]
 +      * mögliche Voreinstellungen (''-preset''): ''ultrafast'', ''superfast'', ''veryfast'', ''faster'', ''fast'', ''medium'', ''slow'', ''slower'', ''veryslow'' und ''placebo''
 +        * **''ffmpeg -i Film.vob -c:a libfdk_aac -b:a 160k -c:v libx264 -preset medium -x264-params crf=23 -f mp4 Film.mp4''**
 +        * **''ffmpeg -i Film.vob -c:a aac -vbr 2 -c:v libx264 -preset medium -x264-params crf=23 -f mp4 Film.mp4''**
 +      * mögliche Profile (''-profile:v''): ''baseline'', ''main'', ''high'', ''high10'', ''high422'', ''high444''
 +        * __//Die Option ''-profile:v'' hat nur dann Wirkung, wenn auch die Option ''-level'' angegeben wird!//__
 +        * mögliche Level (''-level''):
 +          * ''-profile:v baseline -level 3.0''
 +          * ''-profile:v baseline -level 3.1''
 +          * ''-profile:v main -level 3.1''
 +          * ''-profile:v main -level 4.0''
 +          * ''-profile:v high -level 4.0''
 +          * ''-profile:v high -level 4.1''
 +          * ''-profile:v high -level 4.2''
 +            * **''ffmpeg -i Film.vob -c:a libfdk_aac -afterburner 1 -profile:a aac_low -vbr 5 -c:v libx264 -profile:v high -level 4.1 -f mp4 Film.mp4''**
 +            * **''ffmpeg -i Film.vob -c:a aac -q:a 2 -c:v libx264 -profile:v high -level 4.1 -f mp4 Film.mp4''**
 +    * **[[::x265]]**
 +      * mögliche Voreinstellungen (''-preset''): ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow und placebo
 +        * alles was hinter der Option ''"-x265-params"'' angegeben wird, dass wird direkt dem ''"x265"'' übergeben
 +          * **''ffmpeg -i Film.vob -c:a libfdk_aac -b:a 160k -c:v libx265 -preset medium -x265-params crf=23 -f mp4 -y Film.mp4''**
 +          * **''ffmpeg -i Film.vob -c:a aac -vbr 2 -c:v libx265 -preset medium -crf 23 -f mp4 -y Film.mp4''**
 +    * **[[::VP9]]**
 +      - **''ffmpeg -i input.avi -map 0:v -c:v libvpx-vp9 -crf 32 -b:v 0 -c:a libvorbis -q:a 6 -map 0:a:0 -c:s copy -f matroska film.mkv''**
 +      - **''ffmpeg -i input.avi -pix_fmt yuv420p10le -map 0:v -c:v libvpx-vp9 -crf 32 -b:v 0 -c:a libvorbis -q:a 6 -map 0:a:0 -c:s copy -f matroska film.mkv''**
 +      - ''ffmpeg -probesize 9223372036854M -analyzeduration 9223372036854M -fflags +genpts -i input.avi -map 0:v -c:v libvpx-vp9 -crf 32 -b:v 0 -vf yadif=1/3,mcdeint=mode=extra_slow,scale=768x576,pad='max(iw\,ih*(4/3)):ow/(4/3):(ow-iw)/2:(oh-ih)/2:black',scale=744x558,setdar='4/3' -g 300 -keyint_min 300 -c:a libvorbis -q:a 6 -map 0:a:0 -c:s copy -disposition:a:0 default -metadata title="Filmname" -metadata description='Filmbeschreibung' -f matroska film.mkv''
 +      - ''ffmpeg -probesize 9223372036854M -analyzeduration 9223372036854M -fflags +genpts -i film.avi -map 0:v -c:v libvpx-vp9 -crf 32 -b:v 0 -vf yadif=1/3,mcdeint=mode=extra_slow,scale=1024x576,pad='max(iw\,ih*(16/9)):ow/(16/9):(ow-iw)/2:(oh-ih)/2:black',scale=858x482,setdar='16/9' -g 300 -keyint_min 300 -c:a libvorbis -q:a 6 -map 0:a:0 -c:s copy -disposition:a:0 default -metadata title="Filmname" -metadata description='Filmbeschreibung' -f matroska film.mkv''
 +        * **''ffmpeg -h encoder=libvpx-vp9''**
 +    * **[[::AV1]]**
 +      - **''ffmpeg -benchmark -probesize 9223372036854M -analyzeduration 9223372036854M -fflags +genpts+igndts -i Quelle.avi -c:v av1 -crf 38 -cpu-used 8 -row-mt 1 -aq-mode 1 -tune 1 -g 300 -c:a aac -movflags faststart -f mp4 -y Ziel.mp4''** - //Es werden nur interne Codecs verwendet, sodas dieses Kommando immer und überall funktioniert.//
 +      - **''ffmpeg -i input.mp4 -c:v libaom-av1 -crf 38 -b:v 0 -cpu-used 5 -row-mt 1 -tile-columns 1 -tile-rows 0 -f matroska ausgabe.mkv''** - //libaom-av1 ist seit dem 23. Sep. 2020 nicht mehr experimentell//
 +        * **''ffmpeg -h encoder=libaom-av1''**
 +      - **''ffmpeg -i input.mp4 -c:v librav1e -qp 80 -tile-columns 1 -tile-rows 0 -rav1e-params speed=5:low_latency=true -f matroska ausgabe.mkv''**
 +        * **''ffmpeg -h encoder=librav1e''**
 +      - **''ffmpeg -i input.mp4 -c:v libsvt_av1 -qp 32 -preset 8 -profile 0 -level 0 -rc 0 -f matroska ausgabe.mkv''**
 +        * **''ffmpeg -h encoder=libsvt_av1''**
 +      - **''ffmpeg -i input.mp4 -c:v av1 -crf 38 -f matroska ausgabe.mkv''**
 +
 +**__In einem nicht repräsentativen FullHD-Transkodier-Test wurden bei gleicher Qualität (gleiche Optionen: ''-qp 32 -b:v 0'', das entspricht ungefähr der FullHD-Qualität von YouTube), gegenüber dem Codec [[https://de.wikipedia.org/wiki/H.264|AVC]] (h264_nvenc), mit dem Codec [[https://de.wikipedia.org/wiki/High_Efficiency_Video_Coding|HEVC]] (hevc_nvenc) ca. 20% an Dateigröße eingespart aber ca. 60% mehr Zeit zum transkodieren benötigt.__**
 +
 +[[http://wiki.ubuntuusers.de/FFmpeg#Libav]] => Das [[http://libav.org/about.html|Projekt Libav]] ist eine [[http://lwn.net/Articles/423702/|Abspaltung]] von [[http://www.ffmpeg.org/about.html|FFmpeg]] und wurde im Januar 2011 ins Leben gerufen, als ein Teil der Entwickler mit der Projektleitung unzufrieden war. Der Funktionsumfang ist größtenteils identisch zu FFmpeg, es kann von den gleichen Anwendungen verwendet werden, und unterstützt derzeit bis auf einige Ausnahmen (Stand: August 2012) die gleichen Formate und Codecs. Ein Großteil der Änderungen, die an Libav vorgenommen werden, fließen ebenfalls bei FFmpeg ein (vor allem, um die ABI-Kompatibilität zu wahren).
 +  * ffmpeg/avconv ist ein Kommandozeilenprogramm, um von einem Video-, Audio- oder Bild-Format zu einem anderen zu konvertieren. Es unterstützt auch das Aufnehmen und Enkodieren von einer TV-Karte in Echtzeit.
 +  * ffserver/avserver ist ein HTTP Multimedia Streamer Server für Live-Übertragungen über das Internet
 +  * ffplay/avplay ist ein sehr einfacher Medienplayer für die Kommandozeile
 +  * [[ffprobe]]/avprobe ist ein einfaches Befehlszeilenwerkzeug zum Analysieren von Multimedia-Streams
 +  * libavcodec enthält alle ffmpeg Audio- und Video-Encoder bzw. -Decoder. Die meisten Codecs wurden von Grund auf neu geschrieben, um die beste Ausführungsgeschwindigkeit sicherzustellen. Diese Bibliothek kann von anderen Programmen benutzt werden, um dann die Filme selber darzustellen.
 +  * libavformat enthält alle Container-Parser und -Ersteller für alle herkömmlichen Audio- und Video-Containerformate (z. B. AVI, MKV, OGG, Media etc.)
 +
 +Ubuntu verwendet in der Version 12.04 die FF- und die AV-Programme, bei Verwendung der FF-Programme wird man jedoch darauf hingewiesen, dass sie in zukünftigen Ubuntu-Versionen nicht mehr enthalten sein werden.
 +
 +
 +===== unterstützte Codecs =====
 +
 +unterstützte Video-Codecs anzeigen:
 +  > ffmpeg -encoders
 +  ...
 +   V..... libaom-av1           libaom AV1 (codec av1)
 +  ...
 +   V..... h261                 H.261
 +   V..... h263                 H.263 / H.263-1996
 +   V.S... h263p                H.263+ / H.263-1998 / H.263 version 2
 +   V..... libx264              libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (codec h264)
 +   V..... libx264rgb           libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 RGB (codec h264)
 +   V....D h264_vaapi           H.264/AVC (VAAPI) (codec h264)
 +   V..... libx265              libx265 H.265 / HEVC (codec hevc)
 +   V....D hevc_vaapi           H.265/HEVC (VAAPI) (codec hevc)
 +   VF.... huffyuv              Huffyuv / HuffYUV
 +  ...
 +   V..... libtheora            libtheora Theora (codec theora)
 +   VF.... tiff                 TIFF image
 +   VF.... utvideo              Ut Video
 +   V..... v210                 Uncompressed 4:2:2 10-bit
 +   V..... v308                 Uncompressed packed 4:4:4
 +   V..... v408                 Uncompressed packed QT 4:4:4:4
 +   V..... v410                 Uncompressed 4:4:4 10-bit
 +   V..... libvpx               libvpx VP8 (codec vp8)
 +   V....D vp8_vaapi            VP8 (VAAPI) (codec vp8)
 +   V..... libvpx-vp9           libvpx VP9 (codec vp9)
 +   V....D vp9_vaapi            VP9 (VAAPI) (codec vp9)
 +  ...
 +
 +die möglichen Optionen zu einem Codec anzeigen lassen:
 +  > ffmpeg -h encoder=libx264
 +    Encoder libx264 [libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10]:
 +      General capabilities: delay threads 
 +      Threading capabilities: other
 +      Supported pixel formats: yuv420p yuvj420p yuv422p yuvj422p yuv444p yuvj444p nv12 nv16 nv21 yuv420p10le yuv422p10le yuv444p10le nv20le gray gray10le
 +  libx264 AVOptions:
 +    -preset            <string>     E..V....... Set the encoding preset (cf. x264 --fullhelp) (default "medium")
 +    -tune              <string>     E..V....... Tune the encoding params (cf. x264 --fullhelp)
 +    -profile           <string>     E..V....... Set profile restrictions (cf. x264 --fullhelp) 
 +    -fastfirstpass     <boolean>    E..V....... Use fast settings when encoding first pass (default true)
 +    -level             <string>     E..V....... Specify level (as defined by Annex A)
 +    -passlogfile       <string>     E..V....... Filename for 2 pass stats
 +    -wpredp            <string>     E..V....... Weighted prediction for P-frames
 +    -a53cc             <boolean>    E..V....... Use A53 Closed Captions (if available) (default true)
 +    -x264opts          <string>     E..V....... x264 options
 +    -crf               <float>      E..V....... Select the quality for constant quality mode (from -1 to FLT_MAX) (default -1)
 +  ...
 +  
 +  > ffmpeg -h encoder=libx265
 +  
 +  > ffmpeg -h encoder=libvpx-vp9
 +  
 +  > ffmpeg -h encoder=libaom-av1
 +  > aomenc --help
 +
 +
 +===== Beschriftung von Tonspur und Untertitel =====
 +
 +In diesem Beispiel hat der Film drei Tonspuren (deutsch, englisch und französisch) und ein Untertitelspur (deutsch).
 +
 +die drei Tonspuren werden so beschriftet:
 +  # -metadata:s:a:0 language=ger
 +  # -metadata:s:a:1 language=eng
 +  # -metadata:s:a:2 language=fra
 +
 +die Untertitelspur wird so beschriftet:
 +  # -metadata:s:s:0 language=ger
 +
 +so könnte beispielsweise ein DVD-Rip (Original: 16/9 mit 720x576 Bildpunkten) aussehen, welcher in quadratische Bildpunkte (1024x576) ähnlicher Bildpunkteanzahl (858x432) umgerechnet wird:
 +  > ffmpeg  -probesize 9223372036854M -analyzeduration 9223372036854M -fflags +genpts -i Film.mpg -map 0:v -c:v libvpx-vp9 -crf 32 -b:v 0 -vf scale=1024x576,pad='max(iw\,ih*(16/9)):ow/(16/9):(ow-iw)/2:(oh-ih)/2:black',scale=858x482,setdar='16/9' -keyint_min 2 -8 -c:a libvorbis -q:a 6 -map 0:a:0 -map 0:a:1 -map 0:a:2 -c:s copy -map 0:s:0? -map 0:s:1? -disposition:a:0 default -disposition:a:1 0 -disposition:a:2 0 -disposition:s:0 default -disposition:s:1 0 -metadata:s:a:0 language=ger -metadata:s:a:1 language=eng -metadata:s:a:2 language=fra -metadata:s:s:0 language=ger -metadata title="Spielfilm" -metadata description='FSK 16 / 2014 / 101 Minuten' -f matroska -y Film.mkv
 +
 +
 +===== FFmpeg Metadata (Tag) =====
 +
 +Mit [[::FFmpeg Metadata (Tag)]] in eine Multimediadatei einbinden.
 +
 +
 +===== Bildformat ändern =====
 +
 +das generiert ein 16/9-Video mit der Auflösung von 1024:576:
 +  > ffmpeg -i Film.mkv  -map 0:v -map 0:a:0 -c:v libx264 -vf pad='max(iw\,ih*16/9):ow/16/9:(ow-iw)/2:(oh-ih)/2',scale='1024:576',setsar='1/1' -c:a libfaac -b:a 128k -ar 44100 -y Film.mp4
 +
 +oder wenn der vorliegende Film im Zeilensprungformat (interlace) vorliegt und der MP4-Film im Vollbildmodus (progressiv) gewünscht wird:
 +  > ffmpeg -i Film.mkv  -map 0:v -map 0:a:0 -c:v libx264 -vf yadif,pad='max(iw\,ih*16/9):ow/16/9:(ow-iw)/2:(oh-ih)/2',scale='1024:576',setsar='1/1' -c:a libfaac -b:a 128k -ar 44100 -y Film.mp4
 +
 +siehe auch: [[mp4#MP4 verlustbehaftet aus einem MKV erstellen]]
 +
 +
 +===== spezielle FFmpeg-Optionen =====
 +
 +Zum "[[https://ffmpeg.org/ffmpeg-formats.html#Format-Options|Tiefenscan]]" kann man die Parameter ''-probesize'' (in Bytes; mind. 32 Byte) oder ''-analyzeduration'' (in Mikrosekunden) verwenden. Standardwert ist jeweils 5 Millionen (also 5 MBytes oder 5 Sekunden), wohl je nach dem was früher erreicht wird. Große Zahlen darf man mit [[https://ffmpeg.org/ffmpeg-all.html#Options|SI-Suffixen]] angeben (M/G/T *1000, Mi/Gi/Ti *1024).
 +
 +  
 +  -analyzeduration   <int64>      .D....... specify how many microseconds are analyzed to probe the input (from 0 to I64_MAX) (default 0)
 +  -probesize         <int64>      .D....... set probing size (from 32 to I64_MAX) (default 5e+06)
 +  -formatprobesize   <int>        .D....... number of bytes to probe file format (from 0 to 2.14748e+09) (default 1.04858e+06)
 +  -fpsprobesize      <int>        .D....... number of frames used to probe fps (from -1 to 2.14748e+09) (default -1)
 +
 +  $ ffmpeg  -probesize 9223372036G -analyzeduration 9223372036G -i Avengers_4_-_Endgame.mpg ...
 +
 +
 +==== pad ====
 +
 +  * [[https://ffmpeg.org/ffmpeg-filters.html#Examples-90|pad - Examples]]
 +
 +Fügen Sie dem Eingabevideo Paddings mit der Farbe „Violett“ hinzu. Die Größe des Ausgabevideos beträgt 640x480, und die obere linke Ecke des Eingabevideos wird in Spalte 0 (von links), Zeile 40 (von oben) platziert:
 +    pad=640:480:0:40:violet
 +
 +Das obige Beispiel entspricht dem folgenden Befehl:
 +    pad=width=640:height=480:x=0:y=40:color=violet
 +
 +Füllen Sie die Eingabe auf, um eine Ausgabe mit um 3/2 vergrößerten Abmessungen zu erhalten, und platzieren Sie das Eingabevideo in der Mitte des aufgefüllten Bereichs:
 +    pad="3/2*iw:3/2*ih:(ow-iw)/2:(oh-ih)/2"
 +
 +Füllen Sie die Eingabe auf, um eine quadratische Ausgabe mit einer Größe zu erhalten, die dem Maximalwert zwischen Eingabebreite und -höhe entspricht, und platzieren Sie das Eingabevideo in der Mitte des aufgefüllten Bereichs:
 +    pad="max(iw\,ih):ow:(ow-iw)/2:(oh-ih)/2"
 +
 +Füllen Sie den Eingang auf, um ein endgültiges w/h-Verhältnis von 16:9 zu erhalten:
 +    pad="ih*16/9:ih:(ow-iw)/2:(oh-ih)/2"
 +    pad='max(iw\,ih*(16/9)):ow/(16/9):(ow-iw)/2:(oh-ih)/2:black'
 +
 +Im Fall von anamorphotischem Video ist es notwendig, um das Seitenverhältnis der Ausgabeanzeige korrekt einzustellen, entsprechend der Beziehung sar im Ausdruck zu verwenden:
 +    (ih * X / ih) * sar = output_dar
 +    X = output_dar / sar
 +
 +Daher muss das vorherige Beispiel modifiziert werden:
 +    pad="ih*16/9/sar:ih:(ow-iw)/2:(oh-ih)/2"
 +
 +Verdoppeln Sie die Ausgabegröße und platzieren Sie das Eingabevideo in der unteren rechten Ecke des aufgefüllten Ausgabebereichs:
 +    pad="2*iw:2*ih:ow-iw:oh-ih"
 +
 +
 +=== Lautstärke verändern ===
 +
 +<code bash>
 +# ohne Lautstärkeanpassung
 +ffmpeg -i input.mkv -map 0:a:0 -c:a:0 libopus -b:a:0 128k -vbr:a:0 on -mapping_family:a:0 0 -filter:a:0 aformat=channel_layouts='stereo|mono'            -metadata:s:a:0 language=deu -disposition:a:0 default output.mkv
 +
 +# mit Lautstärkeverdopplung
 +ffmpeg -i input.mkv -map 0:a:0 -c:a:0 libopus -b:a:0 128k -vbr:a:0 on -mapping_family:a:0 0 -filter:a:0 aformat=channel_layouts='stereo|mono',volume=2.0 -metadata:s:a:0 language=deu -disposition:a:0 default output.mkv
 +
 +# Nur um 6dB anheben (empfohlen für erste Versuche)
 +-filter:a:0 "aformat=channel_layouts='stereo|mono',volume=6dB"
 +
 +# Lautstärke verdreifachen
 +-filter:a:0 "aformat=channel_layouts='stereo|mono',volume=3.0"
 +
 +# Mit automatischer Normalisierung (verhindert Übersteuerung)
 +-filter:a:0 "aformat=channel_layouts='stereo|mono',volume=2.0,alimiter"
 +
 +Die wichtigsten Parameter für Lautstärke-Anpassung:
 +    volume=2.0     - verdoppelt die Lautstärke
 +    volume=0.5     - halbiert die Lautstärke
 +    volume=10dB    - erhöht um 10 Dezibel
 +    volume=-5dB    - reduziert um 5 Dezibel
 +</code>
 +
 +
 +===== Filme in ein HTML5-kompatibles MP4-Format umrechnen =====
 +
 +  > ffmpeg -nostdin -fflags +genpts -i film.avi -c:v libx264 -crf 20 -c:a libfaac -b:a 160k -f mp4 -y film.mp4
 +
 +zum Beispiel (ohne änderung des Bildformates):
 +  > ffmpeg -i Jack_Reacher_-_720x576.avi -map 0:v -c:v libx264 -crf 20 -keyint_min 2-8 -map 0:a:0 -c:a libfaac -b:a 160k -f mp4 -y Jack_Reacher_-_originalformat.mp4
 +
 +oder so, Bildformat wird auf 4/3 mit quadratischen Pixeln umgewandelt:
 +  > ffmpeg -i Jack_Reacher_-_720x576.avi -map 0:v -c:v libx264 -crf 20 -vf scale=736x552,pad='max(iw\,ih*(4/3)):ow/(4/3):(ow-iw)/2:(oh-ih)/2',setsar='1/1' -keyint_min 2-8 -map 0:a:0 -c:a libfaac -b:a 160k -f mp4 -y Jack_Reacher_-_4zu3.mp4
 +
 +oder so, Bildformat wird auf 16/9 mit quadratischen Pixeln umgewandelt:
 +  > ffmpeg -i Jack_Reacher_-_720x576.avi -map 0:v -c:v libx264 -crf 20 -vf scale=864x486,pad='max(iw\,ih*(16/9)):ow/(16/9):(ow-iw)/2:(oh-ih)/2',setsar='1/1' -keyint_min 2-8 -map 0:a:0 -c:a libfaac -b:a 160k -f mp4 -y Jack_Reacher_-_16zu9.mp4
 +
 +oder einfach mit Skript (siehe: [[https://github.com/FlatheadV8/Filmwandler/releases|Filmwandler]], [[https://github.com/FlatheadV8/Film2MP4/releases|Film2MP4]]):
 +  > /home/bin/Filme2MP4.sh -q Jack_Reacher.avi -z Jack_Reacher.mp4
 +  > /home/bin/Filmwandler.sh -q Jack_Reacher.avi -z Jack_Reacher.mp4
 +
 +
 +==== Bitrate abschätzen an Hand von CRF ====
 +
 +Diese Beispielreihe wurde an Hand von einem Ausschnitt aus //Thor 3 - Tag der Entscheidung// (von der 5. bis zur 25. Minute - FullHD - 1920x1080 = 2073600 Bildpunkte) ermittelt. Weiterhin wurden u.a. diese Parameter dem ''ffmpeg'' übergeben
 +  - ''-fflags +genpts''
 +  - ''-c:v libx264 -profile:v high''
 +
 +  crf 15 ~ 8350 kb/s
 +  crf 16 ~ 7250 kb/s
 +  crf 17 ~ 6290 kb/s
 +  crf 18 ~ 5460 kb/s
 +  crf 19 ~ 4740 kb/s
 +  crf 20 ~ 4130 kb/s
 +  crf 21 ~ 3590 kb/s
 +  crf 22 ~ 3130 kb/s
 +  crf 23 ~ 2720 kb/s
 +  crf 24 ~ 2370 kb/s
 +  crf 25 ~ 2070 kb/s
 +  crf 26 ~ 1810 kb/s
 +  crf 27 ~ 1590 kb/s
 +  crf 28 ~ 1400 kb/s
 +  crf 29 ~ 1240 kb/s
 +  crf 30 ~ 1100 kb/s
 +  crf 31 ~ 980 kb/s
 +  crf 32 ~ 870 kb/s
 +  crf 33 ~ 780 kb/s
 +  crf 34 ~ 700 kb/s
 +  crf 35 ~ 630 kb/s
 +
 +''CRF'' kann Werte zwischen **0** (Verlustfrei) und **51** annehmen.
 +Es werden für ''crf'' Werte zwischen **15** (beste Blu-ray Disk - Qualität) und **35** (nur auf 2-4 Zoll großen Displays sinnvoll) empfohlen.
 +
 +
 +===== Kapitel, Menüs oder leere Untertitelspuren entfernen/vermeiden =====
 +
 +Mit ''-map_chapters -1'' kann man vermeiden, dass im Ziel Kapitel oder Menüs angelegt werden. Manchmal werden fehlerhafte Einträge in der Quelle als Untertitel übernommen, welche dann im Videoplayer so angezeigt werden, aber nicht funktionieren.
 +
 +Beispiel:
 +  > ffmpeg -i Venom_-_Let_There_Be_Carnage.en.mp4 -itsoffset -0.75 -i Venom_-_Let_There_Be_Carnage.de.mp4 -i Venom_-_Let_There_Be_Carnage.en.vtt -itsoffset 0.75 -i Venom_-_Let_There_Be_Carnage.de.vtt -c:v copy -c:a copy -c:s mov_text -map 0:v:0 -map 0:a:0 -map 1:a:0 -map 2:s:0 -map 3:s:0 -metadata:s:a:0 language=eng -metadata:s:a:1 language=ger -metadata:s:s:0 language=eng -metadata:s:s:1 language=ger -map_chapters -1 Venom_-_Let_There_Be_Carnage.mp4
 +
 +
 +===== Kompilieren / Compile =====
 +
 +  * [[https://trac.ffmpeg.org/wiki/CompilationGuide]]
 +  * [[https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu]]
 +
 +  * [[https://gist.github.com/masterflitzer/b176bc9b3729554fe12d1bcc97c8d3cf]]
 +
 +<code bash ~/bin/ffmpeg-compile-debian.sh>
 +#!/usr/bin/env bash
 +
 +set -o errexit
 +set -o nounset
 +set -o pipefail
 +shopt -s inherit_errexit
 +
 +if test -z "${FFMPEG_VERSION}"
 +then
 + echo "You need to set the FFMPEG_VERSION environment variable (see https://git.ffmpeg.org/gitweb/ffmpeg.git/tags)"
 + exit 1
 +fi
 +
 +FFMPEG_VERSION="${FFMPEG_VERSION#n}"
 +
 +sudo apt-get update -qq
 +sudo apt-get -qq install \
 + autoconf \
 + automake \
 + build-essential \
 + cmake \
 + git-core \
 + libass-dev \
 + libfreetype6-dev \
 + libgnutls28-dev \
 + libmp3lame-dev \
 + libsdl2-dev \
 + libtool \
 + libva-dev \
 + libvdpau-dev \
 + libvorbis-dev \
 + libxcb1-dev \
 + libxcb-shm0-dev \
 + libxcb-xfixes0-dev \
 + meson \
 + ninja-build \
 + pkg-config \
 + texinfo \
 + wget \
 + yasm \
 + zlib1g-dev
 +sudo apt-get -qq install libunistring-dev libaom-dev libdav1d-dev
 +sudo apt-get -qq install nasm
 +sudo apt-get -qq install libx264-dev
 +sudo apt-get -qq install libx265-dev libnuma-dev
 +sudo apt-get -qq install libvpx-dev
 +sudo apt-get -qq install libfdk-aac-dev
 +sudo apt-get -qq install libopus-dev
 +
 +mkdir -p ~/ffmpeg_sources ~/bin
 +
 +# libaom
 +cd ~/ffmpeg_sources && \
 +git -C aom pull --prune > /dev/null 2>&1 || git clone https://aomedia.googlesource.com/aom aom && \
 +git -C aom switch --detach $(git -C aom describe --tag --abbrev=0) && \
 +mkdir -p aom_build && \
 +cd aom_build && \
 +PATH="${HOME}/bin:${PATH}" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="${HOME}/ffmpeg_build" -DENABLE_TESTS=OFF -DENABLE_NASM=on ../aom && \
 +PATH="${HOME}/bin:${PATH}" make -j$(nproc) && \
 +make -j$(nproc) install
 +
 +# libsvtav1
 +cd ~/ffmpeg_sources && \
 +git -C svt-av1 pull --prune > /dev/null 2>&1 || git clone https://gitlab.com/AOMediaCodec/SVT-AV1.git svt-av1 && \
 +git -C svt-av1 switch --detach $(git -C svt-av1 describe --tag --abbrev=0) && \
 +mkdir -p svt-av1_build && \
 +cd svt-av1_build && \
 +PATH="${HOME}/bin:${PATH}" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="${HOME}/ffmpeg_build" -DCMAKE_BUILD_TYPE=Release -DBUILD_DEC=OFF -DBUILD_SHARED_LIBS=OFF ../svt-av1 && \
 +PATH="${HOME}/bin:${PATH}" make -j$(nproc) && \
 +make -j$(nproc) install
 +
 +# libvmaf
 +cd ~/ffmpeg_sources && \
 +git -C vmaf pull --prune > /dev/null 2>&1 || git clone https://github.com/Netflix/vmaf.git vmaf && \
 +git -C vmaf switch --detach $(git -C vmaf describe --tag --abbrev=0) && \
 +mkdir -p vmaf_build && \
 +cd vmaf_build && \
 +meson setup -Denable_tests=false -Denable_docs=false --buildtype=release --default-library=static ../vmaf/libvmaf --prefix "${HOME}/ffmpeg_build" --bindir="bin" --libdir="lib" && \
 +ninja -j$(nproc) && \
 +ninja -j$(nproc) install
 +
 +# ffmpeg
 +FFMPEG_VERSION_STRING="ffmpeg-${FFMPEG_VERSION}"
 +cd ~/ffmpeg_sources && \
 +wget -O ${FFMPEG_VERSION_STRING}.tar.gz https://ffmpeg.org/releases/${FFMPEG_VERSION_STRING}.tar.gz && \
 +tar xvf ${FFMPEG_VERSION_STRING}.tar.gz && \
 +cd ${FFMPEG_VERSION_STRING} && \
 +PATH="${HOME}/bin:${PATH}" PKG_CONFIG_PATH="${HOME}/ffmpeg_build/lib/pkgconfig" ./configure \
 + --prefix="$HOME/ffmpeg_build" \
 + --pkg-config-flags="--static" \
 + --extra-cflags="-I${HOME}/ffmpeg_build/include" \
 + --extra-ldflags="-L${HOME}/ffmpeg_build/lib" \
 + --extra-libs="-lpthread -lm" \
 + --ld="g++" \
 + --bindir="${HOME}/bin" \
 + --enable-gpl \
 + --enable-gnutls \
 + --enable-libaom \
 + --enable-libass \
 + --enable-libdav1d \
 + --enable-libfdk-aac \
 + --enable-libfreetype \
 + --enable-libmp3lame \
 + --enable-libopus \
 + --enable-libsvtav1 \
 + --enable-libvmaf \
 + --enable-libvorbis \
 + --enable-libvpx \
 + --enable-libx264 \
 + --enable-libx265 \
 + --enable-nonfree && \
 +PATH="${HOME}/bin:${PATH}" make -j$(nproc) && \
 +make -j$(nproc) install && \
 +hash -r
 +
 +. ~/.profile
 +
 +</code>
 +
 +  ~/bin/compile-ffmpeg-debian.sh
 +
 +
 +===== HDR10 =====
 +
 +  > mediainfo Film_HDR10.mp4
 +  ...
 +  Color primaries                          : BT.2020
 +  Transfer characteristics                 : PQ
 +  Matrix coefficients                      : BT.2020 non-constant
 +  ...
 +
 +  * [[https://de.wikipedia.org/wiki/ITU-R-Empfehlung_BT.2020|BT.2020]] => [[https://de.wikipedia.org/wiki/High_Dynamic_Range_Video#HDR10|HDR10]] Media Profile => [[https://de.wikipedia.org/wiki/High_Dynamic_Range_Video|High Dynamic Range Video]] 10 Bit => Es handelt sich um eine Erweiterung der Videopegel-Dynamik bei 10 Bit Farbtiefe im Farbraum [[https://de.wikipedia.org/wiki/Rec._2020|Rec. 2020]].
 +
 +  * Technische Details
 +    * Auflösung
 +      * Empfehlung 2020 definiert zwei Auflösungen, 3840x2160 ("4K") und 7680x4320 ("8K").
 +      * Diese Auflösungen haben ein Seitenverhältnis von 16:9 und nutzen quadratische Bildpunkte.
 +    * Bildfrequenz
 +      * Empfehlung 2020 spezifiziert die folgenden Bildfrequenzen:
 +        * 120p
 +        * 119,88p
 +        * 100p
 +        * 60p
 +        * 59,94p
 +        * 50p
 +        * 30p
 +        * 29,97p
 +        * 25p
 +        * 24p
 +        * 23,976p
 +        * Nur Vollbildverfahren sind erlaubt.
 +      * Digitale Darstellung
 +        * Empfehlung 2020 definiert eine Farbtiefe von entweder 10 oder 12 Bits pro Abtastwert.
 +
 +  * [[https://github.com/jellyfin/jellyfin/issues/415|Add tonemapping filter to convert HDR10 content to SDR. #415 ]]
 +
 +  > ffmpeg -i Film_HDR10.mp4 ... -vf zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709,tonemap=tonemap=hable:desat=0,zscale=t=bt709:m=bt709:r=tv,format=yuv420p ... -f mp4 -y Film_SDR.mp4
 +  > ffmpeg -i Film_HDR10.mp4 ... -vf zscale=t=linear:npl=100,zscale=p=bt709,tonemap=hable:desat=0,zscale=t=bt709:m=bt709,format=yuv420p ... -f mp4 -y Film_SDR.mp4
 +  > ffmpeg -i Film_HDR10.mp4 ... -vf zscale=t=linear,tonemap=gamma,zscale=p=709:t=709:m=709,format=yuv420p ... -f mp4 -y Film_SDR.mp4
 +
 +
 +===== Film drehen =====
 +
 +  * [[https://asciich.ch/wordpress/videos-drehen-mit-ffmpeg/]]
 +
 +Video um 90 Grad nach rechts drehen:
 +  ffmpeg -i input_falsch.mp4 -vf "transpose=1" -qscale 0 -c:a copy output_richtig.mp4
 +
 +Video um 90 Grad nach links drehen:
 +  ffmpeg -i input_falsch.mp4 -vf "transpose=2" -qscale 0 -c:a copy output_richtig.mp4
 +
 +Video um 180 Grad drehen:
 +  ffmpeg -i input_falsch.mp4 -vf "hflip,vflip" -qscale 0 -c:a copy output_richtig.mp4
 +
 +
 +===== Daumenkino mit FFmpeg =====
 +
 +  * [[https://trac.ffmpeg.org/wiki/Slideshow]]
 +aus einem einzigen Bild (''Bild.png''), ein AV1-Video (''Film_-_stumm.webm''), von ''3600'' Sekunden Länge, machen:
 +  > ffmpeg -loop 1 -i Bild.png -t 3600 -map 0:v -c:v libsvtav1 -crf 42 -preset 5 -svtav1-params enable-overlays=1:enable-tf=0:film-grain=0:film-grain-denoise=0:keyint=5s:scd=1:tune=0:fast-decode=0 -vf fps=1,format=yuv420p,pad='max(iw\,ih*(16/9)):ow/(16/9):(ow-iw)/2:(oh-ih)/2:black',setdar='16/9' -f webm -y Film_-_stumm.webm
 +
 +verschiedene Beispiele:
 +  ffmpeg -framerate 1/5 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
 +  ffmpeg -framerate 1/5 -start_number 126 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
 +  ffmpeg -framerate 1/5 -i img%03d.png -c:v libx264 -vf fps=25 -pix_fmt yuv420p out.mp4
 +  ffmpeg -framerate 1/5 -i img%03d.png -c:v libx264 -vf "fps=25,format=yuv420p" out.mp4
 +  ffmpeg -framerate 1 -pattern_type glob -i '*.jpg' -c:v libx264 out.mp4
 +  ffmpeg -framerate 1 -pattern_type glob -i '*.png' -c:v libx264 -pix_fmt yuv420p out.mp4
 +
 +In diesem Beispiel werden alle Bilder (*.png) sortiert, nacheinander für jeweils 15 Sekunden, zu einem Film (out.mp4) im AVC-Format mit 25 Bilder pro Sekunde umgewandelt:
 +  ffmpeg -c:v libx264 -r 25 -pattern_type glob -i '*.png' -framerate 1/15 -y out.mp4
 +
 +Wenn man aus diesen Dateien
 +        B00.png
 +        B01.png
 +        B02.png
 +        B03.png
 +        B04.png
 +        B05.png
 +        B06.png
 +        B07.png
 +        B08.png
 +        B09.png
 +        B10.png
 +        B11.png
 +        B12.png
 +einen Daumenkino-Film (mit 2 Bildern pro Sekunde) machen will,
 +dann geht das so:
 +  ffmpeg -framerate 2 -pattern_type glob -i '*.png' -c:v libx264 -vf 'format=yuv420p,fps=25' -y Film.mp4
 +
 +Die 'framerate' gibt an, wieviele Bilder pro Sekunde angezeigt werden:
 +  '1' -> jedes Bild wird für eine Sekunde angezeigt
 +  '2' -> zwei Bild werden pro Sekunde angezeigt
 +  '1/5' -> jedes Bild wird für fünf Sekunden angezeigt
 +
 +
 +==== Bild mit Tonspur ====
 +
 +Wenn man ein Bild mit einer Tonspur aus einem Video untermalen will (ein sehr einfaches Beispiel), der neue Film wird im DivX-Format erstellt:
 +<file bash Film_avi.sh>
 +ffmpeg \
 +        -i Film_mit_Tonspur.mp4 \
 +        -loop 1 \
 +        -i Bild.png \
 +        -map 1:v \
 +        -c:v mpeg4 \
 +        -b:v 3072k \
 +        -profile:v 15 \
 +        -level 4 \
 +        -vtag DX50 \
 +        -g 300 \
 +        -map 0:a:0 \
 +        -c:a ac3 \
 +        -f avi \
 +        -y Neuer_Film.avi
 +</file>
 +
 +der neue Film hat das Format ''MP4''+''AVC''+''AAC'' und kann von jedem modernen Browser (z.B. [[https://www.mozilla.org/de/firefox/|Firefox]]) abgespielt werden:
 +<file bash Film_mp4.sh>
 +ffmpeg \
 +        -benchmark \
 +        -probesize 9223372036854M \
 +        -analyzeduration 9223372036854M \
 +        -fflags +genpts+igndts \
 +        -i Film_mit_Tonspur.mp4 \
 +        -loop 1 \
 +        -i Bild.png \
 +        -map 1:v \
 +        -c:v libx264 \
 +        -crf 26 \
 +        -b:v 0 \
 +        -preset slower \
 +        -tune film \
 +        -x264opts bluray-compat=1:vbv-maxrate=15000:vbv-bufsize=15000:nal-hrd=vbr:level=4:slices=1:b-adapt=2:direct=auto:colorprim=bt709:transfer=bt709:colormatrix=bt709:keyint=50:subme=9 \
 +        -vf pad='max(iw\,ih*(16/9)):ow/(16/9):(ow-iw)/2:(oh-ih)/2:black',setdar='16/9' \
 +        -g 300 \
 +        -afterburner 1 \
 +        -map 0:a:0 \
 +        -c:a:0 libfdk_aac \
 +        -b:a:0 140k \
 +        -metadata:s:a:0 language=de \
 +        -disposition:a:0 default \
 +        -sn \
 +        -ss 9.2 \
 +        -to 1633.2 \
 +        -metadata title="So soll der neue Film heißen" \
 +        -metadata description='Hier können nähere Informationen zum neuen Film hinterlegt werden' \
 +        -movflags faststart \
 +        -f mp4 \
 +        -y Neuer_Film.mp4
 +</file>
 +
 +der neue Film hat das Format ''WebM''+''AV1''+''Opus'' und kann von jedem modernen Browser (z.B. [[https://www.mozilla.org/de/firefox/|Firefox]]) abgespielt werden:
 +<file bash Film_webm.sh>
 +ffmpeg 
 +        -benchmark \
 +        -probesize 9223372036854M \
 +        -analyzeduration 9223372036854M \
 +        -fflags +genpts+igndts \
 +        -i Film_mit_Tonspur.mp4 \
 +        -loop 1 \
 +        -i Bild.png \
 +        -map 1:v \
 +        -c:v libsvtav1 \
 +        -crf 42 \
 +        -preset 5 \
 +        -svtav1-params enable-overlays=1:enable-tf=0:film-grain=0:film-grain-denoise=0:keyint=5s:scd=1:tune=0:fast-decode=0 \
 +        -vf pad='max(iw\,ih*(16/9)):ow/(16/9):(ow-iw)/2:(oh-ih)/2:black',setdar='16/9' \
 +        -compression_level 10 \
 +        -map 0:a:0 \
 +        -c:a:0 libopus \
 +        -b:a:0 128k \
 +        -vbr:a:0 on \
 +        -mapping_family:a:0 0 \
 +        -filter:a:0 aformat=channel_layouts='stereo|mono' \
 +        -metadata:s:a:0 language=de \
 +        -disposition:a:0 default \
 +        -sn \
 +        -ss 9.2 \
 +        -to 1633.2 \
 +        -metadata title="So soll der neue Film heißen" \
 +        -metadata description='Hier können nähere Informationen zum neuen Film hinterlegt werden' \
 +        -f webm \
 +        -y Neuer_Film.webm
 +</file>
 +
 +Die Tonspur aus dem Film, soll von Sekunde ''9.2'' bis Sekunde ''1633.2'', in den neuen Film übernommen werden.
 +
 +
 +===== Film in Einzelbilder zerlegen =====
 +
 +  ffmpeg -i film.mp4 -q:v 2 %05d.jpg
 +  
 +  ls -lha
 +  drwxrwxr-x  2 fritz fritz  12K Dez 23 17:19 .
 +  drwxrwxrwt 20 fritz fritz  12K Dez 23 17:23 ..
 +  -rw-rw-r--  1 fritz fritz 213K Dez 23 17:19 00001.jpg
 +  -rw-rw-r--  1 fritz fritz 211K Dez 23 17:19 00002.jpg
 +  -rw-rw-r--  1 fritz fritz 210K Dez 23 17:19 00003.jpg
 +  -rw-rw-r--  1 fritz fritz 156K Dez 23 17:19 00004.jpg
 +  ...
 +
 +
 +===== animiertes GIF mit FFmpeg erzeugen =====
 +
 +Filmausschnitt ''1:1'' als "animiertes GIF" ablegen:
 +  > ffmpeg -i Film.mp4 -ss 4608.9 -t 5.2 -y Filmausschnitt.gif
 +
 +Filmausschnitt mit schwarzen Balken auf ''4/3'' erweitern, dann in die Auflösung ''360x270'' skalieren und als "animiertes GIF" ablegen:
 +  > ffmpeg -i Film.mp4 -vf pad='max(iw\,ih*(4/3)):ow/(4/3):(ow-iw)/2:(oh-ih)/2',setsar='1/1' -s 360x270 -ss 4608.9 -t 5.2 -y Filmausschnitt_4-3.gif
 +
 +Filmausschnitt mit schwarzen Balken auf ''16/9'' erweitern, dann in die Auflösung ''480x270'' skalieren und als "animiertes GIF" ablegen:
 +  > ffmpeg -i Film.mp4 -vf pad='max(iw\,ih*(16/9)):ow/(16/9):(ow-iw)/2:(oh-ih)/2',setsar='1/1' -s 480x270 -ss 4608.9 -t 5.2 -y Filmausschnitt_16-9.gif
 +
 +
 +===== spezielle Beispiele =====
 +
 +
 +==== Target ====
 +
 +"vcd", "svcd", "dvd", "dv", "dv50"
 +  > ffmpeg -i file.avi -target vcd /tmp/test.mpg
 +  Could not determine norm (PAL/NTSC/NTSC-Film) for target.
 +  Please prefix target with "pal-", "ntsc-" or "film-",
 +  or set a framerate with "-r xxx".
 +  
 +  > ffmpeg -i file.vob -target pal-vcd /tmp/test.mpg
 +
 +  > ffmpeg -i file.vob -target pal-dv50 /tmp/test.avi
 +
 +
 +==== WAVE in AC3 (a52) umwandeln ====
 +
 +Wenn sich mehr als zwei Spuren in der Datei befinden, dann ist AC3 der kompatibelste Codec für einen Film:
 +  > ffmpeg -i Film_Tonspur.wav -codec:a ac3 Film_Tonspur.ac3
 +
 +
 +==== eine beliebige Tonspur in WAVE umwandeln ====
 +
 +Meistens wird die Umwandlung genau andersherum gemacht.
 +Aber manchmal möchte man eine MP3-Datei auch auf eine klassische Musik-CD brennen,
 +dann braucht man meistens eine WAVE oder eine AU-Datei.
 +  > ffmpeg -i Beispiel.mp3 -vn -acodec pcm_s16le -ar 44100 -ac 2 -y Beispiel.wav
 +  > ffmpeg -i Beispiel.avi -vn -acodec pcm_s16le -ar 44100 -ac 2 -y Beispiel.wav
 +
 +Auf eine Musik-CD brennt man diese WAVE-Dateien dann zum Beispiel unter FreeBSD so:
 +  * für IDE-Brenner (P-ATA) => [[BurnCD]]
 +  * für SCSI- und S-ATA-Brenner => [[CDRecord]]
 +
 +
 +=== Audio-transkodier-Skripte ===
 +
 +
 +== eine beliebige Audio-Spur ins Wave-Format umwandeln ==
 +
 +<file>
 +#!/bin/bash
 +
 +#
 +# mit diesem Skript kann man die Tonspur aus einem Film im CD-kompatibelen
 +# Wave-Format extrahieren;
 +# oder jede Audio-Datei in das CD-kompatibelen Wave-Format umwandeln;
 +#
 +# die hiermit erzeugten Wave-Dateien können auf CD gebrannt werden
 +#
 +
 +if [ -r "${1}" ] ; then
 +        ffmpeg -i ${1} -vn -acodec pcm_s16le -ar 44100 -ac 2 ${1}.wav
 +        ls -lha ${1}.wav
 +else
 +        echo "${0} Film.mkv"
 +        echo "${0} Audio-Datei"
 +        exit 1
 +fi
 +</file>
 +
 +
 +== eine beliebige Audio-Spur ins MP3-Format umwandeln ==
 +
 +<file>
 +#!/bin/bash
 +
 +#
 +# mit diesem Skript kann eine beliebige Audio-Datei
 +# in eine MP3-Datei umgewandelt werden
 +#
 +
 +if [ -r "${1}" ] ; then
 +        PROGRAMM="$(which ffmpeg)"
 +        if [ -z "${PROGRAMM}" ] ; then
 +                PROGRAMM="$(which avconv)"
 +        fi
 +
 +        #${PROGRAMM} -i ${1} -vn -c:a libmp3lame -ar 44100 -ac 2 ${1}.mp3
 +        ${PROGRAMM} -i ${1} -vn -c:a libmp3lame -aq 2 -ac 2 ${1}.mp3
 +        ls -lha ${1}.mp3
 +else
 +        echo "${0} Film.mkv"
 +        echo "${0} Audio-Datei"
 +        exit 1
 +fi
 +</file>
 +
 +
 +== eine beliebige Audio-Spur ins FLAC-Format umwandeln ==
 +
 +  * [[https://avpres.net/FFmpeg/sound_FLAC.html]]
 +  * [[https://ffmpeg.org/ffmpeg-codecs.html#flac-2]]
 +    * ''compression_level'': 0 - 12 (5)
 +
 +  > ffmpeg -h encoder=flac
 +  Encoder flac [FLAC (Free Lossless Audio Codec)]:
 +      General capabilities: delay small lossless 
 +      Threading capabilities: none
 +      Supported sample formats: s16 s32
 +  FLAC encoder AVOptions:
 +    -lpc_coeff_precision <int>        E...A.... LPC coefficient precision (from 0 to 15) (default 15)
 +    -lpc_type          <int>        E...A.... LPC algorithm (from -1 to 3) (default -1)
 +       none                         E...A....
 +       fixed                        E...A....
 +       levinson                     E...A....
 +       cholesky                     E...A....
 +    -lpc_passes        <int>        E...A.... Number of passes to use for Cholesky factorization during LPC analysis (from 1 to INT_MAX) (default 2)
 +    -min_partition_order <int>        E...A.... (from -1 to 8) (default -1)
 +    -max_partition_order <int>        E...A.... (from -1 to 8) (default -1)
 +    -prediction_order_method <int>        E...A.... Search method for selecting prediction order (from -1 to 5) (default -1)
 +       estimation                   E...A....
 +       2level                       E...A....
 +       4level                       E...A....
 +       8level                       E...A....
 +       search                       E...A....
 +       log                          E...A....
 +    -ch_mode           <int>        E...A.... Stereo decorrelation mode (from -1 to 3) (default auto)
 +       auto                         E...A....
 +       indep                        E...A....
 +       left_side                    E...A....
 +       right_side                   E...A....
 +       mid_side                     E...A....
 +    -exact_rice_parameters <boolean>    E...A.... Calculate rice parameters exactly (default false)
 +    -multi_dim_quant   <boolean>    E...A.... Multi-dimensional quantization (default false)
 +    -min_prediction_order <int>        E...A.... (from -1 to 32) (default -1)
 +    -max_prediction_order <int>        E...A.... (from -1 to 32) (default -1)
 +
 +__Beispiel 1 (//minimal//):__
 +  > ffmpeg -i Film.mkv -vn -c:a flac Audio.flac
 +
 +__Beispiel 2 (//üblich//):__
 +  > ffmpeg -i Film.mkv -vn -c:a flac -sample_fmt s32 -ar 48000 -y Audio.flac
 +
 +__Beispiel 3 (//schnell + größere Datei//):__
 +  > ffmpeg -i Film.mkv -vn -c:a flac -sample_fmt s32 -ar 48000 -compression_level 0 -y Audio.flac
 +
 +__Beispiel 4 (//langsam + kleinere Datei//):__
 +  > ffmpeg -i Film.mkv -vn -c:a flac -sample_fmt s32 -ar 48000 -compression_level 12 -y Audio.flac
 +
 +
 +==== 3gp erzeugen ====
 +
 +  * [[http://blog.php-web-developer.de/it/anleitung-howto-guide/ffmpeg-video-3gp-konvertieren-handy-umwandeln-h263-amr-aac/]]
 +  * [[http://ubuntuforums.org/showthread.php?t=1566169]]
 +  * [[https://video.stackexchange.com/questions/12627/youtube-3gp-encoding-settings]]
 +
 +siehe auch: [[mp4#mp4 verlustbehaftet aus einem MKV erstellen]]
 +
 +Einfachste Möglichkeit, die ein Video erzeugt, das auf den meisten Geräten laufen sollte\\
 +allerdings sind in diesem 3GP-Film die Kreise nur dann rund, wenn das Quell-Format "11:9" ist
 +(**192k** - normale Qualitaet bei **15**FPS):\\
 +''ffmpeg -i __Film.mpg__ -vcodec h263 -s 176x144 -vf "setsar=1:1" -b **192k** -r **15** -acodec libfaac -ar 24k -ab 64k -ac 1 -y __Film.3gp__''\\
 +''ffmpeg -i __Film.mpg__ -vf scale=320:240 -vcodec mpeg4 -acodec aac -strict -2 -f 3gp __Film.3gp__''\\
 +''ffmpeg -i __Film.mpg__ -vcodec mpeg4 -s 176x144 -qscale:v 12 -r 10 -level 8 -brand 3gp6 -vf 'pad=max(iw\,ih*(11/9)):ow/(11/9):(ow-iw)/2:(oh-ih)/2,scale=iw*sar:ih' acodec libfaac -ar 22050 -ac 1 -qscale:a 45 __Film.3gp__''\\
 +
 +__Damit die Kreise in den 3GP-Filmen immer rund sind,\\
 +muss man das Quellformat richtig auf das Zielformat umrechnen!__
 +
 +**ACHTUNG!**\\
 +//Einige Geräte, wie z.B. die Handy-Uhr/Smartwatch "BURG 12", zeigen nur akkurate 3GP-Filme an, dafür reicht schon ein nicht richtig gesetzter Aspect (Seitenverhältnis des Bildes). Es müssen auf jeden Fall quadratische Bildpunkte sein. Die Handy-Uhr/Smartwatch "PW-315" von simvalley dagegen spielt alles ab, egal wie das Seitenverhältnis des Bildes aussieht.//
 +
 +Damit die Pixel (Bildpunkte) auch immer quadratisch sind und somit das Bild auch auf der "BURG 12" immer angezeigt wird, habe ich den VideoFilter **''"setsar=1:1"''** immer mitverwendet.\\
 +''ffmpeg -i __Film.mpg__ -vcodec h263 -s 176x144 **-vf "setsar=1:1"** -b 192k -r 15 -acodec libfaac -ar 24k -ab 64k -ac 1 -y __Film.3gp__''\\
 +
 +So transcodiert man einen 4:3-Film in einen sauberen 3GP-Film um:\\
 +''ffmpeg -i __Film.mpg__ -vcodec h263 -s 176x**132** -vf "pad=176:144:0:**6**:black,setsar=1:1" -b 192k -r 15 -acodec libfaac -ar 24k -ab 64k -ac 1 -y __Film.3gp__''
 +
 +so transcodiert man einen 16:9-Film in einen sauberen 3GP-Film um:\\
 +''ffmpeg -i __Film.mpg__ -vcodec h263 -s 176x**108** -vf "pad=176:144:0:**18**:black,setsar=1:1" -b 192k -r 15 -acodec libfaac -ar 24k -ab 64k -ac 1 -y __Film.3gp__''
 +
 +Manche Geräte vertragen auch eine höhere Datenrate, dann kann man die Bildqualität etwas anheben
 +(**384k** - hohe    Qualitaet bei **25**FPS):\\
 +''ffmpeg -i __Film.mpg__ -vcodec h263 -s 176x144 -vf "setsar=1:1" -b **384k** -r **25** -acodec libfaac -ar 24k -ab 64k -ac 1 -y __Film.3gp__''\\
 +
 +Die hiermit erzeugten 3GP-Filme können aber trotzdem nicht auf allen 3GP-Geräten im QCIF-Format angezeigt werden,
 +weil ins besondere ältere Geräte den Audio-Codec "AAC" nicht verarbeiten können und stattdessen die Tonspur im "AMR (Adaptive Multi-Rate) Narrow band"-Format benötigen.
 +
 +Meine lieblings-Variante:
 +  > ffmpeg -i __Film.mpg__ -c:v h263 -s 176x144 -vf "pad=max(iw\,ih*(176/144)):ow/(176/144):(ow-iw)/2:(oh-ih)/2,setsar=1/1,scale=iw*sar:ih" -b:v 192k -r 15 -c:a libfaac -ar 24k -b:a 64k -ac 1 -y __Film.3gp__
 +
 +==== mp4 erzeugen (getestet auf LG GD510) ====
 +
 +  * [[http://www.inside-handy.de/handys/lg-electronics-gd510/daten]]
 +  * [[https://www.youtube.com/watch?v=6umQhMLJ4ik]]
 +
 +Daten des **LG GD510**:
 +  Video            : MPEG4p2 (max. 700 kbps) / H.263 (128x96, 176x144, 352x288, 704x576, 1408x1152)
 +  Video-Format     : 400x240
 +  FPS              : bis 50/s positiv getestet
 +  Audio            : MP3 (max. 256 kbps) / AAC (max. 512 kbps)
 +  Sampel-Rate      : 44100
 +  Tonspuren        : 2
 +  Kontainer        : *.3gp / *.mp4
 +
 +So wird der Film "Film.mkv" mit optimaler Qualität für das GD510 zum "Film.mp4" transkodiert.\\
 +FreeBSD 10.1 (alter Programmname):
 +  ffmpeg -i Film.mkv -c:a libfaac -ar 44100 -b:a 128k -ac 2 -b:v 512k -c:v mpeg4 -s 400x240 -vf scale=iw*sar:ih,pad="max(iw\,ih*(5/3)):ow/(5/3):(ow-iw)/2:(oh-ih)/2","setsar=1/1" -y Film.mp4
 +Linux / Ubuntu 14.04 (neuer Programmname):
 +  avconv -i Film.mkv -c:a libfaac -ar 44100 -b:a 128k -ac 2 -b:v 512k -c:v mpeg4 -s 400x240 -vf scale=iw*sar:ih,pad="max(iw\,ih*(5/3)):ow/(5/3):(ow-iw)/2:(oh-ih)/2","setsar=1/1" -y Film.mp4
 +
 +mit diesem Kommando kann man Videos für die folgenden Geräte transkodieren:
 +  * LG GD510 POP
 +  * LG KP500 Cookie
 +  * Samsung S5230 Star
 +
 +Transkodier-Programme für Windows:
 +  * [[http://format-factory.softonic.de]]
 +  * [[http://www.xmedia-recode.de/download.html]]
 +
 +<file>
 +#!/bin/sh
 +
 +ffmpeg -i ${1} -s 400x240 -vf scale=iw*sar:ih,pad="max(iw\,ih*(5/3)):ow/(5/3):(ow-iw)/2:(oh-ih)/2","setsar=1/1" -b:v 512k -c:v mpeg4 -c:a libfaac -ar 44100 -b:a 128k -ac 2 -y ${1}_GD510.mp4
 +</file>
 +
 +==== DivX erzeugen ====
 +
 +__SD:__
 +  > ffmpeg -benchmark -probesize 9223372036854M -analyzeduration 9223372036854M -fflags +genpts+igndts -i ALTERFILM.mpg -c:v mpeg4 -vtag DX50 -profile:v 15 -level 4 -b:v 3072k -g 300 -c:a ac3 -f avi -y NEUERFILM.avi
 +
 +__HD:__
 +  > ffmpeg -benchmark -probesize 9223372036854M -analyzeduration 9223372036854M -fflags +genpts+igndts -i ALTERFILM.mpg -c:v mpeg4 -vtag DX50 -profile:v 15 -level 5 -b:v 8192k -g 300 -c:a libmp3lame -aq 2 -ac 2 -f avi -y NEUERFILM.avi
 +
 +
 +==== XviD erzeugen ====
 +
 +  > ffmpeg -i Film.mp4 -c:a libmp3lame -aq 2 -ac 2 -c:v libxvid -sameq -f avi -y test.avi
 +
 +
 +==== AVC erzeugen ====
 +
 +  > ffmpeg -i Film.mp4 -acodec libfaac -vcodec libx264 -vpre baseline -f matroska -y test.mkv
 +
 +
 +==== mehrere Filme zusammenfühgen ====
 +
 +
 +=== MPEG / MPEGTS (ts) / AVI ===
 +
 +__Das aneinander reihen (hintereinander zusammen fühgen) kann ffmpeg leider nur mit MPEG-, MPEGTS- (ts) und AVI-Dateien!__
 +
 +  > ffmpeg -i a.avi -i b.avi -i c.avi -i d.avi -c:v copy -c:a copy -c:v copy -c:a copy -c:v copy -c:a copy -c:v copy -c:a copy -f avi -y abcd.avi
 +
 +  > ffmpeg -fflags +genpts -i a.avi -i b.avi -i c.avi -i d.avi -c:v copy -c:a copy -c:v copy -c:a copy -c:v copy -c:a copy -c:v copy -c:a copy -f matroska -y abcd.mkv
 +
 +[[https://openscript.ch/de/articles/videodateien-mit-ffmpeg-zusammenfuegen]]
 +  > ffmpeg -i "concat:a.avi|b.avi|c.avi|d.avi" -c:v copy -c:a copy -f avi -y abcd.avi
 +
 +----
 +[[https://trac.ffmpeg.org/wiki/How%20to%20concatenate%20%28join,%20merge%29%20media%20files]]
 +  > ffmpeg -i "concat:a.avi|b.avi|c.avi|d.avi" -c copy -f avi -y abcd.avi
 +
 +hat man zwei Filme mit H.264/AAC - Kodec, dann müssen diese Filme erst in den TS-Container überführt werden:
 +  > ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts
 +  > ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate2.ts
 +  > ffmpeg -i "concat:intermediate1.ts|intermediate2.ts" -c copy -bsf:a aac_adtstoasc -f mp4 output.mp4
 +
 +
 +=== MP4 ===
 +
 +siehe auch: [[MP4]]
 +
 +MP4-Teile per //Liste// zusammen setzen:
 +  # echo "file 'teil_01_name.mp4'"  > Filmliste.txt
 +  # echo "file 'teil_02_name.mp4'" >> Filmliste.txt
 +  # echo "file 'teil_03_name.mp4'" >> Filmliste.txt
 +  # echo "file 'teil_04_name.mp4'" >> Filmliste.txt
 +  # ffmpeg -f concat -i Filmliste.txt -c:v copy -c:a copy -c:s copy -movflags faststart -f mp4 -y name.mp4
 +
 +
 +=== MKV ===
 +
 +In allen anderen Fällen könnte man zum Beispiel **mkvmerge** von //[[MKVToolnix]]// zur Hilfe nehmen.
 +
 +Für diesen Zweck müsste man die Filmteile jeweils einmal in den MKV-Container überführen. \\
 +Dann kann man ihn mit dem MKV-Tools prima zusammensetzen (siehe Abschnitt [[MKVToolnix#Filmteile zusammensetzen]]).
 +
 +Neuerdings funktioniert auch die folgende Methode für Matroska.
 +
 +MKV-Teile per //Liste// zusammen setzen:
 +  # echo "file 'teil_01_name.mkv'"  > Filmliste.txt
 +  # echo "file 'teil_02_name.mkv'" >> Filmliste.txt
 +  # echo "file 'teil_03_name.mkv'" >> Filmliste.txt
 +  # echo "file 'teil_04_name.mkv'" >> Filmliste.txt
 +  # ffmpeg -f concat -i Filmliste.txt -c:v copy -c:a copy -c:s copy -movflags faststart -f matroska -y name.mkv
 +
 +
 +==== CROPing durchführen ====
 +
 +In diesem Beispiel werden links und oben jeweils ein 100 Bildpunkte breiter Streifen vom Bild entfernt:
 +  > ffmpeg -i Film.mp4 -acodec libfaac -vcodec libx264 -vf crop=in_w-100:in_h-100:100:100 -vpre baseline -f matroska -y test.mkv
 +  
 +  -vf crop=width:height:x:y
 +  width:height stellt die Bildgröße dar
 +  x:y stellt die Position der linken oberen Ecke des Bildes dar
 +
 +zum testen, ob man die richtigen CROP-Werte gewählt hat, eignet sich diese Zeile ganz gut:
 +  > ffmpeg -i Film.mp4 -map 0:v -c:v libx264 -vf yadif,crop=716:428:2:72,setsar='1/1' -map 0:a:0 -c:a libfdk_aac -ss 321 -t 4 -f matroska -y test.mkv
 +
 +
 +==== die 8. Tonspur aus einem Film extrahieren ====
 +
 +  * [[http://wiki.ubuntuusers.de/FFmpeg#Map-Syntax]]
 +
 +In diesem Beispiel wird die achte Audio-Spur in einem CD-kompatiblen Format abgelegt:
 +  > ffmpeg -i Film.vob -vn -map 0:a:7 -acodec pcm_s16le -ar 44100 -ac 2 -y test.wav
 +
 +  
 +  -map 0:a:7      Verwende nur die achte Tonspur (Zählung beginnt mit "0") der ersten Eingangsdatei (Zählung beginnt mit "0")
 +
 +
 +==== nur bestimmte Tonspuren verwenden ====
 +
 +  * [[http://wiki.ubuntuusers.de/FFmpeg#Map-Syntax]]
 +
 +In diesem Beispiel werden mit der Video-Spur (''-map 0:v'') nur die erste (''-map 0:a:0'') und zweite (''-map 0:a:1'') Audio-Spur transcodiert und als neue Filmdatei "test.mkv" abgelegt:
 +  > ffmpeg -i Film.vob -map 0:v -map 0:a:0 -map 0:a:1 -acodec libfaac -vcodec libx264 -vpre baseline -f matroska -y test.mkv
 +
 +  
 +  -map 0:v        Verwende von der ersten Eingangsdatei (Zählung beginnt mit "0") nur die Videospuren (Zählung beginnt mit "0")
 +  -map 1:a:4      Verwende von der zweiten Eingangsdatei (Zählung beginnt mit "0") nur die fünfte Tonspur (Zählung beginnt mit "0")
 +  -map 0:v -map 0:a:0 -map 0:a:1      Verwende von der ersten Eingangsdatei nur die Videospuren sowie die erste und zweite Tonspur
 +
 +
 +===== allgemeines =====
 +
 +__Only VP8 or VP9 or AV1 video and Vorbis or Opus audio and WebVTT subtitles are supported for WebM.__
 +
 +
 +==== Audio- bzw. Video-Spur verzögern ====
 +
 +Audio-Spur um 0,7 Sekunden verzögern:
 +  > ffmpeg -itsoffset 0.7 ...
 +
 +Video-Spur um 0,4 Sekunden verzögern:
 +  > ffmpeg -itsoffset -0.4 ...
 +
 +
 +==== FFmpeg-Profile ====
 +
 +[[FFmpeg-Profile]]
 +
 +
 +==== allgemeine Beispiele ====
 +
 +Infos über einen Film auslesen:
 +  > ffmpeg -i Film.mpg
 +  > ffmpeg -i <rein>
 +
 +Film im "''RAW YUV420P''"-Format in eine Datei schreiben:
 +  > ffmpeg -i <rein> -o <raus>.yuv
 +
 +aus der Video-Datei "a.yuv" mit der Auflösung "720x576" und der Audio-Datei "a.wav" den MPEG-Film "a.mpg" umwandeln:
 +  > ffmpeg -i a.wav -s 720x576 -i a.yuv a.mpg
 +
 +Film im "''RAW YUV420P''"-Format an eine Pipe übergeben:
 +  > ffmpeg       -i <rein> -an -vcodec rawvideo -pix_fmt yuv420p -f matroska <raus>.mkv
 +  > ffmpeg       -i <rein> -an -vcodec rawvideo -pix_fmt yuv420p -f rawvideo - | ...
 +  > ffmpeg -r 25 -i <rein> -an -vcodec rawvideo -pix_fmt yuv420p -f rawvideo -v 0 -vsync 0 -r 25 - | ...
 +  > ffmpeg -r 25 -i <rein> -an -vcodec rawvideo -pix_fmt yuv420p -f rawvideo -v 0 -vsync 0 -r 25 -s 720x320 -aspect 16:9 - | ...
 +  > ffmpeg -r 25 -i <rein> -an -vcodec rawvideo -pix_fmt yuv420p -f rawvideo -v 0 -vsync 0 -r 25 -vf scale=720x320 - | ...
 +  > ffmpeg -r 25 -i <rein> -an -vcodec rawvideo -pix_fmt yuv420p -f rawvideo -v 0 -vsync 0 -r 25 -vf scale=720x320,setdar=16:9 - | ...
 +  > ffmpeg -r 25 -i <rein> -an -vcodec rawvideo -pix_fmt yuv420p -f rawvideo -v 0 -vsync 0 -r 25 -vf scale=720:576,crop=704:432:08:72,setdar=16:9 - | ...
 +
 +Film im "''YUV4MPEG''"-Pipe-Format an eine Pipe übergeben (ohne Ton):
 +  > ffmpeg -i <rein> -an -f yuv4mpegpipe - | ...
 +
 +Nur die erste Tonspur im WAVE-Format in eine Datei schreiben:
 +  > ffmpeg -i Beispiel.mpg -map 0.1:0.0 -async 0 -acodec pcm_s16le -vn -y Beispiel.wav
 +  > ffmpeg -i Beispiel.mpg -map 0.1:0.0 -async 0 -c:a pcm_s16le -vn -y Beispiel.wav
 +
 +alle 24 Bilder soll ein KeyFrame sein:
 +  > ffmpeg -i <rein> -g 24 <raus>.mkv
 +
 +nur die zweite Tonspur verwenden, dafür muss man als erstes die __IDs aller Spuren__ auslesen und danach das __Mapping aller verwendeter Spuren__ angeben:
 +  > ffmpeg -i <rein>
 +  ...
 +      Stream #0.0(eng): Video: h264 (High), yuv420p, 720x576 [PAR 64:45 DAR 16:9], 24 fps, 24 tbr, 1k tbn, 48 tbc (default)
 +      Stream #0.1: Audio: aac, 48000 Hz, stereo, s16 (default)
 +      Stream #0.2: Audio: aac, 48000 Hz, stereo, s16 (default)
 +  ...
 +  > ffmpeg -i <rein> -map 0.0:0.0 -map 0.2:0.1 <raus>.mkv
 +
 +Formatauswahl absteigend angegeben (Formate für 48, 32, 24, 16 und 12 Bit):
 +  > ffmpeg -i <rein> -vf format=yuv444p16le:yuv422p16le:yuv444p:yuv422p:yuv420p <raus>.mkv
 +
 +[[Untertitel in Filmen]]
 +
 +
 +**''ffmpeg''** __Subtitle encoding currently only possible from text to text or bitmap to bitmap__
 +  Input #0, mpeg, from 'Avengers_4_-_Endgame.mpg':
 +    Duration: 02:53:46.02, start: 0.287267, bitrate: 5848 kb/s
 +      Stream #0:0[0x1e0]: Video: mpeg2video (Main), yuv420p(tv, progressive), 720x576 [SAR 64:45 DAR 16:9], 8000 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc
 +      Stream #0:1[0x80]: Audio: ac3, 48000 Hz, 5.1(side), fltp, 384 kb/s
 +      Stream #0:2[0x81]: Audio: ac3, 48000 Hz, 5.1(side), fltp, 384 kb/s
 +      Stream #0:3[0x21]: Subtitle: dvd_subtitle
 +      Stream #0:4[0x22]: Subtitle: dvd_subtitle
 +      Stream #0:5[0x23]: Subtitle: dvd_subtitle
 +      Stream #0:6[0x20]: Subtitle: dvd_subtitle
 +      Stream #0:7[0x25]: Subtitle: dvd_subtitle
 +      Stream #0:8[0x24]: Subtitle: dvd_subtitle
 +  Stream mapping:
 +    Stream #0:0 -> #0:0 (mpeg2video (native) -> av1 (libaom-av1))
 +    Stream #0:2 -> #0:1 (ac3 (native) -> opus (libopus))
 +    Stream #0:3 -> #0:2 (dvd_subtitle (dvdsub) -> webvtt (native))
 +  Subtitle encoding currently only possible from text to text or bitmap to bitmap
 +
 +
 +so konvertiert man einen Film in einen anderen Kontainer (//nicht in jeden Kontainer ist das einfach//):
 +  for Datei in *.mts; do ffmpeg -i "${Datei}" ${Datei%.mts}.mp4; done
 +  ffmpeg -i 00001.mts 00001.mp4
 +
 +muss man den Film noch bearbeiten, dann tut man das am besten in einem verlusstfreien Format tun (2. Videospur, 1. Tonspur, alle 4 Bilder ein Vollbild):
 +  > ffmpeg -i Beispiel.mpg -sameq -map 0.1:0.2 -async 0 -acodec pcm_s16le -map 0.0:0.0 -vsync 0 -g 4 -vcodec ffv1 -vf format=yuv444p16le:yuv422p16le:yuv444p:yuv422p:yuv420p -f matroska -y verlustfreies_zwischenformat.mkv
 +
 +[[http://ubuntuforums.org/archive/index.php/t-1309647.html]]:
 +  > ffmpeg -i $input -deinterlace -r $fps -f rawvideo - | x264 -q $qp -f $db --sar $par -o $output - ${width}x$height --fps $fps
 +  > ffmpeg -i $input -an -vcodec libx264 -crf $crf -vpre hq -threads 0 $output
 +
 +Beispiel für das transkodieren einer Videospur ins BlueRay-Format:
 +  > ffmpeg -v 0 -i Beispiel.mpg -an -sameq -g 4 -vcodec rawvideo -s 864x486 -vf format=yuv420p -f yuv4mpegpipe -threads 1 - | x264 - --demuxer raw --input-res 864x486 --fps 25 --crf 23 --profile high --threads 1 --b-adapt 2 --direct auto --slow-firstpass --no-fast-pskip --me tesa --merange 24 --partitions all --rc-lookahead 60 --ref 5 --subme 10 --trellis 2 --nr 0 --weightp 0 --bframes 3 --nal-hrd vbr --vbv-maxrate 12500 --vbv-bufsize 12500 --level 3.0 --keyint 24 --min-keyint 2 --b-pyramid strict --slices 1 --aud --colorprim bt709 --transfer bt709 --colormatrix bt709 --sar 1:1 -o Beispiel_videospur.mkv
 +  > ffmpeg -v 0 -i Beispiel.mpg -an -sameq -g 4 -vcodec rawvideo -pix_fmt yuv420p -s 864x486 -f yuv4mpegpipe -threads 1 - | x264 - --demuxer raw --input-res 864x486 --fps 25 --crf 23 --profile high --threads 1 --b-adapt 2 --direct auto --slow-firstpass --no-fast-pskip --me tesa --merange 24 --partitions all --rc-lookahead 60 --ref 5 --subme 10 --trellis 2 --nr 0 --weightp 0 --bframes 3 --nal-hrd vbr --vbv-maxrate 12500 --vbv-bufsize 12500 --level 3.0 --keyint 24 --min-keyint 2 --b-pyramid strict --slices 1 --aud --colorprim bt709 --transfer bt709 --colormatrix bt709 --sar 1:1 -o Beispiel_videospur.mkv
 +
 +
 +===== ein Stück aus dem Film rausschneiden =====
 +
 +siehe auch: [[mencoder#Film zuschneiden]]
 +
 +hier werden 400 Sekunden ab der 60. Sekunde rauskopiert, mit der alten FFmpeg-Syntax und als MKV abgelegt:
 +  > ffmpeg -i film.mp4 -ss 60 -t 400 -acodec copy -vcodec copy -f matroska film.mkv
 +
 +und hier mit der neuen avconv-Syntax für die Codec-Angabe:
 +  > ffmpeg -i film.mp4 -ss 60 -t 400 -c:a copy -c:v copy -f matroska film.mkv
 +
 +Leider hängt die genaue Schnittposition von den vorhandenen I-Frames ab, die in einigen Filmen dichter beieinander liegen können, dann geht es recht gut. Oder sie können in manchen Filmen auch sehr große Abstände zueinander aufweisen, das spart ein wenig Speicherplatz aber der Suchlauf und der Schitt nach I-Frames ist dann sehr grob.
 +
 +Will man den Schnitt etwas genauer positionieren können, dann geht es nur, wenn alles transcodiert wird:
 +  > ffmpeg -i film.avi -ss 60 -t 400 -c:v libx264 -crf 20 -c:a libfaac -q:a 160 -ar 44100 -f mp4 -y film.mp4
 +
 +In diesem Fall wird das rausgeschnittene Stück, HTML5-kompatibel (AVC+AAC+MP4) transkodiert.
 +
 +Will man den Film anschließend, beim vor- oder zurückspulen bzw. bei anschließenden Schnitt mit "copy", genauer positionieren können, dann muss man einen sehr kurzen Abstand zwischen den I-Frames angeben (in diesem Beispiel "-keyint_min 1-4" [Standard sind "25"]):
 +  > ffmpeg -i film.avi -ss 60 -t 400 -keyint_min 1-4 -c:v libx264 -crf 20 -c:a libfaac -q:a 160 -ar 44100 -f mp4 -y film.mp4
 +
 +
 +===== Audio und Video trennen =====
 +
 +Manchmal ist es nötig die Audio- und Videospur getrennt zu bearbeiten.
 +
 +
 +==== Audiospur extrahieren ====
 +
 +erste Tonspur aus dem Film extrahieren:
 +  > ffmpeg -i <rein> -vn <raus>.wav
 +
 +  * -vn die Videospur wird nicht benötigt
 +
 +hier werden von der ersten Tonspur ab der 1870. Sekunde 217 Sekunden im CD-kompatiblen WAVE-Format exportiert:
 +  > ffmpeg -i Film.mkv -vn -acodec pcm_s16le -ar 44100 -ac 2 -ss 1870 -t 217 -y Ton_217Sekunden.wav
 +
 +
 +=== nicht nur die erste Tonspur extrahieren ===
 +
 +Nummern der einzelnen Tonspuren ermitteln:
 +  > ffmpeg -i <rein> 2>&1 | fgrep Stream
 +      Duration: 00:01:56.38, start: 0.287267, bitrate: 430530 kb/s
 +      Stream #0.0[0x1e0]: Video: mpeg2video (Main), yuv420p, 720x576 [PAR 64:45 DAR 16:9], 9800 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc
 +      Stream #0.1[0x25]: Subtitle: dvdsub
 +      Stream #0.2[0x26]: Subtitle: dvdsub
 +      Stream #0.3[0x27]: Subtitle: dvdsub
 +      Stream #0.4[0x28]: Subtitle: dvdsub
 +      Stream #0.5[0x29]: Subtitle: dvdsub
 +      Stream #0.6[0x2a]: Subtitle: dvdsub
 +      Stream #0.7[0x2b]: Subtitle: dvdsub
 +      Stream #0.8[0x2c]: Subtitle: dvdsub
 +      Stream #0.9[0x2d]: Subtitle: dvdsub
 +      Stream #0.10[0x2e]: Subtitle: dvdsub
 +      Stream #0.11[0x2f]: Subtitle: dvdsub
 +      Stream #0.12[0x30]: Subtitle: dvdsub
 +      Stream #0.13[0x31]: Subtitle: dvdsub
 +      Stream #0.14[0x32]: Subtitle: dvdsub
 +      Stream #0.15[0x80]: Audio: ac3, 48000 Hz, 5.1, s16, 384 kb/s
 +      Stream #0.16[0x81]: Audio: ac3, 48000 Hz, 5.1, s16, 384 kb/s
 +      Stream #0.17[0x82]: Audio: ac3, 48000 Hz, 5.1, s16, 384 kb/s
 +      Stream #0.18[0x83]: Audio: ac3, 48000 Hz, stereo, s16, 192 kb/s
 +      Stream #0.19[0x84]: Audio: ac3, 48000 Hz, 5.1, s16, 384 kb/s
 +
 +Hier sehen wir, dass die Tonspuren die Nummern von "0.15" bis "0.19" haben.
 +
 +zweite Tonspur aus dem Film extrahieren:
 +  > ffmpeg -i <rein> -vn -map 0.16 <raus>.wav
 +  ...
 +  Stream mapping:
 +    Stream #0.16 -> #0.0
 +  ...
 +
 +dritte Tonspur aus dem Film extrahieren:
 +  > ffmpeg -i <rein> -vn -map 0.17 <raus>.wav
 +  ...
 +  Stream mapping:
 +    Stream #0.17 -> #0.0
 +  ...
 +
 +
 +=== Tonspur transcodieren ===
 +
 +Wie die Tonspur vom WAVE- in MP3-Format transcodiert wird, steht hier : [[Audio#von WAV zu MP3]].
 +
 +zum Beispiel so (nur stereo):
 +  > lame -q 0 -V 3 tonspur.wav tonspur.mp3
 +
 +5.1 Kanäle erhalten und in ein 5.1 AAC (M4A) übertragen:
 +  > faac -I 5,6 -C 6 -q 160 -w -o tonspur.m4a tonspur.wav
 +
 +
 +==== Videospur extrahieren ====
 +
 +  > ffmpeg -i <rein> -an -vcodec copy film_stumm.mp4
 +
 +  * -an ohne Ton
 +  * -vcodec copy die Videospur unverändert kopieren
 +
 +
 +
 +===== Video und Audio wieder zu einem Film vereinen =====
 +
 +__einfach nur zusammen-muxen:__
 +  > ffmpeg -i film_stumm.mp4 -i tonspur.mp4 -c:v copy -c:a copy -f mp4 film.mp4
 +
 +__mit Anpassung der Tonspur:__
 +  > ffmpeg -i film_stumm.mp4 -i tonspur.mp3 -vcodec copy -async 10 -ab 128k film.mp4
 +
 +  * -vcodec copy (Videospur nicht verändern, nur kopieren)
 +  * -async 10    (Da die Tonspur jetzt etwas länger ist, muss hier angepasst werden)
 +  * -ab 128k     (Bitrate der Tonspur)
 +
 +__mit der Option ''-shortest'' wird der Film nur so groß, wie das kürzeste INPUT-Stück ist:__
 +  > ffmpeg -i film_stumm.mp4 -i tonspur.mp4 -c:a copy -c:v copy -shortest -f mp4 film.mp4
 +
 +__[[https://joergnapp.de/ffmpeg-mehrere-tonspuren-film/|eine Video-Spur mit mehrere Tonspuren zusammen-muxen]]:__
 +  > ffmpeg -i Video.mp4 -i deutsch_Audio.flac -i englisch_Audio.flac -c:v copy -c:a copy -map 0:0 -map 1:0 -map 2:0 -metadata:s:a:0 language=ger -metadata:s:a:1 language=eng -f matroska -y Video_-_deutsch+englisch.mkv
 +
 +  # -i Video.mp4 -i deutsch_Audio.flac -i englisch_Audio.flac      - 1., 2. und 3. Datei
 +  # -c:v copy                                                      - Video-Spuren kopieren
 +  # -c:a copy                                                      - Audio-Spuren kopieren
 +  # -map 0:0                                                       - aus der 1. Datei die erste Spur (Video)
 +  # -map 1:0                                                       - aus der 2. Datei die erste Spur (Audio - Deutsch)
 +  # -map 2:0                                                       - aus der 3. Datei die erste Spur (Audio - Englisch)
 +  # -metadata:s:a:0 language=ger                                   - die 1. Audio-Spur ist Deutsch
 +  # -metadata:s:a:1 language=eng                                   - die 2. Audio-Spur ist Englisch
 +
 +__zu einem Video eine weitere Tonspur hinzufügen:__
 +  > ffmpeg -i Video_englisch.mp4 -i deutsch_Audio.flac -c:v copy -c:a copy -map 0:0 -map 1:0 -map 2:1 -metadata:s:a:0 language=ger -metadata:s:a:1 language=eng -f matroska -y Video_-_deutsch+englisch.mkv
 +
 +  # -i Video.mp4 -i deutsch_Audio.flac -i englisch_Audio.flac      - 1., 2. und 3. Datei
 +  # -c:v copy                                                      - Video-Spuren kopieren
 +  # -c:a copy                                                      - Audio-Spuren kopieren
 +  # -map 0:0                                                       - aus der 1. Datei die erste Spur (Video)
 +  # -map 1:0                                                       - aus der 2. Datei die erste Spur (Audio - Deutsch)
 +  # -map 0:1                                                       - aus der 1. Datei die zweite Spur (Audio - Englisch)
 +  # -metadata:s:a:0 language=ger                                   - die 1. Audio-Spur ist Deutsch
 +  # -metadata:s:a:1 language=eng                                   - die 2. Audio-Spur ist Englisch
 +
 +
 +__zu einem Video mit zwei Tonspuren, eine Untertitelspur hinzufügen:__
 +  > ffmpeg -i Video_-_deutsch+englisch.mkv -i untertitel_-_englisch.srt -c:v copy -c:a copy -c:s copy -map 0:0 -map 0:1 -map 0:2 -map 1 -metadata:s:a:0 language=ger -metadata:s:a:1 language=eng -metadata:s:s:0 language=eng -f matroska -y Video_-_deutsch+englisch+untertitel.mkv
 +
 +  # -i Video_-_deutsch+englisch.mkv -i untertitel_-_englisch.srt   - 1. und 2. Datei
 +  # -c:v copy                                                      - Video-Spuren kopieren
 +  # -c:a copy                                                      - Audio-Spuren kopieren
 +  # -c:s copy                                                      - Untertitel-Spuren kopieren
 +  # -map 0:0                                                       - aus der 1. Datei die erste Spur (Video)
 +  # -map 0:1                                                       - aus der 1. Datei die zweite Spur (Audio - Deutsch)
 +  # -map 0:2                                                       - aus der 1. Datei die dritte Spur (Audio - Englisch)
 +  # -map 1                                                         - aus der 2. Datei die Spur (Untertitel - Englisch)
 +  # -metadata:s:a:0 language=ger                                   - die 1. Audio-Spur ist Deutsch
 +  # -metadata:s:a:1 language=eng                                   - die 2. Audio-Spur ist Englisch
 +  # -metadata:s:s:0 language=eng                                   - die 1. Untertitel-Spur ist Englisch
 +
 +
 +==== Film in den Matroska-Kontainer schreiben ====
 +
 +  > ffmpeg -i film.mpg -c:a copy -c:v copy -f matroska film.mkv
 +  > ffmpeg -fflags +genpts -i film.mpg -acodec copy -vcodec copy -f matroska film.mkv
 +
 +
 +==== Film in den MP4-Kontainer schreiben ====
 +
 +  > ffmpeg -i film.mpg -c:a copy -c:v copy -f mp4 film.mp4
 +
 +
 +
 +===== eine kleine Kurzanleitung =====
 +
 +
 +=== Target: DVD ===
 +
 +Quelle-PAL.avi
 +  dargestellt in 720x576 => 1024x576 (16/9)
 +  
 +  ...
 +  ==========================================================================
 +  Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
 +  libavcodec version 53.35.0 (external)
 +  Mismatching header version 53.32.2
 +  Selected video codec: [ffh264] vfm: ffmpeg (FFmpeg H.264)
 +  ==========================================================================
 +  ==========================================================================
 +  Requested audio codec family [mpg123] (afm=mpg123) not available.
 +  Enable it at compilation.
 +  Opening audio decoder: [ffmpeg] FFmpeg/libavcodec audio decoders
 +  AUDIO: 48000 Hz, 2 ch, floatle, 192.0 kbit/6.25% (ratio: 24000->384000)
 +  Selected audio codec: [ffmp3float] afm: ffmpeg (FFmpeg MPEG layer-3 audio)
 +  ==========================================================================
 +  ...
 +
 +
 +== ntsc-dvd ==
 +
 +Zielformat: 720x480 (dargestellt in => 854x480)
 +  > ffmpeg -i Quelle-PAL.avi -target ntsc-dvd -y <raus>.mpeg
 +  ...
 +  ==========================================================================
 +  Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
 +  libavcodec version 53.35.0 (external)
 +  Mismatching header version 53.32.2
 +  Selected video codec: [ffmpeg2] vfm: ffmpeg (FFmpeg MPEG-2)
 +  ==========================================================================
 +  ==========================================================================
 +  Opening audio decoder: [ffmpeg] FFmpeg/libavcodec audio decoders
 +  AUDIO: 48000 Hz, 2 ch, s16le, 448.0 kbit/29.17% (ratio: 56000->192000)
 +  Selected audio codec: [ffac3] afm: ffmpeg (FFmpeg AC-3)
 +  ==========================================================================
 +  ...
 +
 +
 +== pal-dvd ==
 +
 +Zielformat: **720x576** (dargestellt in => **1024x576**)
 +  > ffmpeg -i Quelle-PAL.avi -target pal-dvd -y <raus>.mpeg
 +  ...
 +  ==========================================================================
 +  Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
 +  libavcodec version 53.35.0 (external)
 +  Mismatching header version 53.32.2
 +  Selected video codec: [ffmpeg2] vfm: ffmpeg (FFmpeg MPEG-2)
 +  ==========================================================================
 +  ==========================================================================
 +  Opening audio decoder: [ffmpeg] FFmpeg/libavcodec audio decoders
 +  AUDIO: 48000 Hz, 2 ch, s16le, 448.0 kbit/29.17% (ratio: 56000->192000)
 +  Selected audio codec: [ffac3] afm: ffmpeg (FFmpeg AC-3)
 +  ==========================================================================
 +  ...
 +
 +
 +== film-dvd ==
 +
 +Zielformat: 720x480 (dargestellt in => 854x480)
 +  > ffmpeg -i Quelle-PAL.avi -target film-dvd -y <raus>.mpeg
 +  ...
 +  ==========================================================================
 +  Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
 +  libavcodec version 53.35.0 (external)
 +  Mismatching header version 53.32.2
 +  Selected video codec: [ffmpeg2] vfm: ffmpeg (FFmpeg MPEG-2)
 +  ==========================================================================
 +  ==========================================================================
 +  Opening audio decoder: [ffmpeg] FFmpeg/libavcodec audio decoders
 +  AUDIO: 48000 Hz, 2 ch, s16le, 448.0 kbit/29.17% (ratio: 56000->192000)
 +  Selected audio codec: [ffac3] afm: ffmpeg (FFmpeg AC-3)
 +  ==========================================================================
 +  ...
 +
 +
 +== ein Skript um Filme ins DVD-Format zu transkodieren ==
 +
 +<file>
 +#!/bin/bash
 +
 +#------------------------------------------------------------------------------#
 +#
 +# Dieses Skript übersetzt einen Film, der als Parameter uebergeben wurde,
 +# in DVD-Format (MPEG-2).
 +#
 +# Ein Film mit folgenden Eigenschaften:
 +# - 725 MB gross
 +# - 1 Stunde Spieldauer
 +# - 720x576 Bildpunkte (PAL) im 16/9 - Format
 +# - H264 - Video-Codec, 1460.2 kbps, 24bpp  25.000 fps
 +# - MP3 - Audio-Codec, 192.0 kbit, 48000 Hz, 2 ch,
 +# dauert die Uebersetzung auf einem "Intel(R) Core(TM) i7 CPU 2.93GHz"
 +# ca. 12 Minuten.
 +# Das Ergebnis ist dann 2670 MB groß.
 +#
 +#------------------------------------------------------------------------------#
 +
 +if [ -z "${1}" ] ; then
 +        echo "${0} Film.avi"
 +        exit 1
 +else
 +        ### Zielformat: 720x480 (dargestellt in => 854x480)
 +        #ffmpeg -i ${1} -target ntsc-dvd -y ${1}.mpeg
 +
 +        ### Zielformat: 720x576 (dargestellt in => 1024x576)
 +        ffmpeg -i ${1} -target pal-dvd -y ${1}.mpeg
 +
 +        ### Zielformat: 720x480 (dargestellt in => 854x480)
 +        #ffmpeg -i ${1} -target film-dvd -y ${1}.mpeg
 +fi
 +</file>
 +
 +
 +=== mpeg1/mp2/mpeg ===
 +
 +  > rm -f ffmpeg2pass-*.log
 +  > ffmpeg -i <rein> -b 3000k -pass 1 -y <raus>.mpg
 +  > ffmpeg -i <rein> -b 3000k -pass 2 -y <raus>.mpg
 +  > rm -f ffmpeg2pass-*.log
 +
 +
 +=== mpeg2/mp2/mpeg ===
 +
 +  > rm -f ffmpeg2pass-*.log
 +  > ffmpeg -i <rein> -b 3000k -vcodec mpeg2video -pass 1 -y <raus>.mpg
 +  > ffmpeg -i <rein> -b 3000k -vcodec mpeg2video -pass 2 -y <raus>.mpg
 +  > rm -f ffmpeg2pass-*.log
 +
 +
 +=== mpeg4/mp2 (ASP/DivX5) ===
 +
 +  > ffmpeg -i <rein> -vcodec mpeg4 -y <raus>.avi
 +  > ffmpeg -i <rein> -vcodec mpeg4 -y <raus>.mkv
 +
 +
 +=== mpeg4/aac/mp4 (ASP/DivX5) ===
 +
 +  > ffmpeg -i <rein> -vcodec mpeg4 -y <raus>.mp4
 +
 +
 +=== mpeg4/mp3 (ASP/DivX5) ===
 +
 +  > ffmpeg -i <rein> -acodec libmp3lame -y <raus>.avi
 +  > ffmpeg -i <rein> -acodec libmp3lame -y <raus>.mp4
 +  > ffmpeg -i <rein> -acodec libmp3lame -y <raus>.mkv
 +
 +
 +=== mpeg4/mp2/avi (ASP/Xvid) ===
 +
 +  > ffmpeg -i <rein> -vcodec libxvid -y <raus>.avi
 +
 +
 +=== mpeg4/mp3/avi (ASP/Xvid) ===
 +
 +  > ffmpeg -i <rein> -vcodec libxvid -acodec libmp3lame -y <raus>.avi
 +
 +
 +=== mpeg4/mp2 (AVC) ===
 +
 +Bei dem ''x264''-Codec reicht der Parameter "-vcodec" nicht mehr aus (wie bei den oben genannten),
 +hier muss noch ein "Preset" mit dem Parameter "-vpre" angegeben werden.
 +
 +  > ffmpeg -i <rein> -vcodec libx264 -vpre max -y <raus>.avi
 +  > ffmpeg -i <rein> -vcodec libx264 -vpre max -y <raus>.mkv
 +
 +
 +=== mpeg4/mp3 (AVC) ===
 +
 +  > ffmpeg -i <rein> -vcodec libx264 -vpre max -acodec libmp3lame -y <raus>.avi
 +  > ffmpeg -i <rein> -vcodec libx264 -vpre max -acodec libmp3lame -y <raus>.mp4
 +  > ffmpeg -i <rein> -vcodec libx264 -vpre max -acodec libmp3lame -y <raus>.mkv
 +
 +
 +=== mpeg4/aac/mkv (AVC) ===
 +
 +  > ffmpeg -i <rein> -vcodec libx264 -vpre max -acodec libfaac -y <raus>.mkv
 +
 +
 +=== mpeg4/aac/mp4 (AVC) ===
 +
 +FreeBSD 9.2:
 +  > portmaster multimedia/ffmpeg
 +  > ffmpeg -i <rein> -c:v libx264 -y <raus>.mp4
 +  
 +  > ffmpeg -i <rein> -vcodec libx264 -c:a libfaac -y <raus>.mp4
 +  > ffmpeg -i <rein> -vcodec libx264 -vpre max -c:a libfaac -y <raus>.mp4
 +
 +Installation auf Ubuntu 12.04:
 +  > aptitude install libav-tools libavcodec-extra-53
 +  > avconv -i <rein> -c:v libx264 -y <raus>.mp4
 +  
 +  > avconv -i <rein> -c:v libx264 -c:a libvo_aacenc -y <raus>.mp4
 +  > avconv -i <rein> -c:v libx264 -preset veryslow -c:a libvo_aacenc -y <raus>.mp4
 +
 +__Beispiele:__
 +  # In Klammern steht die Anzahl von kodierten Bildern pro Sekunde,
 +  # wie sie bei einem Beispeil kodiert wurden.
 +  # Wenig kodierte Bilder pro Sekunde deuten auf eine längere Kodierzeit und
 +  # eine bessere Bildqualitaet im kodierten Video hin.
 +  # Zu beachten ist auch, dass die Bildqualitaet nicht besser als im Original
 +  # werden kann!
 +  
 +  # veryslow (30):
 +  > avconv -i <rein> -c:v libx264 -preset veryslow -crf 25 -c:a libvo_aacenc -y <raus>.mp4
 +  
 +  # medium (115):
 +  > avconv -i <rein> -c:v libx264 -preset medium -crf 25 -c:a libvo_aacenc -y <raus>.mp4
 +  
 +  # Standard (130):
 +  > avconv -i <rein> -c:v libx264 -c:a libvo_aacenc -y <raus>.mp4
 +  
 +  # fast (130):
 +  > avconv -i <rein> -c:v libx264 -preset fast -crf 25 -c:a libvo_aacenc -y <raus>.mp4
 +  
 +  # faster (170):
 +  > avconv -i <rein> -c:v libx264 -preset faster -crf 25 -c:a libvo_aacenc -y <raus>.mp4
 +  
 +  # veryfast (230):
 +  > avconv -i <rein> -c:v libx264 -preset veryfast -crf 25 -c:a libvo_aacenc -y <raus>.mp4
 +  
 +  # superfast (355):
 +  > avconv -i <rein> -c:v libx264 -preset superfast -crf 25 -c:a libvo_aacenc -y <raus>.mp4
 +  
 +  # ultrafast (420):
 +  > avconv -i <rein> -c:v libx264 -preset ultrafast -crf 25 -c:a libvo_aacenc -y <raus>.mp4
 +
 +  #
 +  ### Test-Kommandos:
 +  #
 +  # Standard  (bester Kompromis):  avconv -i ${1} -c:v libx264 -c:a libvo_aacenc -y ${1}.mp4
 +  # veryslow  (am kleinsten):  avconv -i ${1} -c:v libx264 -preset veryslow -crf 25 -c:a libvo_aacenc -y ${1}.mp4
 +  # ultrafast (am schnellsten):  avconv -i ${1} -c:v libx264 -preset ultrafast -crf 25 -c:a libvo_aacenc -y ${1}.mp4
 +  #
 +  #
 +  ### Testergebnisse:
 +  
 +   Gr. in % | Orig.-Gr. |  neue Gr.  | preset    | Transkodierdauer         | transkod. FPS | subjektive Qualität
 +  ----------+-----------+------------+-----------+--------------------------+---------------+----------------------------
 +    100.0 % | 741668 kB |  741668 kB | Original  | ---                      |   ---         
 +     67.0 % | 741668 kB |  497268 kB | veryfast  | 06:35 Minuten (~07 Min.) | ~ 230         | schlechter als superfast
 +     71.3 % | 741668 kB |  529156 kB | veryslow  | 65:27 Minuten (~65 Min.) | ~  30         | wie Original
 +     72.2 % | 741668 kB |  535272 kB | faster    | 08:48 Minuten (~09 Min.) | ~ 170         
 +     73.7 % | 741668 kB |  546652 kB | medium    | 12:22 Minuten (~12 Min.) | ~ 120         
 +     74.7 % | 741668 kB |  554044 kB | fast      | 10:57 Minuten (~11 Min.) | ~ 130         
 +     90.6 % | 741668 kB |  671876 kB | superfast | 04:07 Minuten (~04 Min.) | ~ 355         | schlechter als ultrafast
 +     91.6 % | 741668 kB |  679264 kB | Standard  | 13:16 Minuten (~13 Min.) | ~ 130         
 +    149.3 % | 741668 kB | 1107644 kB | ultrafast | 03:16 Minuten (~03 Min.) | ~ 420         | fast wie Original
 +
 +
 +==== FFmpeg mit dem x264-Encoder ====
 +
 +  # ffmpeg -r 25 -i <rein> -v 0 -vcodec rawvideo -vsync 0 -an -r 25 -pix_fmt yuv420p -f rawvideo - | x264 --fps 25 --crf 16 -b 3 --vbv-maxrate 40000 --vbv-bufsize 30000 --level 4.1 --keyint 24 --b-pyramid --aud --colorprim bt709 --transfer bt709 --colormatrix bt709 --sar 1:1 -o <raus>.mkv - 720x576
 +
 +  * [[https://encodingwissen.de/codecs/x264/referenz/|Referenz für die x264-Kommandozeile]]
 +  * [[http://blog.mediacoderhq.com/h264-profiles-and-levels/|H.264 profiles and levels]]
 +
 +
 +===== Fehlermeldungen =====
 +
 +
 +==== Past duration 0.XXXXXX too large ====
 +
 +[[https://stackoverflow.com/questions/30782771/what-does-past-duration-x-xxx-too-large-mean|stackoverflow - Antwort 47]]:\\
 +Die Fehlermeldung verschwindet, wenn anstelle der Ausgabe-Bildwiederholfrequenz die Bildwiederholfrequenz (FPS) für die Eingabe (Originalfilm) angegeben wird. Die Ausgabe-Bildwiederholfrequenz wird dann automatisch so gewählt, dass sie der, der Eingabe-Bildwiederholfrequenz entspricht.
 +
 +Es muss die Option ''-framerate'' mit der __richtigen__ //Bildwiederholfrequenz// vor dem Film angegeben werden!
 +  > ffprobe Originalfilm.mp4
 +  ...
 +  Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, smpte170m/smpte170m/bt470m), 1680x1050 [SAR 1:1 DAR 8:5], 20313 kb/s, 59.64 fps, 59.94 tbr, 90k tbn, 120 tbc (default)
 +  ...
 +
 +Allerdings hat bei mir die Option ''-framerate'' nicht funktioniert, deshalb musste ich ''-r'' verwenden.
 +  > ffmpeg -r 59.64 Originalfilm.mp4 -map 0:v -c:v libx264 -profile:v high -preset veryslow -tune film -crf 20 -map 0:a:0 -c:a libfdk_aac -b:a 160k -f mp4 -y Film.mp4
 +