Извлечение субтитров QuickTime mov_text с помощью ffmpeg

Извлечение субтитров QuickTime mov_text с помощью ffmpeg

У меня есть .movфайл с mov_textдорожками субтитров в формате -, созданными с помощью старой (теперь устаревшей) функции QuickTime 7 Pro "Text Track". Вот что ffmpeg -i myfile.movмне о них говорит:

  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

В настоящее время у меня все еще есть доступ к QuickTime 7 Pro, где я могу извлечь субтитры, чтобы затем преобразовать их в SubRip или какой-либо другой формат, который могут читать другие программы. Однако мне нужно обновить систему, а QuickTime 7 Pro не работает на macOS Catalina и выше, поэтому я ищу способ иметь возможность по-прежнему получать доступ к этим субтитрам на более новых системах. Кажется, ffmpegэто выход, но я все еще застрял.

Вот что я попробовал:

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

дает мне простой текст субтитров, но без временных меток, поэтому он бесполезен для конвертации субтитров в другой формат.

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

правильно преобразует субтитры в SubRip, включая временные метки. Но он избавляется от переносов строк и другого форматирования.
Он также выдает мне следующие сообщения об ошибках с недопустимыми данными:

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%

Предложения из комментариев ниже по поводу конкретизации -c textили -sub_charencвсе они дают мне одинаковые результаты.

Итак, я надеюсь найти способ извлечь субтитры в простой текстовый файл, который либо все еще отформатирован в QTText (см. ниже), либо каким-то другим способом сохраняет переносы строк и другое форматирование. Вот как выглядит исходная QuickTime Text Track в виде текстового файла, когда я извлекаю и экспортирую ее через QuickTime 7 Pro (см. спецификацииздесь).

{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]

Затем я мог бы просто написать скрипт для преобразования тегов форматирования, таких как {bold}и т. д., в теги html, которые, как я полагаю, SubRip понимает.

Есть ли способ указать формат вывода, ffmpegкроме как угадывать, что мне нужно, по расширению файла, например, srtили txt? (Я думаю, в частности, что если бы я мог указать mov_textформат вывода, то он мог бы выдать мне файл в формате QTText, как показано выше... но как это сделать?)

Если ffmpegне могу справиться с этой работой, я с радостью попробую любые другие инструменты.

решение1

Если вы готовы перекодировать субтитры mov_text во что-то другое (например, файлы Subrip SRT), вы можете попробовать следующее:

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

Связанный контент