利用机器学习从视频中提取硬编码字幕

videocr的Python项目详细描述


视频CR

使用带有python的Tesseractocr引擎从视频中提取硬编码(烧录)字幕。

输入带有硬编码字幕的视频:

screenshotscreenshot

# print_sub.pyimportvideocrif__name__=='__main__':print(videocr.get_subtitles('video.mp4',lang='chi_sim+eng',sim_threshold=70,conf_threshold=65))

$ python3 print_sub.py

输出:

0
00:00:01,042 --> 00:00:02,877
喝 点 什么 ? 
What can I get you?

1
00:00:03,044 --> 00:00:05,463
我 不 知道
Um, I'm not sure.

2
00:00:08,091 --> 00:00:10,635
休闲 时 光 …
For relaxing times, make it...

3
00:00:10,677 --> 00:00:12,595
三 得 利 时 光
Bartender, Bob Suntory time.

4
00:00:14,472 --> 00:00:17,142
我 要 一 杯 伏特 加
Un, I'll have a vodka tonic.

5
00:00:18,059 --> 00:00:19,019
谢谢
Laughs Thanks.

性能

ocr进程是cpu密集型的。在我的双核笔记本电脑上提取20秒的视频需要3分钟。更多的CPU内核将使它更快。

安装

  1. 安装Tesseract并确保它位于$PATH

  2. $ pip install videocr

功能

get_subtitles(video_path:str,lang='eng',time_start='0:00',time_end='',conf_threshold=65,sim_threshold=90,use_fullframe=False)

返回srt格式的字幕字符串。

save_subtitles_to_file(video_path:str,file_path='subtitle.srt',lang='eng',time_start='0:00',time_end='',conf_threshold=65,sim_threshold=90,use_fullframe=False)

file_path写副标题。如果文件不存在,它将自动创建。

参数

  • lang

    字幕的语言。你几乎可以提取任何语言的字幕。支持this page上的所有语言代码(如英文'eng')和this repository中的所有脚本名(如简体中文'HanS')。

    请注意,您可以同时使用多种语言,例如lang='hin+eng'用于印地语和英语。

    语言文件将自动下载到您的~/tessdata。您可以在它们的wiki page上阅读有关tesseract语言数据文件的更多信息。

  • conf_threshold

    单词预测的置信阈值。信任度低于此值的单词将被丢弃。默认值65在大多数情况下都可以。

    如果每行中的单词太少,则使其接近0;如果每行中的多余单词太多,则使其接近100。

  • sim_threshold

    字幕行的相似度阈值。大于此阈值的Levenshtein比率的字幕行将合并在一起。默认值90在大多数情况下都可以。

    如果复制的字幕行太多,则使其接近0;如果复制的字幕行太少,则使其接近100。

  • time_starttime_end

    只从视频片段中提取字幕。字幕时间戳仍然根据整个视频长度计算。

  • use_fullframe

    默认情况下,只有每帧的下半部分用于ocr。如果字幕不在每帧的下半部分,则可以显式地使用整帧。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Intellij和Eclipse无法找到库工件   java Mapbox Android Symbolayer重置筛选器   java如何在顶部显示特定的recyclerview项?   java如何在Hibernate中使用@Qualifier   我想计算特定文本webdriver java在多个页面上可用的HTML表中的数据   java捕获Spring MVC REST服务抛出的Jersey REST客户端的异常   java Hibernate flush()影响事务   密钥绑定Java密钥绑定   sonarqube java,sonar,圈复杂度   使用3DES在Java中加密,在SQL Oracle中解密   regex正则表达式在regex101上工作。com,但不是prod   JAVAsql。SQLException:ORA00600:内部错误代码,参数:[12811],[93233]   java H2数据库存储在哪里?   java如何避免在使用Jackson时从JSON字符串反序列化空JSON数组元素