/video-subtitle-extractor

视频硬字幕提取,生成srt文件。无需申请第三方API,本地实现文本识别。基于深度学习的视频字幕提取框架,包含字幕区域检测、字幕内容提取。A GUI tool for extracting hard-coded subtitle (hardsub) from videos and generating srt files.

Primary LanguagePythonApache License 2.0Apache-2.0

简体中文 | English

项目简介

License python version support os

Video-subtitle-extractor (VSE) 是一款将视频中的硬字幕提取为外挂字幕文件(srt格式)的软件。 主要实现了以下功能:

若需要生成txt文本,可以在backend/config.py中设置GENERATE_TXT=True

  • 支持视频字幕批量提取
  • 多语言:支持简体中文(中英双语)繁体中文英文日语韩语越南语阿拉伯语法语德语俄语西班牙语葡萄牙语意大利语87种语言的字幕提取
  • 多模式:
    • 快速:(推荐)使用轻量模型,快速提取字幕,可能丢少量字幕、存在少量错别字
    • 自动:(推荐)自动判断模型,CPU下使用轻量模型;GPU下使用精准模型,提取字幕速度较慢,可能丢少量字幕、几乎不存在错别字
    • 精准:(不推荐)使用精准模型,GPU下逐帧检测,不丢字幕,几乎不存在错别字,但速度非常慢

请优先使用快速/自动模式,如果前两种模式存在较多丢字幕轴情况时,再使用精准模式

demo.png

项目特色

  • 采用本地进行OCR识别,无需设置调用任何API,不需要接入百度、阿里等在线OCR服务即可本地完成文本识别
  • 支持GPU加速,GPU加速后可以获得更高的准确率与更快的提取速度

使用说明

  • 有使用问题请加群讨论,QQ群:210150985、816881808

  • 点击【打开】后选择视频文件,调整字幕区域,点击【运行】

    • 单文件提取:打开文件的时候选择单个视频
    • 批量提取:打开文件的时候选择多个视频,确保每个视频的分辨率、字幕区域保持一致
  • 去除水印文本/替换特定文本:

如果视频中出现特定的文本需要删除,或者特定的文本需要替换,可以编辑 backend/configs/typoMap.json文件,加入你要替换或去除的内容

{
	"l'm": "I'm",
	"l just": "I just",
	"Let'sqo": "Let's go",
	"Iife": "life",
	"威筋": "威胁",
  	"性感荷官在线发牌": ""
}

这样就可以把文本中出现的所有“威筋”替换为“威胁”,所有的“性感荷官在线发牌”文本删除

  • 视频以及程序路径请不要带中文和空格,否则可能出现未知错误!!!

如:以下存放视频和代码的路径都不行

D:\下载\vse\运行程序.exe(路径含中文)

E:\study\kaoyan\sanshang youya.mp4 (路径含空格)

  • 直接下载压缩包解压运行,如果不能运行再按照下面的教程,尝试源码安装conda环境运行

下载地址

推荐使用,启动速度较快

  • Windows 单文件版本v2.0.0(CPU): vse.exe 提取码:rl02

双击直接运行,每次打开时会有一点慢,若出现误报毒,使用绿色版

仅供具有Nvidia显卡的用户使用(AMD的显卡不行),提取速度非常快

PS: 若无法下载,请前往 Release 下载

有任何改进意见请在ISSUES和DISCUSSION中提出

演示

  • GUI版:

demo.gif

  • 点击查看视频教程 👇

GPU版本安装教程

在线运行

  • 使用Google Colab Notebook(免费GPU): Open In Colab

PS: Google Colab只能运行CLI版本

源码使用说明

1. 下载安装Miniconda

2. 创建并激活虚机环境

(1)切换到源码所在目录:

cd <源码所在目录>

例如:如果你的源代码放在D盘的tools文件下,并且源代码的文件夹名为video-subtitle-extractor,就输入 cd D:/tools/video-subtitle-extractor-main

(2)创建激活conda环境

conda create -n videoEnv python=3.12
conda activate videoEnv

3. 安装依赖文件

请确保你已经安装 python 3.12+,使用conda创建项目虚拟环境并激活环境 (建议创建虚拟环境运行,以免后续出现问题)

  • 安装依赖:

    pip install -r requirements.txt
  • 安装CUDA和cuDNN

请确保有拥有Nvidia的显卡,30系列以上的显卡驱动可能不支持 cuda 11.2及以下版本的安装

如果安装cuda 10.2,请对应安装7.6.5的cuDNN,并使用对应cuda版本的paddlepaddle,请不要使用cuDNN v8.x 和 cuda 10.2的组合

如果安装cuda 11.2,请对应安装8.1.1的cuDNN,并使用对应cuda版本的paddlepaddle

如果安装cuda 11.6,请对应安装8.4.0的cuDNN,并使用对应cuda版本的paddlepaddle

如果安装cuda 11.8,请对应安装8.6.0的cuDNN,并使用对应cuda版本的paddlepaddle

如果安装cuda 12.0,请对应安装8.9.1的cuDNN,并使用对应cuda版本的paddlepaddle

Linux用户
(1) 下载CUDA 11.7
wget https://developer.download.nvidia.com/compute/cuda/11.7.0/local_installers/cuda_11.7.0_515.43.04_linux.run
(2) 安装CUDA 11.7
sudo sh cuda_11.7.0_515.43.04_linux.run

1. 输入accept

2. 选中CUDA Toolkit 11.7(如果你没有安装nvidia驱动则选中Driver,如果你已经安装了nvidia驱动请不要选中driver),之后选中install,回车

