我有一个.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