Konvertieren Sie textbasierte Untertitel mit ffmpeg in einzelne Bitmaps

825
Advika

Wir haben einen textbasierten Untertitel-Stream, und wir müssen jeden Untertitel in diesem Untertitel-Stream in eine einzelne .bmpDatei mit 24 Bits pro Pixel konvertieren .

Wie können wir das mit ffmpeg machen?

1
Danke für die Antwort. Der Link, den Sie hier geteilt haben, spricht vom Einbrennen von Untertiteln in Videos. In unserem Szenario müssen Untertitel jedoch als separater Stream dargestellt werden, der nicht in Video eingebettet ist. Jede Eingabe dazu wäre hilfreich. Advika vor 6 Jahren 0
Das ist richtig. DASH verwendet textbasierte Untertitel. Unsere aktuelle Projektumgebung unterstützt jedoch das Rendern von Bitmapformaten. Wir dachten uns, dass der Text in das Bitmap-Format konvertiert wird, und dann kann dieselbe Pipeline zum Rendern verwendet werden. Advika vor 6 Jahren 0
Da ich völlig neu bin, tut es mir leid, dass ich nicht genügend Informationen zur Verfügung gestellt habe. BMP-Format mit 24 Bit pro Pixel. Wir haben beispielsweise die Zeichenfolge "XYZ", da die Eingabe und Ausgabe im BMP-Format erfolgen sollte. Advika vor 6 Jahren 0
Wir benötigen eine Bitmap-Datei (.bmp) für jede Untertitel-Textzeichenfolge. Advika vor 6 Jahren 0

1 Antwort auf die Frage

1
slhck

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 subtitlesFilters (Informationen zum Definieren des Untertitelstils finden Sie in den Optionen).
  • Löschen Sie doppelte Frames mit mpdecimateund 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.