本帖最后由 wdrlly 于 2021-3-1 23:51 编辑
先提一下背景,小白浏览器目前貌似是比较小众的一款浏览器,主打简洁漂亮,比较让我觉得眼前一亮的就是它的动态屏,类似动态桌面,官网地址:www.minibai.com
上一个此浏览器的界面
小白浏览器界面
不过我知道这款浏览器还是因为它的小白无障碍语音AI助手(名字简直太长,不知道官方怎么想的,我喜欢直接叫AI字幕助手)
AI字幕助手图标
小弟经常看一些外文的视频教程,大多数没有字幕,更别提中文字幕,偶然间搜索到这款浏览器的AI字幕助手,试了试,他可以将无字幕的视频根据音频实时识别出字幕并翻译为中文,当然也可显示为双语,总体来说视频教程,尤其的英文的教程翻译还是比较准,但是有些专业术语还是不行,不过他还支持日语和韩语。
接下来再说说为什么要研究提取这么个事,首先要知道,他这个浏览器的AI字幕是没有保存字幕功能的,当前视频看完关了,下次又得重新缓冲,这就比较坑了,我看完的很多教程总有有些要回去翻当时的实现,这时候盲看还是很吃力,对此我还咨询了官方客服,客服给出的措辞是,目前没有,不过在以后的产品规划中有考虑,,等于没说,所以干脆就研究研究他
( 注:先声明,小弟是各种新手,什么逆向、脱壳、破解连入门都不算,看过吾爱各种大神的各种牛操作,本着看多生巧的心理,然而依然白板一枚,所以大佬看了下面的实现就别吐槽小弟了,毕竟这个也是第一次发帖子)
经过使用了很多次AI字幕,基本断定字幕是从服务器生成的,所以就有了第一种方案,抓包,通过抓包发现,浏览器跟服务器通信貌似使用的websocket通信,分析了很多包数据,貌似没看出啥,内容都是编了码或者加了密,随即放弃
第二种尝试,既然是页面中放视频,那么用开发者工具看一下页面源码或者事件,看看能不能看出什么猫腻,但是,然鹅,那个页面根本不能打开开发者工具,产品太流氓了,完全不给剧透的机会
第三种尝试,找内存数据,既然他缓冲后就能直接拖动播放条看,肯定存在内存中,然后本着顺便学习的态度查找这方面的资料,然后,就没有然后了,直接劝退,太高深了
本来已经放弃了,抱着侥幸的心理看看,既然是谷歌内核浏览器...
那么去看看谷歌浏览器的那一堆命令行参数,看看能不能通过此方法将开发者工具整出来,结果让我发现了输出日志的方法,就想看看这个浏览器有没有啥东西输出,结果就发现了宝贝
通过给浏览器加命令行参数--enable-logging --log-file="G:\\output\1.txt" , 1.txt是日志输出的文件,打开浏览器, 通过AI播放器播放一遍视频,如下
小白AI字幕助手播放器
将需要提取字幕的视频播放完毕后关闭浏览器,此时日志文件已生成到指定目录,如上命令的1.txt内容如下
原始日志内容
可以看出,此功能的程序猿应该是通过此方式将内容传至前端网页,或者干脆就是调试后忘记关闭日志了 ,目前我使用的版本为官方网站下载的10.3.3804.1667版本,80谷歌内核,( 主要提醒:此版本官方还未发现并关闭日志,且用且珍惜) 所以我们需要做的就是将此数据提取出来存为字幕文件即可,所以本人写了一个简单的批处理脚本,将此文件字幕内容提取到字幕文件中 [Bash shell] 纯文本查看 复制代码 chcp 437
@echo off
setlocal enabledelayedexpansion
echo.> %2
set /a j=0
set /a n=1
for /f "tokens=*" %%s in (%1) do (
if !j!==0 (
set head=%%s
if "!head:~0,4!" equ "####" (
echo !n! >> %2
set /a n+=1
set /a j+=1
)
) else (
echo %%s >> %2
set /a j+=1
if !j!== 4 (
set /a j=0
echo.>> %2
)
)
)
直接将此批处理代码保存,在powser shell 中执行.\get-sub.bat 1.txt sub.srt ,即可得到提取出的字幕,直接放入播放器播放
试用提取后的字幕
补一个傻瓜式的批处理,复制下方代码直接保存为bat文件,放入到与输出日志(1.txt,此文件名固定,同上方日志输出名称)同级目录,执行即可生成sub.srt
[Bash shell] 纯文本查看 复制代码 chcp 437
@echo off
setlocal enabledelayedexpansion
echo.> sub.srt
set /a j=0
set /a n=1
for /f "tokens=*" %%s in (1.txt) do (
if !j!==0 (
set head=%%s
if "!head:~0,4!" equ "####" (
echo !n! >> sub.srt
set /a n+=1
set /a j+=1
)
) else (
echo %%s >> sub.srt
set /a j+=1
if !j!== 4 (
set /a j=0
echo.>> sub.srt
)
)
)
完成,第一次发帖,请各位大佬多多包涵,多多支持 |