Ist es möglich, ein Dateinamen-Wasserzeichen in die Ecke einer verketteten Bilddiaschau zu brennen und es für jedes Bild ändern zu lassen?

398
Max M.

Was ich tun möchte : Ich habe einen Ordner mit vielen Bildern. Mit diesen Dateien möchte ich ein Diaschau-Video erstellen, während der Dateiname der Originalbilder in die rechte untere Ecke gebrannt werden soll.

Mein derzeitiger Status ist : Ich habe ein Skript erstellt, um alle .jpgDateien im Ordner abzurufen und eine ffmpeg-readableListe zu erstellen, und ich weiß, wie die Bilder zu einer Diashow zusammengefügt werden, und alles funktioniert wie beabsichtigt. Ich habe auch herausgefunden, wie man FFmpegs Zeichentext verwendet, um einen schönen Dateinamenstempel zu erhalten.

Nun das Problem : Derzeit entnimmt FFmpeg den letzten Dateinamen aus der Dateiliste (zum Beispiel IMG_9935.jpg) und brennt ihn in das gesamte Video ein. Was ich jedoch erreichen möchte, ist, dass es sich mit jedem "neuen" Bild ändert - so wie sich ein Timecode im Verlauf des Videos ändern würde.

Ist irgendetwas möglich?

Als Randbemerkung : "Warum brennen Sie den Dateinamen nicht vorher?" Ich möchte es so flexibel wie möglich halten. Wenn es also anders geht, würde ich gerne diesen Weg gehen.

for i in *.jpg; do echo "file '$i'" >> files.txt; done  ffmpeg -r 1/3 -f concat -safe 0 -i files.txt -vf "eq=text=$(echo $i | rev | cut -d / -f 1 | rev): fontcolor=0x808080: fontsize=14: x=w-tw- 10:y=h-th-10" -c libx264 filename.mp4 
1

1 Antwort auf die Frage

1
Gyan

Der concat Demuxer ermöglicht das Festlegen der Metadateneingabe pro Datei, dies muss jedoch manuell erfolgen.

Sie würden Ihr Skript in ändern

for i in *.jpg; do echo "file '$i'" >> files.txt; echo "file_packet_metadata url=$i" >> files.txt; done  ffmpeg -r 1/3 -f concat -safe 0 -i files.txt -vf "drawtext=text='%': fontcolor=0x808080: fontsize=14: x=w-tw- 10:y=h-th-10" -r 12 -c:v libx264 filename.mp4