ffmpeg - Anzeigetitel eines Untertitels ändern

Krik

Fleet Admiral Pro
Registriert
Juni 2005
Beiträge
17.193
Moin zusammen,

ich habe unter Linux zu einer .mp4-Datei einen Untertitel hinzugefügt:
$ ffmpeg -i video.mp4 -i sub.srt -vcodec copy -acodec copy -scodec mov_text -metadata:s:s:0 language=eng video_mit_sub.mp4

Das Blöde ist jetzt, dass der Titel des Untertitels im Player (hier: Haruna) nun "eng mov_text" heißt.
1767821699060.png


Schaut man in das Video rein, dann steht das da wirklich.
Bash:
$ ffmpeg -i video_mit_sub.mp4 
ffmpeg version n8.0.1 Copyright (c) 2000-2025 the FFmpeg developers
  built with gcc 15.2.1 (GCC) 20251112
  configuration: etc, etc, etc
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video_mit_sub.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf62.3.100
  Duration: 00:37:51.66, start: 0.000000, bitrate: 3190 kb/s
  Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 3088 kb/s, 25 fps, 25 tbr, 90k tbn, start 0.042000 (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
  Stream #0:1[0x2](chi): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 96 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
  Stream #0:2[0x3](eng): Subtitle: mov_text (tx3g / 0x67337874), 0 kb/s (default)
    Metadata:
      handler_name    : SubtitleHandler
At least one output file must be specified
Zeile 20:
Stream #0:2[0x3](eng): Subtitle: mov_text (tx3g / 0x67337874), 0 kb/s (default)

Ich habe versucht, den Titel so zu korrigieren:
$ ffmpeg -i video_mit_subs.mp4 -vcodec copy -acodec copy -scodec copy -metadata:s:s:0 title="English" video_mit_subs_korrigiert.mp4
und
$ ffmpeg -i video_mit_subs.mp4 -vcodec copy -acodec copy -scodec copy -metadata:s:s:0 subtitle="English" video_mit_subs_korrigiert.mp4
Aber das hat keinen Effekt. Der Titel ändert sich nicht, es bleibt weiter mov_text stehen.

Offenbar muss man das wohl anders machen, aber ich finde die Lösung nicht. Der KI-Chat hat mir -metadata:s:s:0 title="English" vorgeschlagen, aber das wirkt nicht. Und wenn man im Internet nach ffmpeg change subtitle title sucht, bekommt man keine vernünftigen Ergebnisse. Das ist bei den Suchbegriffen aber auch nicht verwunderlich. -_-

Hat jemand von Euch eine Idee?

Gruß
Krik
 
Da du es im Terminal machst, kann ich dir nicht wirklich helfen.
Nutze Tools mit GUI. Aber unter Win. Weis nicht was es bei Linux da so gibt...

Aber das hat mir die Brave-KI ausgegeben:
1767822327912.png


Kannst's ja mal versuchen...
 
title habe ich, wie oben geschrieben schon probiert. handler habe ich eben auch getestet, aber das hat auch keinen Effekt.

Hier nochmal der Befehl:
$ ffmpeg -i test.mp4 -vcodec copy -acodec copy -scodec copy -metadata:s:s:0 handler="English" test_title.mp4

Da ist jetzt kein Fehler drin, ich habe alles richtig geschrieben oder?

Hier ist der Terminal-Inhalt:
Bash:
$ ffmpeg -i test.mp4 -vcodec copy -acodec copy -scodec copy -metadata:s:s:0 handler="English" test_title.mp4
ffmpeg version n8.0.1 Copyright (c) 2000-2025 the FFmpeg developers
  built with gcc 15.2.1 (GCC) 20251112
  configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-frei0r --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libdav1d --enable-libdrm --enable-libdvdnav --enable-libdvdread --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgsm --enable-libharfbuzz --enable-libiec61883 --enable-libjack --enable-libjxl --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libplacebo --enable-libpulse --enable-librav1e --enable-librsvg --enable-librubberband --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpl --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-nvdec --enable-nvenc --enable-opencl --enable-opengl --enable-shared --enable-vapoursynth --enable-version3 --enable-vulkan
  libavutil      60.  8.100 / 60.  8.100
  libavcodec     62. 11.100 / 62. 11.100
  libavformat    62.  3.100 / 62.  3.100
  libavdevice    62.  1.100 / 62.  1.100
  libavfilter    11.  4.100 / 11.  4.100
  libswscale      9.  1.100 /  9.  1.100
  libswresample   6.  1.100 /  6.  1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf62.3.100
  Duration: 00:37:51.66, start: 0.000000, bitrate: 3190 kb/s
  Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 3088 kb/s, 25 fps, 25 tbr, 90k tbn, start 0.042000 (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
  Stream #0:1[0x2](chi): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 96 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
  Stream #0:2[0x3](eng): Subtitle: mov_text (tx3g / 0x67337874), 0 kb/s (default)
    Metadata:
      handler_name    : SubtitleHandler
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
  Stream #0:2 -> #0:2 (copy)
Output #0, mp4, to 'test_title.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf62.3.100
  Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 3088 kb/s, 25 fps, 25 tbr, 90k tbn (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
  Stream #0:1(chi): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 96 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
  Stream #0:2(eng): Subtitle: mov_text (tx3g / 0x67337874), 0 kb/s (default)
    Metadata:
      handler_name    : SubtitleHandler
      handler         : English
Press [q] to stop, [?] for help
[out#0/mp4 @ 0x564fbb624080] video:856420KiB audio:26621KiB subtitle:12KiB other streams:0KiB global headers:0KiB muxing overhead: 0.180470%
frame=56790 fps=41776 q=-1.0 Lsize=  884646KiB time=00:35:14.44 bitrate=3427.4kbits/s speed=1.56e+03x elapsed=0:00:01.35
Jo, da sieht man, dass er handler: "English" hinzugefügt hat.

Schaut man hinterher mit ffmpeg -i test_title.mp4 rein, ist handler: "English" wieder weg. 🤷‍♂️
Ich raffe nicht, was da passiert. Ich habe den Eindruck, dass ich versuche Metadaten zu ändern, die gar nicht existieren, aber ffmpeg mir keine Fehlermeldung ausspucken will.
 
Zuletzt bearbeitet:
Ich hab jetzt gerade keine .srt zur Hand, aber sind das nicht nur Textdateien? Hast Du da mal drin gesucht? 🤷‍♂️
 
Zuletzt bearbeitet:
MKV geht auch. Aber ich habe gemerkt, dass das bei mir keinen Unterschied macht.

Ich habe jetzt noch mehr rausgefunden:
  • Der subtitle name ist offenbar fest und beschreibt nicht den Untertitelnamen sondern die Methode, nach der die Untertitel in die Datei eingebettet wurde. Bei MP4 und Softsubs mit SRT-Dateien ist das immer "mov_text". Bei MKV ist das übrigens immer "subrip (srt)", weil dort eine andere Importmethode verwendet wird.
  • MKV kennt und respektiert den title-Tag, MP4 kennt ihn nicht. Bei MP4 liegt der Titel nicht in den Stream-Metadaten sondern in einem UTDA-Metadata-Block, an den man wohl mit ffmpeg-Mitteln nicht drankommt.
  • Haruna (der Player) zeigt immer den subtitle name an. Ich habe den Entwickler hier angeschrieben und den Vorschlag gemacht, das auszublenden, sofern eine Sprache und/oder Titel definiert wurden. Mal gucken, was daraus wird.

Damit ist die Sache für mich (erst mal) gelöst.
 
Auch wenn es erstmal erledigt ist, ich meinte eigentlich den ersten Satz:
1767902524785.png


Mal das Attribut "title" probiert?

Irgendwie muss es ja gehen, MKVToolNix GUI, welches ich nutze, kann ja auch die Spuren benennen...
 
@Krik
Ja schon, aber den zweiten Punkt komplett überlesen. Asche auf mein Haupt.

Gibts denn nicht ne GUI für ffmpeg bzw. ein Programm unter Linux, welche ffmpeg nutz?
Dort kann man die Parameter doch setzen. Ggf kannst du dir so sogar den passenden Befehl "abgucken", falls man den Ausgabetext irgendwo protokolliert lesen kann.
Vielleicht auch nur mal testweise, sollte ja selbst auf einem Win-System gehen, falls du eines nutzen solltest, die Befehle sind, glaub ich, identisach.
Ich meine textbasiert in allen Ehren, aber machmal ist klicky-buntie einfach praktischer, so im Jahr 2026.

Wenn du es natürlich Headless hast, siehts da doof aus.
 
K-551 schrieb:
Gibts denn nicht ne GUI für ffmpeg bzw. ein Programm unter Linux, welche ffmpeg nutz?
Ich hab geschaut und mit Videomass auch so was gefunden. Ja, da kann man den darunter liegenden Aufruf von ffmpeg mit allen Parametern sehen, aber nein, dort kann man keinen Titel für Untertitel definieren.

Ansonsten gibt es nur noch Handbrake, aber das basiert nicht auf ffmpeg und kann auch kein Video Passthrough. Neucodieren ergibt keinen Sinn.
Bei den Videoeditoren habe ich nicht durchgeblickt. Die scheinen auch eher fürs Schneiden und Hinzufügen von Effekten gedacht.
 
Ja Handbrake hat leider keine Option etwas via Passthrough durchzuschleusen, sonst wär es perfekt.
Ich nutz zum groben Schneiden (z.B. Werbung in TV-Aufnahmen) gern Avidemux, das kann auch Passthrough (Video und/oder Audio), aber keine Untertitel einbinden.
Für Untertitel (oder Audiospuren etc.) einbinden nutz ich MKVToolNix. Ist ein sehr umfangreiches Programm, mit sehr viel Optionen, für mich sogar zuviel, kann aber nahezu alles.

Zum Editieren nutz ich SubtitleEdit.

Die Programme m.W.n. auch alle für Linux.

Ich weis nicht, ob dir eines der Programme etwas bringt, aber kannst ja mal gucken. Ob du dir aber den ffmpeg-Code anzeigen lassen kannst, weis ich nicht...

Honorble mention:
Ich nutz auch ab und an mal XMedia Recode. Ist auch ganz nützlich, kann paasthough und Untertitel einbinden. Aber glaub ich nur für Win.
 
Ich fasse meinen Stand nochmal zusammen, damit wir nicht aneinander vorbeireden:
  • Bei MP4 kann man mit ffmpeg aktuell nicht den Anzeigenamen des Untertitel ändern.
  • Bei MKV geht das problemlos.
  • Haruna zeigt immer den Codec bzw. die Methode an, mit der der Untertitel in das Video eingebettet wurde, obwohl auch wenn das gar nicht notwendig ist. Das habe ich dem Entwickler gemeldet.
 
Zurück
Oben