如何从含内嵌字幕的MP4文件中提取无时间戳的纯字幕文本?
需求可行性说明
该需求完全可以实现,无需获取讲师原始脚本,通过通用工具就能完成从内嵌字幕提取到去时间戳转纯文本的全流程。
方案1:提取字幕时直接输出无时间戳纯文本
如果你的MP4内嵌的是软字幕(未烧录到视频画面),可以直接用FFmpeg工具一步提取纯文本,无需后续处理时间戳:
- 首先确认MP4的字幕流索引,执行命令:
ffmpeg -i 你的讲座文件.mp4 - 在输出结果中找到类似
Stream #0:2(chi): Subtitle: mov_text的行,0:2就是当前文件的字幕流索引,根据你自己的文件实际值修改后续命令参数 - 直接提取纯文本的命令:
ffmpeg -i 你的讲座文件.mp4 -map 0:2 -f text 输出纯文本.txt - 提取完成后打开TXT文件就能得到无时间戳的纯字幕内容,直接复制到Word中即可。
方案2:先提取带时间戳的字幕,再批量去除时间戳
如果你已经提取出了srt/ass格式的带时间戳字幕,可以用以下两种方法快速清理:
方法A:文本编辑器正则替换(适合单文件)
用支持正则替换的文本编辑器(比如Notepad++、VS Code、系统自带记事本部分版本也支持)操作:
- 把字幕文件拖入编辑器,调出替换功能,勾选「正则表达式」选项
- 针对最常见的srt格式,输入匹配规则:
^\d+\r?\n\d{2}:\d{2}:\d{2},\d{3} --> \d{2}:\d{2}:\d{2},\d{3}\r?\n,替换内容留空,点击全部替换 - 替换完成后再手动清理剩下的多余空行,就能得到纯字幕内容。
方法B:Python脚本批量处理(适合多文件)
如果有大量字幕文件需要处理,可以跑简单的Python脚本批量转换,示例代码如下:
import re def srt_to_pure_text(srt_file_path, output_txt_path): # 读取srt文件内容 with open(srt_file_path, 'r', encoding='utf-8') as f: srt_content = f.read() # 匹配并删除序号、时间戳行 pattern = re.compile(r'\d+\n\d{2}:\d{2}:\d{2},\d{3} --> \d{2}:\d{2}:\d{2},\d{3}\n') text_content = pattern.sub('', srt_content) # 清理多余空行 text_content = re.sub(r'\n{2,}', '\n', text_content).strip() # 输出纯文本文件 with open(output_txt_path, 'w', encoding='utf-8') as f: f.write(text_content) # 调用示例,替换为你自己的文件路径即可 srt_to_pure_text("讲座字幕.srt", "讲座纯文本.txt")
注意事项
- 如果你的MP4内嵌的是硬字幕(字幕已经和视频画面融为一体),以上方法不适用,需要用OCR工具识别视频画面中的文字提取内容
- 提取前可以先在播放器中加载字幕确认内容准确,避免提取到错误的字幕流
内容的提问来源于stack exchange,提问作者shibainu
相关产品推荐
相关产品推荐

