Extrahieren von QuickTime mov_text-Untertiteln mit ffmpeg

Extrahieren von QuickTime mov_text-Untertiteln mit ffmpeg

Ich habe eine .movDatei mit mov_text-formatierten Untertitelspuren, die mit der alten (mittlerweile veralteten) Funktion „Textspur“ von QuickTime 7 Pro erstellt wurden. Folgendes ffmpeg -i myfile.movverrät mir etwas über sie:

  Stream #0:4(eng): Subtitle: mov_text (text / 0x74786574), 640x116, 0 kb/s (default)
    Metadata:
      rotate          : 0
      creation_time   : 2021-11-20T03:08:45.000000Z
      handler_name    : Apple Text Media Handler

Derzeit habe ich noch Zugriff auf QuickTime 7 Pro, wo ich die Untertitel extrahieren und dann in SubRip oder ein anderes Format konvertieren kann, das von anderen Programmen gelesen werden kann. Ich muss jedoch mein System aktualisieren und QuickTime 7 Pro läuft nicht unter macOS Catalina und höher. Daher suche ich nach einer Möglichkeit, auf neueren Systemen weiterhin auf diese Untertitel zugreifen zu können. Das scheint ffmpegder richtige Weg zu sein, aber ich stecke immer noch fest.

Folgendes habe ich versucht:

ffmpeg -i test.mov -map 0:s:0 -c copy -f data QT-subtitles.txt

gibt mir den Klartext der Untertitel, aber ohne Zeitstempel, also ist es für die Konvertierung der Untertitel in ein anderes Format ziemlich nutzlos.

ffmpeg -i test.mov -map 0:s:0 QT-subtitles.srt

konvertiert die Untertitel korrekt in SubRip, einschließlich Zeitstempel. Dabei werden jedoch Zeilenumbrüche und andere Formatierungen entfernt.
Außerdem erhalte ich die folgenden Fehlermeldungen, dass ungültige Daten gefunden wurden:

Stream mapping:
  Stream #0:4 -> #0:0 (mov_text (native) -> subrip (srt))
Press [q] to stop, [?] for help
[mov_text @ 0x7fa492823200] invalid UTF-8 byte in subtitle
[mov_text @ 0x7fa492823200] Invalid UTF-8 in decoded subtitles text; maybe missing -sub_charenc option
Error while decoding stream #0:4: Invalid data found when processing input
[mov_text @ 0x7fa492823200] invalid UTF-8 byte in subtitle
[mov_text @ 0x7fa492823200] Invalid UTF-8 in decoded subtitles text; maybe missing -sub_charenc option
Error while decoding stream #0:4: Invalid data found when processing input
size=       6kB time=00:02:04.30 bitrate=   0.4kbits/s speed=3.32e+04x    
video:0kB audio:0kB subtitle:3kB other streams:0kB global headers:0kB muxing overhead: 82.697044%

Vorschläge aus den Kommentaren unten zum Spezifizieren -c textoder -sub_charencalle führen bei mir zu den gleichen Ergebnissen.

Ich hoffe also, einen Weg zu finden, den Untertitel in eine einfache Textdatei zu extrahieren, die entweder immer noch QTText-formatiert ist (siehe unten) oder auf andere Weise Zeilenumbrüche und andere Formatierungen beibehält. So sieht der ursprüngliche QuickTime-Texttrack als Textdatei aus, wenn ich ihn mit QuickTime 7 Pro extrahiere und exportiere (siehe Spezifikationen)Hier).

{QTtext}{font:Verdana}{plain}{size:36}{textColor: 65535, 65535, 65535}{backColor: 0, 0, 0}{justify:default}{timeScale:30}{width:640}{height:116}{timeStamps:absolute}{language:0}{textEncoding:0}
[00:00:00.00]
Text here {bold} bold word {plain} text here 
[00:00:01.12]
Text here text here text here 
    Next line here (respects spaces)
[00:00:02.14]

Ich könnte dann einfach ein Skript schreiben, um die Formatierungs-Tags wie {bold}usw. in HTML-Tags umzuwandeln, was SubRip, glaube ich, versteht.

Gibt es eine andere Möglichkeit, das Ausgabeformat anzugeben, ffmpegals es anhand der Dateierweiterung wie srtoder erraten zu lassen, was ich brauche txt? (Ich denke insbesondere daran, dass ich, wenn ich als Ausgabe angeben könnte, mov_textmöglicherweise eine QTText-formatierte Datei wie die oben stehende erhalten würde ... aber wie würde ich das machen?)

Wenn ffmpegdas für die Arbeit nicht funktioniert, probiere ich gern andere Werkzeuge aus.

Antwort1

Wenn Sie die mov_text-Untertitel gerne in etwas anderes transkodieren möchten (z. B. Subrip SRT-Dateien), können Sie Folgendes versuchen:

ffmpeg -i test.mov -map 0:s:0 -c:s srt subtitles.srt

verwandte Informationen