{"id":16881470,"url":"https://github.com/swhl/videosubfinder","last_synced_at":"2026-03-27T04:29:59.198Z","repository":{"id":176640847,"uuid":"656201226","full_name":"SWHL/VideoSubFinder","owner":"SWHL","description":"Auto sync from https://videosubfinder.sourceforge.io/","archived":false,"fork":false,"pushed_at":"2024-07-19T07:32:37.000Z","size":1287,"stargazers_count":48,"open_issues_count":0,"forks_count":5,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-06T03:04:51.897Z","etag":null,"topics":["information-analysis","ocr","video"],"latest_commit_sha":null,"homepage":"https://videosubfinder.sourceforge.io/","language":"C++","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SWHL.png","metadata":{"files":{"readme":"Docs/readme_chn.txt","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-06-20T13:04:36.000Z","updated_at":"2025-05-27T05:24:04.000Z","dependencies_parsed_at":"2024-07-19T13:31:02.683Z","dependency_job_id":null,"html_url":"https://github.com/SWHL/VideoSubFinder","commit_stats":null,"previous_names":["swhl/videosubfinder"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/SWHL/VideoSubFinder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SWHL%2FVideoSubFinder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SWHL%2FVideoSubFinder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SWHL%2FVideoSubFinder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SWHL%2FVideoSubFinder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SWHL","download_url":"https://codeload.github.com/SWHL/VideoSubFinder/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SWHL%2FVideoSubFinder/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31019188,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-27T03:51:26.850Z","status":"ssl_error","status_checked_at":"2026-03-27T03:51:09.693Z","response_time":164,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["information-analysis","ocr","video"],"created_at":"2024-10-13T16:02:41.089Z","updated_at":"2026-03-27T04:29:59.180Z","avatar_url":"https://github.com/SWHL.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"中文教程实时更新：https://docs.qq.com/doc/DRk9HWWlXdkRFa05o?\u0026u=146bab4d9f414c3693447729af1de915\r\n\r\n#--------------------关于程序--------------------\r\n\r\n程序主要提供两个功能：\r\n1）通过数字图像处理算法，自动检测视频中带有硬字幕的帧，生成只带有时间轴的空白字幕；\r\n2）通过文本挖掘算法，用带有硬字幕的图片生成图形文字。可以用其他软件来进一步识别，如FineReader和Subtitle Edit，生成既有文本又有时间轴的字幕。\r\n\r\n为了使程序正常运行，需要下载安装\"Microsoft Visual C++ Redistributable runtime libraries 2022\"，\r\n下载地址：https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads\r\n最新版本测试基于Windows 10 x64, Ubuntu 20.04.5 LTS, Arch Linux (EndeavourOS Cassini Nova 03-2023)\r\n\r\n获得快速支持：https://vk.com/skosnits\r\n\r\n#--------------------快速入门指南--------------------\r\n\r\n1）点击菜单栏\u003c\u003c文件-\u003e打开视频\u003e\u003e（推荐使用OpenCV，提取的时间轴准确性更高）；\r\n2）在\u003c\u003c视频预览框\u003e\u003e中，通过移动垂直和水平分隔线来缩小检测区域，使结果更准确、时间轴更完整；\r\n3）确认字幕在检测区域内的水平对齐方式：居中/左对齐/右对齐/任意位置，在\u003c\u003c设置\u003e\u003e标签页里的\u003c\u003c文本对齐方式\u003e\u003e中选择对应属性\r\n4）强烈推荐使用\u003c\u003c字幕颜色滤镜\u003e\u003e来提高识别结果准确率，该步骤可以跳过：\r\n*- 拖动进度条，找到带有字幕的图像\r\n*- 鼠标点击\u003c\u003c视频预览框\u003e\u003e任意位置，选中后按\"U\"，全屏查看图片，鼠标左键点击字幕像素点，即可获取字幕的颜色信息\r\n*- 字幕颜色信息在\u003c\u003c设置\u003e\u003e标签页中的右下角，复制Lab颜色信息到左边的\u003c\u003c字幕颜色滤镜\u003e\u003e编辑栏中，如：Lab: l:0 a:128 b:128\r\n*- 如果字幕颜色有多种，可以用\"Ctrl+Enter\"在\u003c\u003c字幕颜色滤镜\u003e\u003e编辑栏中添加新的一行颜色信息\r\n5）在\u003c\u003c识别\u003e\u003e标签页中点击\u003c\u003c开始识别\u003e\u003e（如果你只需要时间轴，这步之后，直接跳到\"OCR\"标签页，选择\u003c\u003c根据原始视频图片生成只有时间轴的字幕(RGBImages-\u003eSub)\u003e\u003e，生成一个只有时间轴信息的字幕）\r\n6) 在ILAImages文件夹检查ILA图片: 正常情况下，在ILA图片中的字幕会显示为白色, 如果ILA中的字幕不完整或者不显示，可能是以下情况：\r\n* 使用了强力滤镜\r\n* 字幕没有描边，却使用字幕描边滤镜\r\n* 字幕突然出现或消失\r\n出现这样的情况最好改变设置或者删除对应的ILA图片\r\n7）如果不用\u003c\u003c字幕颜色滤镜\u003e\u003e，则需要注意：\r\n在继续下一步之前，检查字幕描边的颜色是否比字幕文本的颜色更深（大多数情况下是这样的，如果不是，取消选择在\u003c\u003c设置\u003e\u003e标签页中的右边栏中的第一个复选框）\r\n在大多数情况下，程序能正确地识别与字幕文本相关联的颜色，但某些情况过于复杂，就需要通过其他参数设置来处理；\r\n8) 如果使用颜色滤镜，ILA图片效果较好，推荐打开\u003c\u003c使用相交亮度区域(ILAImages)获取字符图片 \u003e\u003e以减少无关字符的产生\r\n9）点击OCR标签页中的\u003c\u003c生成二值化文本图片(RGBImages-\u003eTXTImages)\u003e\u003e\r\n10) 借助其他软件可获得可编辑的字幕文本（FineReader/Subtitle Edit等）\r\n11) 在OCR标签页中根据需要生成完整字幕 (*.srt or *.ass)\r\n\r\n相关视频教程：\r\nhttps://www.bilibili.com/video/BV1U34y187vV/\r\nhttps://www.youtube.com/watch?v=Cd36qODmYF8\r\nhttps://www.youtube.com/watch?v=VHsUfqqAkWY\u0026t=124s\r\n\r\n#--------------------已知的问题--------------------\r\n\r\n1) 用OpenCV和FFMPEG打开视频，提取出的时间轴会有细微的差别，在000-001毫秒之间。\r\n2) 关于字幕中心对齐，如果字幕整体在检测区域的右边，将会被移除。\r\n3) 字幕丢失。确保字幕长度不小于12帧（0.5S）, 可在设置标签页中通过\u003c\u003c字幕持续的最小帧数\u003e\u003e修改。\r\n4) 在TXTResults文件夹中的所有文本都应是UTF-8格式。\r\n5) 如果字幕没有描边，不要使用\u003c\u003c字幕描边滤镜\u003e\u003e，会影响ILAImage和ISAImages的生成。\r\n\r\n#--------------------参数设置--------------------\r\n\r\n1）为了在\u003c\u003c开始识别\u003e\u003e和\u003c\u003c生成二值化文本图片(RGBImages-\u003eTXTImages)\u003e\u003e得到更好的结果\r\n#---------生成RGB图片---------\r\n*- 导入视频，参数设置好之后，在\u003c\u003c设置\u003e\u003e便签页点击\u003c\u003c测试\u003e\u003e按钮来进行测试，尽量多的选择视频中背景明暗度差异较大的帧来进行测试，比如背景太亮或者太暗\r\n*- 通过用鼠标移动\u003c\u003c视频预览框\u003e\u003e中的垂直和水平分隔线来缩小检测区域\r\n   在某些复杂的情况下，你可以多次运行程序来识别不同区域的字幕，可以解决多行字幕可能出现分割问题\r\n   比如：识别双语字幕、对话在视频下面而注释在视频上面的情况\r\n*- 确认字幕在检测区域里的水平对齐方式：居中/左对齐/右对齐/任意位置，在\u003c\u003c设置\u003e\u003e标签页里的\u003c\u003c文本对齐方式\u003e\u003e中选择对应属性\r\n   中心对齐：默认对齐方式\r\n   任意对齐：当前不如其他几种对齐方式好用\r\n*- 为了减少在\u003c\u003c开始识别\u003e\u003e时出现的：丢轴、错轴，在\u003c\u003c生成二值化文本图片(RGBImages-\u003eTXTImages)\u003e\u003e时出现的：文字未被识别、只识别部分的情况，\r\n   对\u003c\u003c限制阈值\u003e\u003e参数的范围[0.25, 0.6]进行调整：\r\n   为了找到最佳的参数值，在\u003c\u003c测试\u003e\u003e时，需要对\u003c\u003c第一次/第二次/第三次过滤\u003e\u003e不同的阶段进行测试，\r\n   直到在右边的\u003c\u003c图片预览框\u003e\u003e中出现完整的白色字幕。\r\n   尽可能尝试那些太亮或太暗的画面，这样画面中大部分与字幕无关的像素将会被移除。\r\n   0.25 - 大多数视频通用，特别是1080p的视频，但是会生成大量无用的图片\r\n   0.5-0.6 - 适用于字幕描边明显的，像白字黑边框的字幕，或者画质低于480p的视频\r\n   0.1 - 适用于字幕没有描边或者字幕颜色比较浅的视频，但是会生成大量无用的图片\r\n*- 使用\u003c\u003c字幕颜色滤镜\u003e\u003e可以极大提高结果的准确性：\r\n   丢轴、错轴的情况会极大的改善，图片二值化后的结果也会更好\r\n*- 字幕的分割也受以下两个因素影响：\r\n   vedges_points_line_error = 0.3\r\n   ila_points_line_error = 0.3\r\n   0.3意为两个相近字幕的允许差异值为30%，比如：两条不同的字幕都只有十个字，在允许差异值为30%的情况下，其中一条字幕只要有七个字以上与另一条字幕相同，就视为同一条字幕。\r\n   同理，如果允许差异值为50%，则只需要五个字以上与另一条字幕相同就可视为同一条字幕\r\n   值越高，时间轴分割的越少\r\n   值越低，时间轴分割的越多\r\n   一般情况下，不推荐改动，只有在没有连续的字幕的情况下，才去降低参数值。\r\n\r\n#---------二值化图片---------\r\n*- 检查字幕颜色是否更深，如果不是，取消选择\u003c\u003c设置\u003e\u003e标签页中右边第一项\u003c\u003c字幕深色描边(字幕有描边时使用)\u003e\u003e的复选框\r\n\r\n大多数情况下，软件能准确识别与字幕有关的颜色，但某些特殊复杂情况，则需要考虑一下参数设置：\r\n*- 二值化过程中部分字符丢失\r\n   与\u003c\u003c缩放图片的限制阈值\u003e\u003e这个参数有关，参数范围[0.1-0.25]\r\n   0.25 - 大多数视频通用，如果有字符丢失，适当调低参数\r\n   0.1-0.15 - 适用于字幕描边不明显的或没有字幕描边的、字幕颜色与背景颜色相近的\r\n   推荐打开\u003c\u003c在二值化图片前根据字幕描边使用交叉亮度区域\u003e\u003e选项，能改善结果\r\n*- 减少二值化过程中多余符号的产生\r\n   \u003c\u003c二值化图片多余字符处理(请勿用于象形文字或阿拉伯语)\u003e\u003e默认打开，但是可能会移除部分正确的字符\r\n\r\n*- 其他能帮助二值化图片的选项\r\n    识别的语言不是符号、阿拉伯语、手写字幕\r\n    字符是完整的，有着稳定的亮度\r\n    使用\u003c\u003c字幕描边滤镜\u003e\u003e\r\n    如果使用了颜色滤镜，以及提取的ILAImages质量很好，推荐打开\u003c\u003c使用相交亮度区域（ILAImages）获取字符图片\u003e\u003e选项，可以减少多余符号的生成\r\n    打\u003c\u003c移除不规则的字(请勿用于阿拉伯语和手写文字)\u003e\u003e选项，减少多余字符的产生\r\n\r\n2) 颜色滤镜参数详解\r\n*- 常用颜色滤镜参数范围\r\nLab: l:180-255 a:108-148 b:108-148  (大多数视频通用)\r\nLab: l:200-255 a:118-138 b:118-138\r\nLab: l:220-255 a:118-138 b:118-138 (强力颜色滤镜，视频质量很好的情况下使用，字幕亮度不稳定不推荐使用)\r\n\r\n参数格式：\r\nLab: l:l_val a:a_val b:b_lab_val\r\nLab: l:min_l_val-max_l_val a:min_a_val-max_a_val b:min_b_lab_val-max_b_lab_val\r\nRGB: r:min_r_val-max_r_val g:min_g_val-max_g_val b:min_b_val-max_b_val\r\nRGB: r:r_val g:g_val b:b_val L:l_val\r\nRGB: r:r_val g:g_val b:b_val L:min_l_val-max_l_val\r\n\r\n*- 描边的颜色参数范围同上，除非描边很明显，否则\u003c\u003c字幕描边滤镜\u003e\u003e选项不建议使用强力滤镜\r\n*- 在\u003c\u003c视频预览框\u003e\u003e中，按\"T\"可全屏查看设置颜色滤镜后效果\r\n    可通过左右方向键和空格键来查看不同帧\r\n*- 字幕颜色是红色的\r\n*- 描边颜色是绿色的\r\n*- 字幕和描边重合部分是黄色的\r\n\r\n同样：\r\n按\"U\"可全屏查看原始视频帧\r\n按\"Y\"查看原视频中剥离出来的字幕的颜色，比如：字幕是黄色的，屏幕上应该就只出现黄色的字幕\r\n按\"I\"查看原视频中剥离出来的描边的颜色\r\n*- 如果使用\u003c\u003c字幕描边滤镜\u003e\u003e或ILAImages图像质量不错，推荐打开\u003c\u003c使用相交亮度区域（ILAImages）获取字符图片\u003e\u003e，可减少无效字符的出现\r\n\r\n3) 二值化质量不高的视频\r\n*- 字幕亮度不稳定的情况\r\n     打开\u003c\u003c字幕深色描边(字幕有描边时使用)\u003e\u003e，人工设定\u003c\u003c允许的最低亮度(仅在灰度扩展选项下生效)\u003e\u003e，最低亮度的值\r\n     如果使用颜色滤镜，建议把最低亮度的值设成跟颜色滤镜的\"min_l_val\"相等\r\n     参数范围：[min(\"允许的最低亮度\", 自动检测的最低亮度), 自动检测的最高亮度]\r\n\r\n\u003c\u003c伽马(Video Gamma)\u003e\u003e和\u003c\u003c对比度(Video Contrast)\u003e\u003e对结果也有帮助\r\n某些情况下，设置\u003c\u003c伽马(Video Gamma)\u003e\u003e == 0.7、\u003c\u003c允许的最低亮度(仅在灰度扩展选项下生效)\u003e\u003e == 100、打开\u003c\u003c灰度扩展(在字幕亮度不稳定的时候使用)\u003e\u003e，会很有帮助\r\n具体情况中，需要自己不断测试才能得到最优的参数值\r\n\r\n*- 借助第三方图片增强软件\r\n     使用\"Topaz Gigapixel AI\": https://topazlabs.com/gigapixel-ai/，对提取的RGB图片进行增强\r\n     建议按默认的两倍放大增强，由于图片的名称就是字幕的时间轴，增强后的图片名称应与原来的一致\r\n\r\n4) 二值化没有描边的字幕\r\n这种情况下，某些字符的分离会变得很困难\r\n可以打开\u003c\u003c在二值化图片前根据字幕描边使用交叉亮度区域 \u003e\u003e选项，会很有帮助\r\n正确设置合适的字幕颜色滤镜\r\n并且，在背景是动态的情况下，ILA images会很有帮助\r\n以下列举的参数对背景分离也很有帮助：\r\n\"Min Sum Color Difference\": min_sum_color_diff = 0\r\n\"Moderate Threshold\": moderate_threshold = 0.1\r\n\"Moderate Threshold For Scaled Image\": moderate_threshold_for_scaled_image = 0.1\r\n\"Use ILAImages for getting TXT symbols areas\" - Turn Off: use_ILA_images_for_getting_txt_symbols_areas = 0\r\n\r\n5) 一条字幕有多种颜色\r\n用\"Ctrl+Enter\"在\u003c\u003c字幕颜色滤镜\u003e\u003e编辑栏中添加多条颜色参数后，打开\u003c\u003c合并到单个集群(可用于单行中有多种颜色的情况)\u003e\u003e选项\r\n\r\n6) 提高软件二值化过程中的运行性能\r\n默认的参数为：\r\n\"CPU kmeans initial loop iterations\" == 20\r\n\"CPU kmeans loop iterations\" = 30\r\n以上参数适应于各种情况，特别是在字幕没有良好的描边的情况下，当字幕有明显的描边的时候，两个指标的参数都可以设为10。\r\n\r\n#--------------------OCR相关--------------------\r\n注意:创建的所有文本类型都应为UTF-8格式。\r\n\r\n1) FineReader与Subtitle Edit相关教程\r\nhttps://www.bilibili.com/video/BV1vp4y1i7Ek/?vd_source=1fba6762e7b2d878744d3b6ede0a9b26\r\n\r\n2) Google Drive等在线OCR相关教程\r\n1.通过\"OCR\"选项卡中的\"拼合图片（TXT/RGBImages-\u003eImagesJoined）\"按钮合并TXT/RGBImages，生成拼合图片后，如果识别结果文件夹（TXTResults）内不存在\"join_txt_results.txt\"文件，将会自动创建。\r\n在\"OCR\"选项卡页面左侧的设置中，可更改选项：\r\n*- 拼合RGB图片或者拼合二值化图片。\r\n*- 使用二值化图片的数据拼合RGB图片（最优选择），如果勾选，它只会拼合二值化时识别到文字的对应图片。\r\n*- 拼图最大数量：将TXT/RGBImages拼合成一个图片时使用到的最大数量，在某些情况下，\"缩放倍数 (根据原始RGB图像缩放)\"== 1时最大数量可以填160，但根据OCR使用经验，填50比填100更准确。\r\n*- 如果分隔符字号为\"-1\"，会根据平均图像高度（以及在TXTImages中的行数）自动生成最佳的分隔符字号，你也可以手动设置范围（1-80）。\r\n*- \"缩放倍数 \"：根据原始RGB图像缩放。\r\n*- 拼合图片的分隔符，支持宏定义：[sub_id], [begin_time], [end_time]。\r\n[重点]但想准确生成字幕，目前仅支持[sub_id]更改格式\r\n\r\n注意：当程序在\"TXTResults/join_txt_results.txt\"中搜索相关字幕数据时，他会在末尾添加额外的[sub_id]\r\n[重点]一般不需要更改，如果OCR无法正确识别分隔符时，可以尝试更改。\r\n\r\n2.将ImagesJoined文件夹中合并的图片上传到Google云盘中的某个目录。\r\n\r\n3.鼠标单击每个合并的图片→打开方式→谷歌文档（它会自动OCR并生成文档）\r\n注意：如果OCR失败并且文档内容为空，你可以尝试修改：\r\n*- \"缩放倍数 (根据原始RGB图像缩放)\"的数值，大多数情况下，谷歌文档对不缩放的图像OCR效果更好。\r\n\r\n4.打开每个生成的文档，并将所有文本复制到\"TXTResults/join_txt_results.txt\"文件中，并以UTF8的格式保存。\r\n注意：\"\\n\"(换行)无关紧要，只需要依次将每个图片的识别结果复制到\"TXTResults/join_txt_results.txt\"内即可\r\n\r\n5.通过单击OCR选项卡中的\"根据文本生成字幕\"按钮，根据\"TXTResults/join_txt_results.txt\"文件生成字幕(*.srt or *.ass)\r\n\r\n3）百度OCR相关教程（推荐）\r\nhttps://www.bilibili.com/video/BV1U34y187vV/\r\n\r\n#--------------------后记--------------------\r\n翻译：豆瓣@我在成都养熊猫\r\n相较于英文版教程，进行了部分筛减和补充，完整版请查看英文版本\r\n欢迎加入硬字幕提取交流群：1161766056，教程中提及的相关软件可进群下载\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswhl%2Fvideosubfinder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fswhl%2Fvideosubfinder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswhl%2Fvideosubfinder/lists"}