3. 添加环境变量

在 ~/.bashrc 加入以下内容

# CUDA
  export PATH=/usr/local/cuda-11.7/bin${PATH:+:${PATH}}
  export LD_LIBRARY_PATH=/usr/local/cuda-11.7/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

使其生效

source ~/.bashrc
(3) 下载cuDNN 8.4.1

国内:cudnn-linux-x86_64-8.4.1.50_cuda11.6-archive.tar.xz 提取码:57mg

国外:cudnn-linux-x86_64-8.4.1.50_cuda11.6-archive.tar.xz

(4) 安装cuDNN 8.4.1
 tar -xf cudnn-linux-x86_64-8.4.1.50_cuda11.6-archive.tar.xz
   mv cudnn-linux-x86_64-8.4.1.50_cuda11.6-archive cuda
   sudo cp ./cuda/include/* /usr/local/cuda-11.7/include/
   sudo cp ./cuda/lib/* /usr/local/cuda-11.7/lib64/
   sudo chmod a+r /usr/local/cuda-11.7/lib64/*
   sudo chmod a+r /usr/local/cuda-11.7/include/*
Windows用户
(1) 下载CUDA 11.7
cuda_11.7.0_516.01_windows.exe
(2) 安装CUDA 11.7
(3) 下载cuDNN 8.4.0

cudnn-windows-x86_64-8.4.0.27_cuda11.6-archive.zip

(4) 安装cuDNN 8.4.0

将cuDNN解压后的cuda文件夹中的bin, include, lib目录下的文件复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\对应目录下

  • 安装paddlepaddle:

    • windows:

      python -m pip install paddlepaddle-gpu==2.6.1.post117 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/avx/stable.html
    • Linux:

      python -m pip install paddlepaddle-gpu==2.6.1.post117 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html

4. 运行程序

  • 运行图形化界面版本(GUI)
python gui.py
  • 运行命令行版本(CLI)
python ./backend/main.py

常见问题与解决方案

1. 运行不正常/没有结果/cuda及cudnn问题

解决方案:根据自己的显卡型号、显卡驱动版本,安装对应的cuda与cudnn

2. CondaHTTPError

将项目中的.condarc放在用户目录下(C:\Users\<你的用户名>),如果用户目录已经存在该文件则覆盖

解决方案:https://zhuanlan.zhihu.com/p/260034241

3. Windows下出现geos_c.dll错误

    _lgeos = CDLL(os.path.join(sys.prefix, 'Library', 'bin', 'geos_c.dll'))
  File "C:\Users\Flavi\anaconda3\envs\subEnv\lib\ctypes\__init__.py", line 364, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: [WinError 126] 找不到指定的模块。

解决方案:

(1) 卸载Shapely

pip uninstall Shapely -y

(2) 使用conda重新安装Shapely

conda install Shapely             

4. 7z文件解压错误

解决方案:升级7-zip解压程序到最新版本

5. Nuitka打包代码闪退

使用Nuitka版本0.6.19,将conda虚拟环境Lib文件夹下site-packages的所有文件复制到dependencies文件夹中,把paddle库dataset下image.py的有关subprocess代码全部注释了,使用以下打包命令:

 python -m nuitka --standalone --mingw64 --include-data-dir=D:\vse\backend=backend --include-data-dir=D:\vse\dependencies=dependencies  --nofollow-imports --windows-icon-from-ico=D:\vse\design\vse.ico --plugin-enable=tk-inter,multiprocessing --output-dir=out .\gui.py

编译成单个文件(pip安装zstandard可以减小体积)

python -m nuitka --standalone --windows-disable-console --mingw64 --lto no --include-data-dir=C:\Users\Yao\Downloads\vse\backend=backend --include-data-dir=C:\Users\Yao\Downloads\vse\design=design --include-data-dir=C:\Users\Yao\Downloads\vse\dependencies=dependencies  --nofollow-imports --windows-icon-from-ico=C:\Users\Yao\Downloads\vse\design\vse.ico --plugin-enable=tk-inter,multiprocessing --output-dir=C:\Users\Yao\Downloads\out --onefile .\gui.py

社区支持

Jetbrains 全家桶支持

本项目开发所使用的IDE由Jetbrains支持。

JetBrains Logo (Main) logo.

赞助

捐赠者 累计捐赠金额 赞助席位
**伟 300.00 RMB 金牌赞助席位
周学彬 200.00 RMB 金牌赞助席位
爱东 100.00 RMB 金牌赞助席位
**迪 100.00 RMB 金牌赞助席位
ysjm 100.00 RMB 金牌赞助席位
ischeung 100.00 RMB 金牌赞助席位
neoyxm 50.00 RMB 银牌赞助席位
50.00 RMB 银牌赞助席位
周昊 50.00 RMB 银牌赞助席位
玛卡巴卡 35.00 RMB 银牌赞助席位
净心 30.00 RMB 银牌赞助席位
ysjm 30.00 RMB 银牌赞助席位
生活不止眼前的苟且 30.00 RMB 银牌赞助席位
迷走神经病 30.00 RMB 银牌赞助席位
AcelXiao 20.00 RMB 银牌赞助席位
又是李啊 10.00 RMB 铜牌赞助席位
匿名 8.80 RMB 铜牌赞助席位
落墨 6.00 RMB 铜牌赞助席位
未闻花名 5.00 RMB 铜牌赞助席位
sky 5.00 RMB 铜牌赞助席位