ffmpeg kopiert angehängte Schriftarten zur Verwendung durch .ass-Untertitel

ffmpeg kopiert angehängte Schriftarten zur Verwendung durch .ass-Untertitel

Ich habe eine .ass-Datei, die ich in ein Video muxen möchte, das zusätzliche Schriftarten erfordert.

Es scheint keine Möglichkeit zu geben, die Anhänge von einer Datei in eine andere zu kopieren, also habe ich sie alle mit

ffmpeg -dump_attachment:t "" -i input.mkv

Aber wie bekomme ich diese richtig in die neue Datei?

Ich habe Folgendes versucht:

ffmpeg -i input.mkv -c copy -attach "fontastique.ttf" -metadata:s: mimetype=application/x-truetype-font -attach "Franchise - Extra.ttf" -metadata:s: mimetype=application/x-truetype-font -attach "Painfresco-Italic.ttf" -metadata:s: mimetype=application/x-truetype-font -attach "Painfresco-Regular.ttf" -metadata:s: mimetype=application/x-truetype-font -attach "SETFIRETOTHERAIN.TTF" -metadata:s: mimetype=application/x-truetype-font -attach "Volter__28Goldfish.ttf" -metadata:s: mimetype=application/x-truetype-font output.mkv

die Schriftarten scheinen angehängt zu sein, aber alle Streams, einschließlich Video/Audio/Untertitel, werden dann mit einem festgelegten MIME-Typ der Schriftarten angezeigt.

Stream #0:1: Audio: aac, 44100 Hz, stereo, fltp (default) (forced)
Metadata:
  MIMETYPE        : application/x-truetype-font
Stream #0:2: Subtitle: ssa (default) (forced)
Metadata:
  MIMETYPE        : application/x-truetype-font
Codec 0x18000 is not in the full list.
Stream #0:3: Attachment: unknown_codec
Metadata:
  filename        : fontastique.ttf
  mimetype        : application/x-truetype-font
...etc...

Die Untertitel können die Schriftart nicht finden, da diese immer noch als Standardschriftart des Players angezeigt wird und nicht die angehängten.

DerDokumentationenBeispiel sagt

ffmpeg -i INPUT -attach DejaVuSans.ttf -metadata:s:2 mimetype=application/x-truetype-font out.mkv

aber ich habe keine Ahnung, was -metadata:s:2 bedeutet, ich dachte, es sagt ihm, an welchen Stream es angehängt werden soll, aber die Verwendung von -metadata:s:2, wobei 2 der Untertitel-Stream ist, schlägt fehl mit

Could not write header for output file #0 (incorrect codec parameters ?): Error number -22 occurred

Wie kopiere oder füge ich mehrere Schriftarten richtig an einen MKV-Container an, damit sie von einem .ass-Untertitel-Stream verwendet werden können?

Antwort1

Erstens können Sie Schriftarten tatsächlich mit kopieren ffmpeg. Die -mapOption überschreibt einige Standardeinstellungen und wählt alle Streams aus der Eingabe aus. Beispiel:

ffmpeg -i infile.mkv -map 0 -c copy outfile.mkv

Siehe auch dieFFmpeg Map-DokumentationFür mehr Information.

Um Schriftarten an ein vorhandenes Video anzuhängen, -metadata:s:2besteht die Option tatsächlich darin, Stream 2 auszuwählen, aber wenn Sie sich Ihre Ausgabe ansehen, mkvinfowerden Sie feststellen, dass Anhänge ihren eigenen Stream darstellen. Sie sind nicht an den Untertitel-Stream „angehängt“. Im Beispiel in Ihrer Frage würden Sie also Folgendes wollen -metadata:s:3. Und zusätzliche Anhänge sollten entsprechende Stream-Spezifizierer verwenden.

verwandte Informationen