使用 ffmpeg 提取 QuickTime mov_text 字幕

使用 ffmpeg 提取 QuickTime mov_text 字幕

我有一个.mov文件,其中有mov_text使用旧版(现已弃用)QuickTime 7 Pro 的“文本轨道”功能创建的 格式的字幕轨道。以下是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 7 Pro 提取并导出原始 QuickTime 文本轨道时,它作为文本文件的样子如下(见规格这里)。

{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

相关内容