Java实现抓取在线视频并提取视频语音为文本
最近在做大模型相关的项目,其中有个模块需要提取在线视频语音为文本并输出给用户。作为一个纯后端Jave工程师,搞这个确实是初次尝试。
二、 调研
基于上述功能模块,主要有三大任务:1、 提取网页中的视频 2、 视频转语音 3、 语音转文本。
首先是第一项:尝试了jsoup,webmagic等工具,最终还得是 selenium(也是各种踩坑)才实现了想要的效果。
第二项:这个探索是相当费劲,首选开源库 FFmpeg,但是命令行安装一直失败。因此转向其他方案,尝试了 Xuggler、JAVE、JAVE2、JavaCV 等均以失败告终。最终决定还是用 FFmpeg 吧。经过不懈努力,终于是安装好了,直接官网下载本地解压即可。
第三项:团队大哥提供了一个技术方案: https://www.funasr.com。虽说是现成的方案但是实践起来也是费了一把力。
经过上述三步,理论上来说,整体流程总算是可以调通了。但是实际运行起来却不那么顺利,如:长视频转语音超时、语音转文本超时等等。但是经过不懈努力呢,总算是搞定了上述一系列问题,实现了想要的效果。具体实践方案如下:
三、 实践
1、 提取网页中的视频
a. 下载插件 chromedriver
建议从网页下载,需要与chrome浏览器版本适配,不然运行不起来。下载地址: https://chromedriver.storage.googleapis.com/index.html
b. 导入selenium的jar包
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.1.0</version>
</dependency>
c. 话不多说,直接上🐎:
/**
* 从指定网址获取主视频链接
*
* @param targetUrl 目标网址
* @return 主视频链接,如果未找到则返回null
*/
public static String catchMainVideo(String targetUrl) {
// 加载驱动,后面的路径自己要选择正确,也可以放在本地
System.setProperty("webdriver.chrome.driver", "xxx/driver/chromedriver");
// ChromeOptions 可以注释 这里是阻止浏览器的打开
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
options.addArguments("--disable-gpu");
// 初始化一个谷歌浏览器实例,实例名称叫driver
WebDriver driver = new ChromeDriver(options);
// get()打开一个站点
driver.get(targetUrl);
// 等待页面加载
try {
Thread.sleep(100);
} catch (Exception e) {
return null;
}
JavascriptExecutor js = CastUtil.convert(