Ein bisschen hackig, aber dies ist das Beste, was ich mir ausgedacht habe, auch angesichts der etwas mehrdeutigen Aufgabe, bei der nicht klar ist, wie groß die Ausgabe-Frame-Größe sein soll oder wie das Timing garantiert werden soll.
ffmpeg -f lavfi -i "color=color=black:d=10:s=1280x720:r=24" \ -filter:v "subtitles=sample.srt,mpdecimate,setpts=N/FRAME_RATE/TB" \ images/out-%04d.bmp
Folgendes tut das:
- Erstellen Sie eine schwarze Hintergrundfarbe mit einer Größe von 1280 × 720px, einer Dauer von 10 Sekunden und 24 Bildern pro Sekunde. Sie können natürlich die Pixelgröße ändern, und Sie müssen die Dauer basierend auf der Gesamtdauer des Untertitel-Streams ändern. Die Framerate kann gesenkt werden, dies beeinflusst jedoch die Genauigkeit der gerenderten Ausgabe.
- Rendern Sie die Untertitel mithilfe des
subtitles
Filters (Informationen zum Definieren des Untertitelstils finden Sie in den Optionen). - Löschen Sie doppelte Frames mit
mpdecimate
und setzen Sie die Zeitbasis zurück. Dies kann weggelassen werden, wenn nicht nur bestimmte Bilder ausgegeben werden sollen. - Geben Sie jedes verbleibende Bild in sequenzieller Reihenfolge an ein BMP-Bild aus.
Falls nun Teile ohne Untertitel vorhanden sind, wird ein leerer schwarzer Rahmen ausgegeben. Dieser muss später entfernt werden, z. B. anhand einer Dateiprüfsumme.