Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

不如来看看隔壁的 extract-subtitles? #7

Open
duangsuse opened this issue Apr 22, 2020 · 3 comments
Open

不如来看看隔壁的 extract-subtitles? #7

duangsuse opened this issue Apr 22, 2020 · 3 comments

Comments

@duangsuse
Copy link

duangsuse commented Apr 22, 2020

https://github.com/duangsuse-valid-projects/extract-subtitles

这个是我改的,原作者比较学院派,没有那些 fixed rate 什么的,主要是 absdiff(m1, m2)scipy.signal.argrelextrema 提取关键帧(key frame)

也就是说没有这种算法:

for frame_no in range(0, video.getprop(cv2.CAP_PROP_FRAME_COUNT), cfg.step):
  video.setprop(cv2.CAP_PROP_POS_FRAMES, frame_no)
  imwrite(f"{frame_no}.png", video.read()[1])

OCR 当然是 PyTesseract ,一个本地的 OCR。 去重的话不是在字幕区图像上面去重,是在文字上应用编辑距离算法。

效果请参看 https://t.me/dsuset/7167

此外你的这个描述… 有点不准确吧

一是防止结果重复;二是能把固定位置的文字收敛(比如台标),避免字幕定位错误。

什么叫做『收敛』…… 这个名词好像是常用在机器学习领域,另外其实还有一种思路是预先裁剪好图像再去 OCR,因为字幕位置复杂的视频嘛… 一般会同时包含纵向字幕,这样即便一次提取完效果其实也不咋样。

像这样比较自动化的识别整个图像然后选 y 位置一致集合里最大的一组视为字幕也可以,如果要优化,你可以参考 extract-subtitle 的关键帧识别算法:

https://github.com/duangsuse-valid-projects/extract-subtitles/blob/64e1d1da376b1ec23740b6645c1b31f52620048d/extract_subtitles.py#L113-L143

@linbin0o0
Copy link

https://github.com/duangsuse-valid-projects/extract-subtitles

这个是我改的,原作者比较学院派,没有那些 fixed rate 什么的,主要是 absdiff(m1, m2)scipy.signal.argrelextrema 提取关键帧(key frame)

也就是说没有这种算法:

for frame_no in range(0, video.getprop(cv2.CAP_PROP_FRAME_COUNT), cfg.step):
  video.setprop(cv2.CAP_PROP_POS_FRAMES, frame_no)
  imwrite(f"{frame_no}.png", video.read()[1])

OCR 当然是 PyTesseract ,一个本地的 OCR。 去重的话不是在字幕区图像上面去重,是在文字上应用编辑距离算法。

效果请参看 https://t.me/dsuset/7167

此外你的这个描述… 有点不准确吧

一是防止结果重复;二是能把固定位置的文字收敛(比如台标),避免字幕定位错误。

什么叫做『收敛』…… 这个名词好像是常用在机器学习领域,另外其实还有一种思路是预先裁剪好图像再去 OCR,因为字幕位置复杂的视频嘛… 一般会同时包含纵向字幕,这样即便一次提取完效果其实也不咋样。

像这样比较自动化的识别整个图像然后选 y 位置一致集合里最大的一组视为字幕也可以,如果要优化,你可以参考 extract-subtitle 的关键帧识别算法:

https://github.com/duangsuse-valid-projects/extract-subtitles/blob/64e1d1da376b1ec23740b6645c1b31f52620048d/extract_subtitles.py#L113-L143

你好,这个是不是只支持英文字幕的提取?

@duangsuse
Copy link
Author

你好,这个是不是只支持英文字幕的提取?

OCR 其实只是提取字幕的最后一部分,我做完单帧位图的预处理(裁切、应用滤镜)后交给 OCR 库就可以了,pytesseract 是支持中文字幕的,在软件里也有『语言』命令行参数。

@ghost
Copy link

ghost commented Sep 15, 2020

运行后出现错误
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants