Seit einiger Zeit beschäftige ich mich damit, Zeitraffer-Videos selber zu machen. Die Vorgehensweise möchte ich jetzt mal schriftlich festhalten. Zum einen weil es auch andere interessieren könnte, und zum anderen weil es inzwischen so umfangreich geworden ist dass ich selber auch manchmal nachschauen muss wie ich das eigentlich gemacht habe.ASTRO ELECTRONIC
Dipl.-Ing. Michael Koch
Raabestr. 43 D-37412 Herzberg Germany
Tel: +49 (0)5521 854265 Fax: +49 (0)5521 854266
www.astro-electronic.de e-mailWie man Zeitraffer-Videos mit FFmpeg selber machen kann
Zum Aufnehmen der Einzelbilder könnte man viel schreiben, aber ich werde mich zunächst nur auf das notwendigste beschränken:
Nun haben wir
also hunderte oder tausende von Einzelbildern, aber wie macht man daraus
ein Video?
Hierfür
gibt
es das frei verfügbare Programm "FFmpeg", zu finden auf http://www.ffmpeg.org.
Man klickt zunächst auf "Download", dann auf
der nächsten
Seite auf "Windows Builds", und dann auf der nächsten Seite die "Static"
Version, entweder 32-bit oder 64-bit. Die ZIP-Datei wird dann in irgendein
Verzeichnis entpackt. Wo dieses Verzeichnis steht ist im Prinzip egal.
FFmpeg hat keine grafische Bedienoberfläche. Es wird über eine Kommandozeile gestartet. Da die Zeile viele Parameter enthält und entsprechend lang ist, ist es ratsam das Programm über ein Batch-File zu starten. Das sieht zum Beispiel so aus:
video.bat
c:/Programme/ffmpeg/bin/ffmpeg
-framerate 20 -start_number 3551 -i IMG_%%4d.jpg -codec:v mpeg4 -s 900x600
-q:v 2 Video_1.mp4
pause |
Bitte beachtet dass der gesamte Programmaufruf in einer Zeile stehen muss. Es stört aber nicht, wenn die Zeile im Editor automatisch am Ende umgebrochen wird. Der Befehl "pause" muss in einer neuen Zeile stehen.
c:/Programme/ffmpeg/bin/ffmpeg
Das ist der Pfad zu ffmpeg
-framerate
20 bedeutet,
dass das Video mit 20 Bildern pro Sekunde laufen soll
-start_number
3551 gibt die Nummer des ersten Bilden
an, das verwendet werden soll
-i IMG_%%4d.jpg
gibt
den Dateinamen der Bilder an. Dabei steht %%4d
für eine 4-stellige Nummer
-codec:v
mpeg4 bewirkt,
dass ein MP4 Video erzeugt wird
-s 900x600
gibt
die Bildgröße des Videos an, und kann auch kleiner oder größer
als die Größe der Einzelbilder sein
-q:v 2
gibt an in welcher Qualität das
Video erzeugt werden soll (genaue Bedeutung ist mir noch unklar)
Video_1.mp4
das
ist der Dateiname des erzeugten Videos
Der Befehl "pause" bewirkt, dass am Ende des Batch-Files erst noch auf einen Tastendruck gewartet wird, bevor das Fenster geschlossen wird. Das ist sinnvoll, damit man eventuelle Fehlermeldungen sehen kann.
Diese Batch-Datei
kopiert man in den gleichen Ordner wo sich auch die Bilder befinden. Dann
wird die Batch-Datei bearbeitet (Rechtsklick --> bearbeiten), d.h. die
Parameter werden entsprechend angepasst. Dann wird die Datei gespeichert.
Gestartet wird die Batch-Datei durch Doppelklick auf das Icon.
Problem:
Meine Kamera
erzeugt Bilder mit 4-stelliger Nummerierung. Dabei kann es passieren, dass
der Zähler von 9999 nach 0001 überläuft. Somit ist die Nummerierung
nicht mehr fortlaufend, wie es von FFmpeg erwartet wird. Dieses Problem
kann man lösen indem man ein Fenster mit Eingabeaufforderung öffnet,
zum aktuellen Verzeichnis wechselt und dann folgende Befehle ausführt:
ren IMG_1*.*
IMG_2*.*
ren IMG_0*.* IMG_1*.* ren IMG_9*.* IMG_0*.* copy IMG_0999.* IMG_1000.* |
Die ersten drei Zeilen bewirken, dass die Bilder in eine fortlaufende Reihenfolge gebracht werden (ren ist die Abkürzung für rename). Es wird praktisch auf jede Nummer 1000 addiert, ausgenommen bei denen die mit 9 beginnen, da wird 9000 subtrahiert. Jetzt ist nur noch das Problem, dass zwischen Bild 0999 und Bild 1001 ein Bild fehlt. Die Kamera beginnt nämlich nach Bild 9999 nicht etwa mit Bild 0000, sondern mit Bild 0001. Dieses Problem wird in der vierte Zeile dadurch gelöst, dass das Bild 0999 dupliziert wird. In der Hoffnung dass es im Video keiner sieht :-)
Nun soll das Video
auch noch mit Musik unterlegt werden. Auch das ist mit FFmpeg relativ einfach
möglich, und der Aufruf sieht beispielsweise so aus:
c:/Programme/ffmpeg/bin/ffmpeg -i Musik.mp3 -framerate 20 -start_number 3551 -i IMG_%%4d.jpg -codec:v mpeg4 -s 900x600 -q:v 2 Video_1.mp4 |
-i Musik.mp3 gibt den Namen der Musik-Datei an.
Nun wäre
es ein großer Zufall, wenn die Musik genau so lang ist wie das Video.
Falls die Musik länger ist, dann bleibt am Ende des Videos das letzte
Einzelbild solange als Standbild stehen, bis die Musik zu Ende ist. Falls
das Video länger als die Musik ist, dann läuft der Schluss des
Videos lautlos ab. Mit dem zusätzlichen Parameter -shortest
kann man erreichen, dass das Video zu Ende ist wenn die kürzeste Signalquelle
zu Ende ist. Dann wird entweder die Musik nicht bis zu Ende zu hören
sein, der es wird ein Stück vom Video abgeschnitten. Um Bild und Ton
auf die gleiche Länge zu bringen, kann man die Framerate (innerhalb
gewisser Grenzen) so berechnen, dass das Video genau so lange dauert wie
die Musik: Framerate = Anzahl_Bilder / Audio_Sekunden
Dadurch ergibt
sich für die Framerate eine krumme Zahl, aber das ist kein Problem.
Als Dezimaltrenner muss ein Punkt verwendet werden, z.B. -framerate
7.9
Kostenlose Gema-freie
Musik kann man zum Beispiel hier finden:
http://opsound.org/artist/peterrudenko/.
Kostenlos und
Gema-frei bedeutet aber nicht, dass man damit machen kann was man will.
Man sollte sich die Lizenzbedingungen schon genau durchlesen. In diesem
Fall wird z.B. gefordert, dass eine angemessene Anerkennung gegeben wird
(d.h. der Name des Interpreten und der Musiktitel wird genannt), und ein
Link zu der Lizenz soll angegeben werden. Wir müssen also zu unserem
Video noch einen Vorspann und / oder einen Nachspann hinzufügen, um
diese Informationen anzeigen zu können.
Der Vorspann und
der Nachspann soll jeweils ein einfaches Standbild sein, das für einige
Sekunden angezeigt wird. Den Text kann man im Texteditor schreiben, dann
über die Zwischenablage in ein Grafikprogramm kopieren, und dann als
JPG oder GIF Bild abspeichern. Wichtig ist, dass das Höhen/Seiten
Verhältnis mit dem Video übereinstimmt, und dass die gleiche
Framerate und die gleichen Codecs wie beim Video verwendet werden. Der
Vorspann kann dann wie folgt erzeugt werden:
c:/Programme/ffmpeg/bin/ffmpeg -i Stille_1min.mp3 -framerate 7.9 -loop 1 -i Vorspann.jpg -t 5 -codec:v mpeg4 -s 900x600 -q:v 2 -shortest Vorspann.mp4 |
c:/Programme/ffmpeg/bin/ffmpeg
Das
ist der Pfad zu ffmpeg
-i Stille_1min.mp3
ist
eine MP3 Datei die eine Minute perfekte Stille enthält, zu finden
beispielweise hier
-framerate
7.9 Die Framerate
muss mit dem Video übereinstimmen. Als Dezimaltrenner einen Punkt
verwenden!
-loop 1
bewirkt, dass das gleiche Bild immer
wieder verwendet wird
-i Vorspann.jpg
das
ist der Dateiname des Vorspann-Bildes, die Größe ist beliebig,
aber das Höhen/Seiten Verhältnis muss passen
-t 5
gibt die Dauer des Vorspanns in Sekunden
an
-codec:v
mpeg4 muss
mit dem Codec des Videos übereinstimmen
-s 900x600
die
Bildgröße des Vorspann-Videos, muss mit den Haupt-Video übereinstimmen
-q:v 2
muss wahrscheinlich auch mit dem Video
übereinstimmens
-shortest
bewirkt hier, dass die Vorspann-Länge
durch den Parameter -t
bestimmt wird und nicht durch die MP3 Länge
Vorspann.mp4
der
Dateiname des fertigen Vorspann-Videos
Der Nachspann
wird nach dem gleichen Verfahren erzeugt.
So, nun haben wir drei Videos: Den Vorspann, das eigentliche Zeitraffer-Video, und den Nachspann. Selbstverständlich kann man sich schon mal jedes Video einzeln anschauen und überprüfen. Für das Zusammenfügen zu einem einzigen Video brauchen wir jetzt eine Datei Schnitt.txt, in der die Dateinamen der Einzel-Videos in der richtigen Reihenfolge angegeben werden:
Schnitt.txt
# Diese Datei
legt fest, aus welchen Teilen und in welcher Reihenfolge das Video zusammengesetzt
wird
file 'Vorspann.mp4' file 'Video_1.mp4' file 'Nachspann.mp4' |
Das eigentliche
Zusammenfügen geht dann so:
c:/Programme/ffmpeg/bin/ffmpeg -f concat -i Schnitt.txt -c copy Video.mp4 |
Im folgenden Batch-File
habe ich nochmal alles zusammengefasst, und in den Kommentaren auch noch
weitere Parameter erläutert.
REM Erzeugung
des 5 Sekunden Vorspanns aus einem Einzelbild
c:/Programme/ffmpeg/bin/ffmpeg -i Stille_1min.mp3 -framerate 7.9 -loop 1 -i Vorspann.jpg -t 5 -codec:v mpeg4 -s 1800x1200 -q:v 2 -shortest Vorspann.mp4 REM Erzeugung des Video_1 aus den vielen Einzelbildern c:/Programme/ffmpeg/bin/ffmpeg -i Peter_Rudenko_-_When_It_Rains_Part_2.mp3 -framerate 7.9 -start_number 3551 -i IMG_%%4d.jpg -codec:v mpeg4 -s 1800x1200 -q:v 2 Video_1.mp4 REM Erzeugung des 5 Sekunden Nachspanns aus einem Einzelbild c:/Programme/ffmpeg/bin/ffmpeg -i Stille_1min.mp3 -framerate 7.9 -loop 1 -i Nachspann.jpg -t 5 -codec:v mpeg4 -s 1800x1200 -q:v 2 -shortest Nachspann.mp4 REM Zusammenfügen von Vorspann, Video_1 und Nachspann zum fertigen Film c:/Programme/ffmpeg/bin/ffmpeg -f concat -i Schnitt.txt -c copy Video.mp4 REM Warten auf Tastendruck, damit man eventuelle Fehlermeldungen lesen kann pause
REM ****************************************************************************************
|
Hier könnt
ihr das Video sehen, das nach dieser Anleitung erzeugt wurde (allerdings
bei Youtube nicht in voller Auflösung):
https://youtu.be/iaTNyLrdLJA
Einige Tage später...
Ich habe herausgefunden
dass man den Titel und einen von unten hochlaufenden Nachspann direkt mit
FFmpeg erzeugen kann. Man kann auch im Batch-File Variablen definieren,
um die Sache übersichtlicher zu gestalten. Das Batch-File sieht dann
so aus:
set "IMAGES=IMG_%%4d.jpg"
:: Dateiname der Bilder, %%4d steht für 4-stellige Nummer
set "FRAMERATE=7.9" :: Bilder pro Sekunde set "STARTNUMBER=3551" :: Nummer des ersten Bildes set "CODEC=mpeg4" :: Codec, am besten ist mpeg4 set "SIZE=1800x1200" :: Breite und Höhe des erzeugten Videos set "VIDEO_BITRATE=5M" :: Video-Bitrate set "VIDEO_QUALITY=2" :: Video-Qualitätsfaktor set "FONTFILE=arial.ttf"
:: Zeichensatz für Titel und Nachspann
REM Schritt 1: Erzeugung des Videos aus den vielen Einzelbildern c:/Programme/ffmpeg/bin/ffmpeg
-framerate %FRAMERATE% -start_number %STARTNUMBER% ^
REM Schritt 2: Hinzufügen von Titel, Nachspann und Musik set "TITLE=drawtext='fontfile=%FONTFILE%:textfile=%TITLE_FILE%:x=(w-tw)/2:y=(h-th)/2:fontcolor=%TITLE_COLOR%:fontsize=%TITLE_SIZE%:enable=lt(t\,%TITLE_DURATION%)'" set "CREDITS=drawtext='fontfile=%FONTFILE%:textfile=%CREDITS_FILE%:x=(w-tw)/2:y=h-(t-%CREDITS_START%)*%CREDITS_SPEED%:fontcolor=%CREDITS_COLOR%:fontsize=%CREDITS_SIZE%'" c:/Programme/ffmpeg/bin/ffmpeg
-itsoffset %MUSIC_DELAY% -i %MUSIC_FILE% ^
REM Warten auf Tastendruck, damit man eventuelle Fehlermeldungen lesen kann pause
|
Die beiden Textfiles für den Titel und den Nachspann müssen UTF-8 codiert sein. Solange der Text nur ASCII-Zeichen enthält, geht auch die normale ANSI Codierung. Aber wenn Umlaute oder Sonderzeichen enthalten sind, dann muss man vor dem Abspeichern die Codierung auf UFT-8 umstellen. Das geht mit Notepad, aber die so entstandene Datei hat noch das Problem dass sie am Anfang drei störende Zeichen EF BB BF enthält. Diese drei Zeichen muss man mit einem Hex-Editor nachträglich entfernen. Sonst sieht man im Video ein störendes Rechteck.
Hier könnt
ihr das neue Video sehen, das mit diesem Batch-File erzeugt wurde (allerdings
bei Youtube nicht in voller Auflösung):
https://youtu.be/YSTpl71-1YU
Einige Tage später...
Inzwischen habe
ich herausgefunden wie man Texte langsam ein- und ausblenden kann. Das
war gar nicht so einfach, weil es schlecht dokumentiert ist. Aber es geht
!
REM Schritt 1: Erzeugung des Videos
aus den vielen Einzelbildern
set "IMAGES=IMG_%%4d.jpg"
: Dateiname der Bilder, %%4d steht für 4-stellige Nummer
set CROP=
set DILATION=
c:/Programme/ffmpeg/bin/ffmpeg -framerate
%FRAMERATE% ^
REM Schritt 2: Definition der Titel-Einblendung set "NAME=FILTER1"
: Eindeutiger Name dieser Texteinblendung
REM ********************************************************************************
REM Schritt 3: Definition des Nachspanns set "NAME=FILTER2"
: Eindeutiger Name dieser Texteinblendung
REM ********************************************************************************
REM Schritt 4: Hinzufügen von Texten und Musik zum Video set "MUSIC_DELAY=2"
: Verzögerung in Sekunden, bevor die Musik beginnt
REM In der zweiten Zeile müssen die oben definierten Filter angegeben werden c:/Programme/ffmpeg/bin/ffmpeg -itsoffset
%MUSIC_DELAY% -i %MUSIC_FILE% ^
REM Warten auf Tastendruck, damit man eventuelle Fehlermeldungen lesen kann pause
|
Kurzanleitung
für die Erzeugung eines Videos aus Einzelbildern, mit Vorspann, Nachspann
und Musik:
-- Neuen Ordner
anlegen, und folgendes hineinkopieren:
-- Alle
*.JPG Bilder (müssen fortlaufend durchnummeriert sein)
-- Die
Batch Datei, Inhalt des grauen Kastens (siehe oben) kopieren
-- Text-Datei
"titel.txt" anlegen
-- Text-Datei
"nachspann.txt" anlegen
-- Zeichensatz
"arial.ttf" (im Internet zu finden)
-- Eine
beliebige MP3 Musikdatei
-- Nun wird die
Batch Datei bearbeitet, wichtig sind zunächst folgende Einträge:
-- Dateiname
der Einzelbilder
-- Framerate
-- Nummer
des ersten Bildes
-- QUAD=true,
falls es runde Fisheye-Bilder sind
-- Framesize
-- weiter
unten bei Schritt 4 den Namen der MP3 Musik-Datei eintragen
-- und
darunter den Namen des fertigen Videos
-- Batch Datei
starten, der Prozess läuft in zwei Schritten ab.
Zuerst wird die Datei temp.mp4 erzeugt, die nur das Video ohne Vorspann,
Nachspann und Musik enthält.
Im zweiten Schritt werden Titel, Nachspann und Musik hinzugefügt.
Falls die Dateien schon existieren, fragt FFmpeg jedesmal, ob sie überschrieben
werden sollen (y/n).
Der erste Schritt dauert länger als der zweite. Wenn temp.mp4 bereits
erzeugt ist und nur noch Änderungen an
Vorspann, Nachspann und Musik gemacht werden sollen, dann muss man temp.mp4
nicht noch einmal erzeugen
und kann die Frage mit "n" beantworten !
-- Falls es nicht
so läuft wie erwartet: Im Ausgabefenster nach oben scrollen und die
Fehlermeldungen lesen.
Wichtig ist die am weitesten oben stehende Fehlermeldung. Alles weitere
können Folgefehler sein.
-- Grundsätzliches
zur Bearbeitung der Batch-Datei:
-- Nicht
zuviel auf einmal ändern, sonst weiss man nicht welche Änderung
falsch war.
-- Regelmässig
Sicherheitskopien machen, damit man wieder zu einem funktionierenden Stand
zurückkehren kann
-- Nicht
die Syntax ändern !!! Keine " ' % ^ . , Zeichen
hinzufügen oder weglassen, es sei denn ihr wisst genau was ihr tut.
Bei solchen Fehlern kann man sich dumm und dämlich suchen.
-- Keine
Zeilenumbrüche innerhalb der FFmpeg Aufrufe, ausgenommen solche bei
denen die Zeile mit ^ abgeschlossen ist !
-- Keine
Sonderzeichen, Umlaute oder Leerzeichen in Dateinamen !
Weiter geht's mit den Themen Gradations-Kurven, Vignettierung und Bildrotation. Das geht so:
-- Ein Bild wird
in GIMP geöffnet.
-- Farben::Werte
--> Im Bild geeignete Punkte für Schwarz- Weiss- und Grau auswählen.
-- Klick auf
"Diese Einstellungen als Kurven bearbeiten"
-- Feinkorrekturen
an den Kurven machen
-- Dabei möglichst
viele Punkte auf die Kurven setzen, weil sie später durch Geraden
interpoliert werden.
-- Klick auf
"Einstellungen als Datei exportieren"
-- Häkchen
setzen bei "Altes Dateiformat für Kurven verwenden"
-- Dateiname:
curves.gimp
-- Abspeichern
-- Dann den Konverter
GIMP2ACV
aufrufen. Dadurch wird die Datei curves.gimp eingelesen, konvertiert und
als curves.acv abgespeichert. Die Datei curves.gimp muss in gleichen Ordner
stehen.
-- Im Batch-File
für die FFmpeg Bearbeitung wird u.a. der entsprechende Video-Filter
ausgerufen: -vf curves=psfile='curves.acv'
Vignettierung
am Bildrand kann automatisch ausgeglichen werden: -vf vignette=0.5:mode=backward
mode=backward
macht die Bildescken heller, mode=forward würde sie dunkler machen.
Die Zahl 0.5 muss so eingestellt werden, dass die Bildecken weder
zu hell noch zu dunkel werden.
Bildrotation um 180° geht so: -vf rotate=PI
Die drei Filter
können so zusammengefasst werden:
-vf "vignette=0.5:mode=backward,curves=psfile='curves.acv',rotate=PI"
So kann man den
Aufnahme-Zeitpunkt der Bilder in das Video einblenden:
REM *******************************
REM Definition der Zeit-Einblendung REM ******************************* set "NAME=FILTER3"
: Eindeutiger Name dieser Texteinblendung
set %NAME%=drawtext='fontfile=%FONTFILE%:text=%%{eif\:mod((%S%+%I%*n)/3600,24)\:'d'\:2}"\:"%%{eif\:mod((%S%+%I%*n)/60,60)\:'d'\:2}"\:"%%{eif\:mod(%S%+%I%*n,60)\:'d'\:2}:fontcolor=%COLOR%:boxcolor=%BOXCOLOR%:box=1:fontsize=%SIZE%:x=%POSITION_X%:y=%POSITION_Y%'
|
Nochmal zurück zum Thema Framerate.
Weiter oben habe
ich beschrieben, wie man die Framerate so berechnen kann, dass das fertige
Video eine bestimmte Gesamtlänge bekommt. Das ist sinnvoll, damit
die Video-Länge zur Dauer der Musik passt.
Dadurch ergeben
sich "krumme" Werte für die Framerate, die meistens auch ziemlich
klein (5...15) sind.
Problematisch
wird es dann, wenn man mehrere Videos zusammenfügen will. Dann müssen
nämlich alle Teil-Videos die gleiche Framerate haben.
Dieses Problem
kann man mit FFmpeg so lösen:
Der Parameter
-framerate wird immer vor den Input-Bildern angegeben, und er bestimmt
mit welcher Geschwindigkeit die Bilder eingelesen werden.
Der Parameter
-r wird immer nach den Input-Bildern und vor der Ausgabe-Datei
angegeben, und er bestimmt mit welcher Framerate das Video erzeugt wird.
Wenn er größer als -framerate ist, dann werden automatisch Bilder
dupliziert. Wenn er kleiner als -framerate ist, dann werden automatisch
Bilder übersprungen. Wenn der Parameter -r nicht angegeben wird, dann
wird der Wert von -framerate übernommen.
Bilder mit unterschiedlicher Dauer zu einem Video zusammenfügen:
Im folgenden Beispiel wird jedes Bild eine Sekunde lang gezeigt (25 Frames), ausgenommen das dritte Bild 3 Sekunden (25+50 Frames) und das fünfte Bild 5 Sekunden (25+100 Frames).
ffmpeg -i image-%3d.jpg -vf "zoompan=d=25+'50*eq(in,3)'+'100*eq(in,5)'" test.mp4
Bilder mit Kreuz-Überblendung (Crossfading) aneinanderfügen:
Hierfür kann
der "framerate" Filter missbraucht werden. Im folgenden Beispiel ist 0.25
die Framerate mit der die Bilder eingelesen werden, also 4 Sekunden pro
Bild.
Der Parameter
"fps" bestimmt die Framerate des Ausgangs-Videos, in diesem Fall 30.
Mit den Parametern
"interp_start" und "interp_end" kann man die Dauer der Überblendung
beeinflussen.
interp_start=128:interp_end=128
bedeutet dass keine Überblendung gemacht wird.
interp_start=0:interp_end=255
bedeutet kontinuierliche Überblendung. Wenn das erste Bild vollständig
ausgeblendet ist und das zweite Bild ganz eingeblendet ist, dann beginnt
sofort die Einblendung des dritten Bildes. Es gibt keine Pause in der die
Bilder unveränderlich gezeigt werden. Alles ist immer in Bewegung.
interp_start=64:interp_end=191
bedeutet dass während der Hälfte der Zeit ein Bild unveränderlich
gezeigt wird, und während der anderen Hälfte der Zeit findet
die Überblendung statt. Leider ist es keine vollständige Überblendung
von 0 bis 100%, sondern nur eine von 25% bis 75%. Das ist nicht ganz das
was man eigentlich möchte, aber besser als gar keine Überblendung.
ffmpeg -framerate 0.25 -i IMG_%3d.jpg -vf "framerate=fps=30:interp_start=64:interp_end=192:scene=100" test.mp4
Die folgende Methode ist flexibler. A ist die Zeitdauer in Sekunden, wie lange jedes Bild gezeigt wird (ohne das Crossfading). B ist die Dauer des Crossfading in Sekunden. WxH ist die Größe des erzeugten Videos.
ffmpeg -i IMG_%3d.jpg -vf zoompan=d=(A+B)/B:s=WxH:fps=1/B,framerate=25:interp_start=0:interp_end=255:scene=100 -c:v mpeg4 -maxrate 5M -q:v 2 out.mp4
Erzeugung von JPG Testbildern:
ffmpeg -f lavfi -i testsrc2=size=5472x3648:duration=14.5:rate=10 test%3d.jpg
Wie man das Pixelformat von JPG Bildern von 4:2:0 nach 4:2:2 ändern kann:
ffmpeg -i IMG_044x.jpg -pix_fmt yuvj422p -q 0 IMG_044.jpg
Verarbeitung von Videos, die mit der PanoView Fisheye-Kamera im Format 2448x2448 erzeugt wurden:
REM
************************************************* REM Batchfile für PanoViev XDV360 Video-Schnitt REM Michael Koch, November 2017 REM ************************************************* set "PATH=c:/ffmpeg/ffmpeg" : Pfad zu ffmpeg set "INPUT=20171012_154908A.mp4" : zu bearbeitendes Video set "SOUND=vogelstimmen.mp3" : Tondatei set "OUTPUT=out.mp4" : erzeugtes Video set "SIZE=1200x1200" : Größe des erzeugten Videos set "START=5" : Startzeitpunkt in Sekunden (im Eingangs-Video) set "LENGTH=12" : Länge in Sekunden (im Eingangs-Video) set "FADE=3" : Fade-In und Fade-Out Dauer in Sekunden set "FADEOUT=14" : Zeitpunkt wann das Fade-Out beginnt = Start + Length - Fade set "CROP=2280:2280:88:88" : Für Video-Format 2448x2448, die Kamera hat etwa 215° Bildwinkel : bei 180° Bildwinkel: 2104:2104:176:176 : bei 185° Bildwinkel: 2168:2168:144:144 : bei 190° Bildwinkel: 2224:2224:116:116 : bei 195° Bildwinkel: 2280:2280:88:88 : bei 200° Bildwinkel: 2336:2336:60:60 set "CONTRAST=1.0" : Kontrast im Bereich -2.0 bis 2.0, normal 1.0 set "BRIGHT=-0.1" : Helligkeit im Bereich -1.0 bis 1.0, normal 0.0 set "SATUR=1.10" : Farbsättigung im Bereich 0.0 bis 3.0, normal 1.0 set "GAMMA=1.0" : Gamma im Bereich 0.1 bis 10.0, normal 1.0 set "QUALITY=2" : Video-Qualitätsfaktor, 0 ist beste Qualität, 2 ist normal, 9 ist starke Kompression %PATH% -i %INPUT% -i Circle_3648.png -i %SOUND% -ss %START% -t %LENGTH% -filter_complex "crop=%CROP%,scale=3648:3648,overlay,eq=contrast=%CONTRAST%:brightness=%BRIGHT%:saturation=%SATUR%:gamma=%GAMMA%,fade=in:st=%START%:d=%FADE%,fade=out:st=%FADEOUT%:d=%FADE%" -af afade=in:st=%START%:d=%FADE%,afade=out:st=%FADEOUT%:d=%FADE% -s %SIZE% -c:v mpeg4 -q:v %QUALITY% -y %OUTPUT% pause |
Erzeugung eines kurzen Videos mit einfarbigem Hintergrund, mit Ein- und Ausblendung von gekrümmtem Text für Fulldome-Projektion:
Die Mapping-Dateien xmap_3648.pgm und ymap_3648.pgm (mit denen der Text gekrümmt wird) können mit diesem Programm generiert werden: ffmpeg_remap.exe
REM
****************************************************************************** REM make a video with fade-in and fade-out of curved text for fulldome projection REM ****************************************************************************** set "DUR=10" : duration of video set "FPS=30" : framerate set "BACK=black" : background color set "FONT=arial.ttf" : font set "TEXT=my_text.txt" : text file set "COLOR=green" : text color set "FSIZE=80" : font size set "POS_X=(w-tw)/2" : X text position, for centered text: (w-tw)/2 set "POS_Y=h*0.9" : Y text position set "S=2" : start time for text set "E=8" : end time for text set "FI=2" : fade-in duration (may be small, but not zero) set "FO=2" : fade-out duration (may be small, but not zero) set "SIZE=3648" : video size (quadratic) c:/ffmpeg/ffmpeg ^ -f lavfi ^ -i color=c=%BACK% -i xmap_3648.pgm -i ymap_3648.pgm ^ -r %FPS% ^ -t %DUR% ^ -aspect "1:1" ^ -lavfi "scale=%SIZE%:%SIZE%,drawtext='fontfile=%FONT%:textfile=%TEXT%:fontcolor_expr=%COLOR%@%%{e\:clip(((t-%S%)/%FI%)*between(t,%S%,%S%+%FI%)+(%E%-t)/%FO%*between(t,%S%+%FI%,%E%),0,1)}:fontsize=%FSIZE%:x=%POS_X%:y=%POS_Y%',format=pix_fmts=rgb24,remap" ^ -c:v mpeg4 ^ -q:v 0 ^ -y test.mp4 rem The format filter is only a workaround for a bug in ffmpeg (black-and-white output). It can be removed when this bug has been fixed. pause |