Ffmpeg: Unterschied zwischen den Versionen
Aus exmediawiki
C.heck (Diskussion | Beiträge) |
C.heck (Diskussion | Beiträge) |
||
Zeile 191: | Zeile 191: | ||
* see discussion: https://unix.stackexchange.com/questions/28803/how-can-i-reduce-a-videos-size-with-ffmpeg | * see discussion: https://unix.stackexchange.com/questions/28803/how-can-i-reduce-a-videos-size-with-ffmpeg | ||
− | ffmpeg -i input.mkv -vf "scale=iw/2:ih/2" half_the_frame_size.mkv | + | '''$ ffmpeg -i input.mkv -vf "scale=iw/2:ih/2" half_the_frame_size.mkv''' |
− | ffmpeg -i input.mkv -vf "scale=iw/3:ih/3" a_third_the_frame_size.mkv | + | '''$ ffmpeg -i input.mkv -vf "scale=iw/3:ih/3" a_third_the_frame_size.mkv''' |
− | ffmpeg -i input.mkv -vf "scale=iw/4:ih/4" a_fourth_the_frame_size.mkv | + | '''$ ffmpeg -i input.mkv -vf "scale=iw/4:ih/4" a_fourth_the_frame_size.mkv''' |
===Animation (Film) aus Einzelbildern=== | ===Animation (Film) aus Einzelbildern=== |
Version vom 29. Juni 2019, 16:09 Uhr
Inhaltsverzeichnis
- 1 Einführung
- 2 Beispiele
- 3 Unterstützte Codecs und Formate
Einführung
Das ffmpeg-Projekt (www.ffmpeg.org) besteht aus einer Reihe von freien Computerprogrammen und Programmbibliotheken, welche digitales Video- und Audiomaterial aufnehmen, konvertieren, senden (streamen) und in verschiedene Containerformate verpacken können. Unter anderem enthält es mit libavcodec eine Sammlung unterschiedlicher Audio- und Video-Codecs.
ffmpeg wird unter Linux und anderen Unix-artigen Systemen entwickelt und wurde auch auf andere Betriebssysteme und Plattformen portiert. Bekannte Programme die ffmpeg verwenden, sind zum Beispiel Avidemux, ffdshow, GStreamer, HandBrake, MediaCoder, MPlayer, VLC media player, xine, ZoneMinder und Kdenlive.
Komponenten und Bibliotheken
- ffmpeg ist ein Kommandozeilenprogramm, um von einem Video-, Audio- oder Bildformat zu einem anderen zu konvertieren.
- ffserver ist ein HTTP-Multimedia- bzw. RTP- und RTSP-Streaming-Server für Audio- und Video-Übertragungen (auch live) über das Internet.
- libavcodec enthält alle ffmpeg-Audio- und -Video-Encoder und -Decoder. Die meisten Codecs wurden von Grund auf neu geschrieben. Diese Bibliothek kann von anderen Programmen benutzt werden, um dann die Filme selber darzustellen.
- libavformat enthält die Container-Parser und -Ersteller für alle herkömmlichen Audio- und Video-Containerformate (beispielsweise AVI, Mov, MKV, Ogg/Ogg Media etc.).
Syntax
$ ffmpeg [[infile Options][`-i' infile]]... {[outfile Options] outfile}...
- infile Options Optionen für die Eingangsdatei setzen
- -i infile Dateiname der Eingangsdatei
- outfile Options Optionen für die Ausgangsdatei setzen
- outfile Dateiname der Ausgangsdatei
Es ist wichtig die Reihenfolge streng einzuhalten. Auch beim setzen der Optionen. Was soll als erstes gemacht werden? Was danach? etc.
Info Optionen
-L die Lizenz
-h Hilfe
-version aktuelle Version
-formats Liste der verfügbaren Formate und Codecs, unterteilt in: D für decodieren möglich E für encodieren möglich V/A/S für Video- Audio- Subtitel- Codec
-i Dateiname -i steht eigentlich nicht für Information sondern für infile (siehe unten) aber mit z.B.: $ ffmpeg -i file.avi erhält man einige hilfreiche Infos über das jeweilige File (wenn man die Fehlermeldung ignoriert;-)
Generelle Optionen
-i Dateiname Dateiname der Eingangsdatei
-y überschreiben
-t Dauer Aufnahmne- bzw. Transkodierzeit in Sekunden (gut wenn man nur einen kurzen Test- Schnipsel von ein paar Sekunden transkodieren möchte)
-fs Größenlimit setzt das Limit der (Ausgabe-) Dateigröße
-metadata key=value Metadaten hinzufügen z.B.: Bsp.: $ ffmpeg -i in.avi -metadata title="my title" out.flv
-dframes Zahl setzt die Zahl der aufzunehmenden Datenframes
-target Filtyp den Ausgangs- Datentypen spezifizieren "vcd", "svcd", "dvd", "dv", "dv50", "pal-vcd", "ntsc-svcd", ...z.B.: Bsp.: $ ffmpeg -i in.avi -target vcd VCD-out.mpg
-loop_output Anzahl setzt die Anzahl der gewünschten Loop- häufigkeit (nur für Formate die Loop unterstützen) Anzahl "0" bedeutet Dauerloop
-async samples per second synchronisiert nach dem encoden wieder die audio- mit der videospur, guter Wert = 50
Video Optionen
-b Bitrate setzt die Bitrate in "kbit/s", Default- Wert = 200k Bsp.: $ ffmpeg -i in.avi -b 200k out.mpg
-vframes Anzahl setzt die Anzahl der aufzunehmenden Videoframes
-vcodec Codec- Name Erzwinge erwünschten Codec, siehe List of Codecs (copy um alten Codec beizubehalten)
-r Framerate setzt die Framerate, Default = 25
-s Framegröße setzt die Framegröße, Framegröße = z.b. 352x200, oder eine gängige Größe mit Hilfe der jeweiligen Abkürzung verwenden: sqcif -> 128x96 qcif -> 176x144 cif -> 352x288 4cif -> 704x576 16cif -> 1408x1152 qqvga -> 160x120 qvga -> 320x240 vga -> 640x480 svga -> 800x600 xga -> 1024x768 uxga -> 1600x1200 qxga -> 2048x1536 sxga -> 1280x1024 qsxga -> 2560x2048 hsxga -> 5120x4096 wvga -> 852x480 wxga -> 1366x768 wsxga -> 1600x1024 wuxga -> 1920x1200 woxga -> 2560x1600 wqsxga -> 3200x2048 wquxga -> 3840x2400 whsxga -> 6400x4096 whuxga -> 7680x4800 cga -> 320x200 ega -> 640x350 hd480 -> 852x480 hd720 -> 1280x720 hd1080 -> 1920x1080
-aspect Format setzt Format, z.B.: 4:3, 16:9, 1.3333, 1.7777, etc. Bsp.: $ ffmpeg -i input.flv -target pal-dvd -aspect 4:3 output.mpg
-vf crop=Breite:Höhe:s:y schneidet gewünschten Teil des Bildfensters aus z.B.: Bsp.: $ ffmpeg -i in.avi -vf crop=720:460:0:80 out.avi
-newvideo legt eine neue Videospur über die Alte
-vn disable Video (-Aufnahme)
-sameq Videoqualität des Inputfiles beibehalten
-pass Durchgangszahl "2-Pass-Encoding", das bedeutet, dass dasselbe File zwei mal hintereinander Encodiert wird, wobei ffmpeg das erste mal ein Logfile schreibt, das es beim zweiten Durchgang zur Optimierung verwendet. Es dauert dann zwar doppelt so lange, aber der Qualitätsgewinn bei ziemlich gleicher Filegröße, machts wieder wett. Bsp.: $ ffmpeg -i in.vob -pass 1 -b 1200k -ab 128k -async 50 out.mp4 $ ffmpeg -i in.vob -y -pass 2 -b 1200k -ab 128k -async 50 out.mp4 -pass 1 -> der erste Durchgang -y -> das erste File überschreiben -ab -> Audiobitrate (siehe unten) -pass 2 -> der zweite Durchgang
Audio Optionen
-aframes Anzahl setzt die Anzahl der aufzunehmenden Videoframes
-ar Samplingrate setzt die Samplingrate, Default- Wert = 44100 Hz Bsp.: $ ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2
-ab Bitrate setzt die Bitrate in bit/s, Default- Wert = 64k -> eher schlechte Qualität 128k -> gute Qualität 192k -> sehr gute Qualität
-aq Qualität setzt die Audioqualität, "-aq 60" entspricht in etwa "-ab 192k"
-ac Kanalanzahl setzt die Anzahl der gewünschten Kanäle (Mono /Stereo) Bsp.: $ ffmpeg -i audio.wav -acodec mp2 -ac 1 -ar 22050 -ab 64k audio.mp2
-an disable Audiospur
-acodec Codec- Name force erwünschten Audiocodec, siehe List of Codecs (copy um alten Codec beizubehalten) Bsp.: $ ffmpeg -i audio.wav -acodec mp3 -ab 192k audio.mp3
-newaudio legt eine neue Audiospur über die Alte
-vol Lautstärke ändert die Lautstärke, Default- Wert = 256
-async Synchronisationswert in samples per sec Audio- mit Videospur nach dem Enkodieren wieder synchronisieren (Wert 1- mayimale Samplingrate des Files pro Sekunde)
Untertitel Optionen
-scodec Codec- Name Force Untertitelcodec
-newsubtitle fügt neue Untertitelspur hinzu
-sn disable Untertitelspur
Beispiele
Filesize reduzieren by reducing frame size
- https://trac.ffmpeg.org/wiki/Scaling
- see discussion: https://unix.stackexchange.com/questions/28803/how-can-i-reduce-a-videos-size-with-ffmpeg
$ ffmpeg -i input.mkv -vf "scale=iw/2:ih/2" half_the_frame_size.mkv
$ ffmpeg -i input.mkv -vf "scale=iw/3:ih/3" a_third_the_frame_size.mkv
$ ffmpeg -i input.mkv -vf "scale=iw/4:ih/4" a_fourth_the_frame_size.mkv
Animation (Film) aus Einzelbildern
$ ffmpeg -f image2 -i image%d.jpg -b 500k output.avi
-f image2 teilt das Eingabeformat mit (Bilder)
-i image%d.jpg die Input-Datei(en)
%03d siehe: Wildcards
-b 500k setzt die Video-Bitrate auf 500kbit/s (der default-Wert ist 200k)
output.avi die Ausgabe-Datei (hier mpg, könnte aber auch z.B. .mov oder .flv etc. sein)
Einzelbilder aus Animation (Film)
$ ffmpeg -i input.avi image%03d.jpg
generiert image1.jpg, image2.jpg, image3.jpg, etc.
Tonspur aus Film extrahieren
$ ffmpeg -i film.mov -vn -ar 44100 -ac 2 -ab 192 -f aiff ton.aiff
-vn keine Videospur wird benötigt
-ar samplerate 44100
-ab bitrate auf 192k
-ac 2- Kanal
-f angegebenes Format verwenden
Tonspur bearbeiten um sie auf CD zu brennen
$ ffmpeg -i film.flv -vn -acodec pcm_s16le -ar 44100 -ac 2 audio.wav
Tonspur als mp3
$ ffmpeg -i film.flv -vn -acodec copy audio.mp3
(bearbeitete) Tonspur und Videospur verbinden
$ ffmpeg -i film_stumm.mov -i audio.aiff -vcodec copy -async 10 -ab 128k newfilm.mov
-vcodec copy das Video einfach nur kopieren
-async 10 manchmal wird durch (mehrmaliges) Ändern des Codecs das Soundfile ein paar Sekunden länger als der Film. ffmpeg staucht das wieder zurecht, damit Bild und Ton synchron bleiben.
-ab 128k die Audio-Bitrate (Qualität)
DVD kopieren
vobcopy installieren (über apt-get bei linux oder MacPorts bei OSX)
$ sudo apt-get install vobcopy
- DVD auf Festplatte kopieren
$ vobcopy -m -o Zielverzeichnis
-m --mirror | spiegelt die gesamte DVD auf Festplatte -o --output-dir | gibt das Zielverzeichnis für die Kopien an
VOB- Dateien enkodieren
$ ffmpeg -i VTS_07_2.VOB -b 2000k -s 720x576 -acodec libmp3lame -ab 128k -async 50 output.avi
-b 2000k Videobitrate von 2000kbit/s, kann auch niedriger z.B. 900k gesetzt werden.... je nach Qualitätswunsch
-s 720x576 die Auflösung in Pixel
-acodec libmp3lame Audiocodec mp3
-ab 128k Audiobitrate (default wäre 64kbit/s)
-async 50 stellt sicher, dass Bild und Ton synchron bleiben (der Audiocodec ändert sich ja)
Clips aneinander hängen
$ cat clip1.avi clip2.avi > clip_t.avi $ ffmpeg -i clip_t.avi -sameq clip_lang.avi
-sameq Videoqualität des Inputfiles beibehalten
HD- Format encodieren
- VC-3 (aka Avid DNxHD) Encoding
$ ffmpeg -i input.avi -vcodec dnxhd -b <bitrate> -mbd rd -an output.mov
- <bitrate> z.B. folgende Werte: 36Mb, 60Mb, 90Mb, 120Mb, 185Mb (siehe Tabelle unten)
- -mbd rd für "best quality"
- unterstützte Auflösungen :
Project Format Auflösung Frame Size Bits FPS <bitrate>
1080i / 59.94 DNxHD 220 1920 x 1080 8 29.97 220Mb
1080i / 59.94 DNxHD 145 1920 x 1080 8 29.97 145Mb
1080i / 50 DNxHD 185 1920 x 1080 8 25 185Mb
1080i / 50 DNxHD 120 1920 x 1080 8 25 120Mb
1080p / 25 DNxHD 185 1920 x 1080 8 25 185Mb
1080p / 25 DNxHD 120 1920 x 1080 8 25 120Mb
1080p / 25 DNxHD 36 1920 x 1080 8 25 36Mb
1080p / 24 DNxHD 175 1920 x 1080 8 24 175Mb
1080p / 24 DNxHD 115 1920 x 1080 8 24 115Mb
1080p / 24 DNxHD 36 1920 x 1080 8 24 36Mb
1080p / 23.976 DNxHD 175 1920 x 1080 8 23.976 175Mb
1080p / 23.976 DNxHD 115 1920 x 1080 8 23.976 115Mb
1080p / 23.976 DNxHD 36 1920 x 1080 8 23.976 36Mb
1080p / 29.7 DNxHD 45 1920 x 1080 8 29.97 45Mb
720p / 59.94 DNxHD 220 1280x720 8 59.94 220Mb
720p / 59.94 DNxHD 145 1280x720 8 59.94 145Mb
720p / 50 DNxHD 175 1280x720 8 50 175Mb
720p / 50 DNxHD 115 1280x720 8 50 115Mb
720p / 23.976 DNxHD 90 1280x720 8 23.976 90Mb
720p / 23.976 DNxHD 60 1280x720 8 23.976 60Mb
Player
$ ffplay film.avi
Unterstützte Codecs und Formate
$ ffmpeg -formats
- encode/decode- Intermezzo
Ein Encoder (oder auch Coder/Codierer) ist ein System, das eine Datenquelle (z.B. ein digitales Audiosignal, ein Dateiformat, ein Computerbild, ein gegen Fehler empfindliches Datensignal) in ein für einen bestimmten Kanal geeignetes Format umwandeln soll.
Ein 'Encoder' arbeitet nach einer fest vorgegebenen Codiervorschrift, damit der Decoder auf der Empfängerseite das Signal wieder in das ursprüngliche Format zurückkonvertieren kann.
Zu einem Encoder gehört also immer ein "entgegengesetzt" arbeitender Decoder.
- List of Video- Codecs
http://www.ffmpeg.org/general.html#SEC6
- List of Audio- Codecs
http://www.ffmpeg.org/general.html#SEC7
- List of File- Formats
http://www.ffmpeg.org/general.html#SEC4
- List of Image- Formats
http://www.ffmpeg.org/general.html#SEC5
- List of Subtitle- Formats