Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >AI最佳实践|用腾讯云录音文件识别让无字幕视频自动生成字幕

AI最佳实践|用腾讯云录音文件识别让无字幕视频自动生成字幕

原创
作者头像
腾讯云AI
发布于 2023-04-25 02:02:28
发布于 2023-04-25 02:02:28
2.4K00
代码可运行
举报
运行总次数:0
代码可运行

试想一下,当我们在观看一段视频时,如果遇上字幕缺失,观感是不是会大打折扣?

近些年,短视频、直播等线上娱乐方式快速发展,直接拉动了旅游、电商、影视创作等行业新风潮;而要呈现出一段好的视频效果,不仅仅考验好的拍摄技法,后期处理也是重中之重。以视频字幕为例,有字幕的视频总能“一气呵成”的顺畅看完,而无字幕的,总令人觉得缺失了一种味道。事实上,纯手工添加字幕,也费时费力,面对较大时长与批量化字幕处理的,多少有些苦不堪言,那有没有更智能化的方式呢?

接下来,本文将分享一下,如何借助录音文件识别服务给无字幕视频自动生成字幕。

一、分析调研

给无字幕视频自动生成字幕,其实就是先对视频文件导出的音频文件进行识别,得到识别文字,再根据识别得到的文字与短句的时间信息处理得到视频srt字幕文件,在视频文件中导入srt字幕文件即可得到效果。

实现思路如下:

1.借助ffmpeg从视频中提取音频

2.调用录音文件识别服务,对音频文件进行识别

3.对识别得到的文字与短句的时间信息进行处理得到视频srt字幕文件

4.将命名相同的视频文件与srt文件放在同一目录下,用暴风影音或其他播放器打开,即可得到有字幕的视频。

二、代码开发

1.借助ffmpeg从视频中提取音频

项目使用了ffmpeg依赖,需先下载安装,并设置环境变量。之后就可通过引入subprocess库,执行ffmpeg命令,启动一个新进程,完成对音频的提取。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import subprocess
def extract_audio(video, tmpAudio):
	ret = subprocess.run('ffmpeg -version', shell=True)
	if ret.returncode != 0:
		print("请先安装 ffmpeg 依赖 ,并设置环境变量")
		return
	ret = subprocess.check_call(['ffmpeg', '-i', video, '-vn', '-ar', "16000", tmpAudio], shell=False)
	if ret.returncode != 0:
		print("error:", ret)

2.识别音频文件

在这里笔者选择的录音文件识别服务是腾讯云ASR的录音文件识别,通过调研,腾讯云的录音文件识别,可以在调用时直接根据语句之间的停顿智能断句、加标点,无需再调用其他接口进行语句拆分,同时返回结果数据也可根据不同需求进行多种选择,如是否过滤脏词、是否过滤语气词等。

服务具体详细信息这里不再赘述,详情见官方文档见腾讯云ASR

(1)要访问腾讯云的服务,则需要SecertId与SecretKey,该API密钥可在API密钥管理页面新建与查询,稍后配置到config文件中即可。

笔者项目配置在tencent/config.py当中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Config(object):
	OUTPUT_PATH = '/XXX/video-srt/audio/' #输出文件目录
	APP_ID = '******' # 对应上述APPID
	SECRET_ID = '******' # 对应上述SecretId
	SECRET_KEY = '******' # 对应上述SecretKey

(2)使用官网提供的sdk

找到腾讯云语音识别服务下的录音文件识别的API文档,滑动到下方,找到开发者资源,这里笔者选择调用Python SDK。

可以看到录音文件识别是个异步服务,可通过CreateRecTask接口发送录音文件识别请求,之后可通过DescribeTaskStatus接口查询识别结果。

笔者项目中函数create_rec、函数query_rec_task分别对CreateRecTask接口和DescribeTaskStatus接口进行了封装。详细介绍如下:

CreateRecTask:

在请求时除需传入EngineModelType(引擎模型类型)、ChannelNum(识别声道数)、ResTextFormat(识别结果返回形式)、SourceType(语音数据来源)等这些必选参数外,还可根据需要传入FilterDirty(是否过滤脏词)、FilterModal(是否过滤语气词)等参数。

该请求成功后将返回RequestId、TaskId等信息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def create_rec(engine_type, file_url):
	client = create_client(Config.SECRET_ID, Config.SECRET_KEY)
	req = models.CreateRecTaskRequest()
	params = {"ChannelNum": 1, "ResTextFormat": 2, "SourceType": 0, "ConvertNumMode": 1}
	req._deserialize(params)
	req.EngineModelType = engine_type
	req.Url = file_url
	try:
		resp = client.CreateRecTask(req)
		logger.info(resp)
		requesid = resp.RequestId
		taskid = resp.Data.TaskId
		return requesid, taskid
	except Exception as err:
		logger.info(traceback.format_exc())
		return None, None

这里需要注意两个参数:

一是,ResTextFormat。识别结果返回形式有三种,这里笔者因在后续生成srt文件时,还根据单句识别结果的标点进行了一层分隔,所以选用了“词级别粒度的详细识别结果(包含标点、语速值)”的形式,若是不需要多一层划分,可直接选用“识别结果文本(含分段时间戳)”的形势。

二是,SourceType。语音数据来源分为两种,分别是语音 URL和语音数据(post body),笔者这里选用的是语音 URL,具体实现为,将本地音频上传到腾讯云的cos存储桶中,则语音URL为固定地址+音频文件名,即可实现调用。也可通过其他方式得到音频的url。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import subprocess
def upload_file(tmpAudio):
	objectName = tmpAudio.split('/')[-1]
	ret = subprocess.run(['coscmd', '-s', 'upload', tmpAudio, objectName], shell=False)
	if ret.returncode != 0:
		print("error:", ret)

DescribeTaskStatus:

在请求时需传入TaskId。

该请求成功后将返回RequestId和识别结果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def query_rec_task(taskid):
	client = create_client(Config.SECRET_ID, Config.SECRET_KEY)
	req = models.DescribeTaskStatusRequest()
	params = '{"TaskId":' + str(taskid) + '}'
	req.from_json_string(params)
	result = ""
	while True:
	try:
		resp = client.DescribeTaskStatus(req)
		resp_json = resp.to_json_string()
		logger.info(resp_json)
		resp_obj = json.loads(resp_json)
		if resp_obj["Data"]["StatusStr"] == "success":
			result = resp_obj["Data"]["ResultDetail"]
			break
		if resp_obj["Data"]["Status"] == 3:
			return False, ""
		time.sleep(1)
	except TencentCloudSDKException as err:
		logger.info(err)
		return False, ""
	return True, result

这里笔者将根据ResultDetail的信息生成srt文件,所以函数query_rec_task的返回值为DescribeTaskStatus接口返回的data中的ResultDetail。

3.处理识别结果生成srt字幕文件

笔者这里生成的srt文件除了根据调用接口已自动划分的句子进行时间的标注外,当自动划分的句子的长度较长时,还会根据当前句子的标点,结合ResultDetail中的OffsetEndMs、StartMs、EndMs等信息对句子进行再一次分割,避免字幕一行展示过多的情况。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def to_srt(src_txt):
	flag_word = ["。", "?", "!", ","]
	basic_line = 15
	srt_txt = ""
	count = 1
	    for i in range(len(src_txt)):
        current_sentence = src_txt[i]["FinalSentence"]
        last_time = ms_to_hours(src_txt[i]["StartMs"])
        len_rec = len(current_sentence)
        if len_rec > basic_line:
            start_rec = 0
            last_time = ms_to_hours(src_txt[i]["StartMs"]) 
            while(len_rec > basic_line):
                flag = True
                for j in flag_word: 
                    if j in current_sentence[start_rec:start_rec+basic_line]:  
                        loc_rec = current_sentence.index(j, start_rec, start_rec+basic_line) + 1 
                        flag = False
                        break
                if flag:
                    loc_rec = start_rec + basic_line
                current_txt = current_sentence[start_rec:loc_rec] + "\n" 
                start_time = last_time
                end_time = ms_to_hours(src_txt[i]["Words"][loc_rec]["OffsetEndMs"]+src_txt[i]["StartMs"])
                if current_sentence[start_rec:] != "" and current_sentence[start_rec:] != None:
                    srt_txt = srt_txt + str(count) + "\n" + start_time + "-->" + end_time + "\n" + current_txt + "\n"
                    count += 1
                start_rec = loc_rec
                last_time = end_time
                len_rec = len(current_sentence[loc_rec:])
            current_txt = current_sentence[start_rec:] + "\n"
            start_time = last_time
            end_time = ms_to_hours(src_txt[i]["EndMs"])
            if current_sentence[start_rec:] != "" and current_sentence[start_rec:] != None:
                srt_txt = srt_txt + str(count) + "\n" + start_time + "-->" + end_time + "\n" + current_txt + "\n"
                count += 1
        else:
            start_time = last_time
            end_time = ms_to_hours(src_txt[i]["EndMs"])
            srt_txt = srt_txt + str(count) + "\n" + start_time + "-->" + end_time + "\n" + current_sentence + "\n"+"\n"
            count += 1
	return srt_txt

这里srt文件最终生成的位置与Config文件中的OUTPUT_PATH相关。

4.得到有字幕的视频。

(1)原视频文件的名称需与srt文件相同

(2)选择打开方式

(3)有字幕的视频

至此,给无字幕视频生成字幕已经实现,完整工程代码放在附录中,除去修改一些配置,使用起来较为简便,欢迎感兴趣的同学前来使用!

附录

工程代码:https://github.com/ForestSkyzzx/video-srt

腾讯云智能录音文件识别:https://cloud.tencent.com/product/asr

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python-根据语音识别让无字幕视频自动生成字幕,附srt字幕文件
各大平台都有长语音转写的服务,但是收费昂贵,而且有次数和时间限制。 因此我想到了一个白嫖的好办法。将长音频根据语句停顿切割得到短音频,使用他们提供的短音频识别服务来识别长音频不是更好吗?粗略计算了下,可以使用的时长为50000分钟,(提供的短音频识别服务次数以及时长远大于长音频)白嫖。 至于视频声音的停顿时间也是很容易得到的。 最后根据文字与文字出现的时间很容易就得到了视频的srt字幕
全栈程序员站长
2021/05/19
5.8K0
重塑银幕声音:腾讯云语音在视频中的应用
近期,改编自金宇澄同名小说,知名导演王家卫执导的电视剧《繁花》的热播引起剧烈反响。原著小说以其细腻的笔触和丰富的上海风情,描绘了 20 世纪 60 年代至 90 年代上海市民的生活图景,是一部具有浓厚地域特色和时代感的作品。王家卫的影视作品以其独特的美学风格和深刻的情感表达著称。沪语版剧中使用上海话配音,字证腔圆让人耳目一新,相信后面肯定会有更多、更好的沪语影视作品呈现给观众,也会有更多的优秀专家深度参与,用沪语来叙述上海故事。
leon 橙
2024/05/27
1.1K3
重塑银幕声音:腾讯云语音在视频中的应用
基于OpenAI Whisper AI模型自动生成视频字幕:全面解析与实战指南
在数字化时代,视频内容已成为信息传播的重要载体。然而,为视频添加字幕却是一项繁琐且耗时的工作。幸运的是,随着人工智能技术的飞速发展,特别是OpenAI Whisper模型的推出,我们有了更加高效、智能的解决方案。
小白的大数据之旅
2024/12/28
9590
腾讯云录音文件识别请求和结果查询
.https://console.cloud.tencent.com/api/explorer?Product=asr&Version=2019-06-14&Action=DescribeTaskSt
算法发
2020/08/13
3.3K0
腾讯云录音文件识别请求和结果查询
【语音识别】一键实现电话录音转word文档
因从事律师工作,在诉讼业务中,经常会解除到当事人电话录音这一类的证据。苦于当事人提供的电话录音要么普通话不标准,要么直接就是方言,对话中的关键信息也难以定位。而在法庭的质证环节中,仅提交一份电话录音的文件,却不提供转写的文字版内容,显然是不会留给审判席人员好印象的。众所周知,律师最值钱的就是时间了,那么这样一份繁琐的转写录音文件的工作流程,能不能够使用AI的科技手段实现呢?
爱去西
2024/06/03
9200
【语音识别】一键实现电话录音转word文档
基于腾讯云语音产品的最佳技术实践 | 如何助力 CRM 传统营销方式降本增效
CRM 客户关系管理系统 通常是企业为提高核心竞争力,利用相应的信息技术以及互联网技术协调企业与客户间在销售、营销和服务上的交互,从而通过不断的优化,提升企业管理方式,向客户提供创新式的个性化的客户交互和服务的过程。
六月的雨在Tencent
2024/06/26
3870
不用写一行代码,deepseek结合腾讯云语音识别来批量转录Mp3音频
不用写一行代码,deepseek结合腾讯云语音识别来批量转录Mp3音频 首先,打开window系统中的cmd命令行工具,或者powershell,安装腾讯云t
AIGC部落
2024/06/23
2.5K0
不用写一行代码,deepseek结合腾讯云语音识别来批量转录Mp3音频
腾讯云语音识别之录音文件识别
录音文件识别API介绍地址:https://cloud.tencent.com/document/product/1093/37822
HI hero
2020/07/15
10.1K0
腾讯云语音识别之录音文件识别
探索腾讯云语音:智能语音识别的行业应用与技术展望
交通运输行业的调度中心是确保运输流程顺畅与安全的神经中枢。在紧急情况或事故发生时,能够迅速而准确地回溯事件细节对于采取有效应对措施至关重要。
AI大眼萌
2024/06/08
6930
探索腾讯云语音:智能语音识别的行业应用与技术展望
为视频增加中文字幕---Amazon Transcribe
语音识别技术,也被称为自动语音识别(Automatic Speech Recognition,简称ASR),其目标是将人类的语音中的词汇内容转换为计算机可读的输入,例如按键、二进制编码或者字符序列。语音识别技术已经发展了几十年,直到2009年,Hinton把人工智能深度学习解决方案引入语音识别中,语音识别才取得了巨大突破。
我被狗咬了
2019/11/12
3K0
【玩转腾讯云】语音转文字,轻松写笔记
没天总是不停的开会,会议内容又多又发散!音频文件整理困难,搜索不到终点,占用空间大,不利于分享和传达!
tonglei0429
2021/05/06
4.7K0
微信小程序对接云开发录音文件识别nodejs sdk
拷贝"tencentcloud"目录到云函数"voiceRecognize"的包管理目录"node_modules"下
张世强
2020/07/17
2.9K0
微信小程序对接云开发录音文件识别nodejs sdk
使用云函数实现语音识别案例
语音识别,也被称为自动语音识别 Automatic Speech Recognition,(ASR),其目标是将人类的语音中的词汇内容转换为计算机可读的输入,例如按键、二进制编码或者字符序列。与说话人识别及说话人确认不同,后者尝试识别或确认发出语音的说话人而非其中所包含的词汇内容。该技术已经广泛应用于我们平时的生活中,例如:
haimingli
2021/01/04
1.3K0
python-视频声音根据语音识别自动转为带时间的srt字幕文件
讯飞文字转写长语音只有5h免费,想要体验50000分钟白嫖的,看我另一篇文章 最近在看一些教程,发现没有字幕,网络上也没有匹配的,看着很别扭 因此我使用au处理了视频,得到了视频声音,wav格式,20多分钟长度 然后使用讯飞的语音识别接口识别了下,得到了每句话识别的文字和视频对应的时间 然后按照srt格式对其进行了输出 这样就能给那些没有字幕的视频自动添加字幕了 我的需求大致满足了,记录一下。
全栈程序员站长
2021/05/19
3.4K0
测试人工智能自动语音识别系统
ASR 自动语音识别(Automatic Speech Recognition)是一种将人的语音转换为文本的技术。
赵云龙龙
2020/06/13
1.5K0
测试人工智能自动语音识别系统
【玩转腾讯云】【腾讯云语音合成TTS】短视频批量生成器
疫情期间发现一个有趣的现象,有一类短视频父母刷抖音的时候经常会看到,这类视频只有一个或多个简单的背景图片,配合一段文字录音,讲一段新闻、故事、或者鸡汤。我想可能是他们对纯文本或者纯语音的内容都不感兴趣,更容易接受短视频这样简单的内容形式。又想到腾讯云有语音合成的产品,加上ffmpeg等视频处理工具,是不是可以批量生成一些这类短视频呢。
01player
2020/05/04
7.9K2
使用ffmpeg给视频自动添加字幕
今天看到一篇“一个视频自动加字幕的小工具,如何做到月入2W”的博文(突字幕,有兴趣的同学可以度娘,作者的动手能力确实很强!),考虑实现这个小工具就能做到这个收入,还是挺让人羡慕的!在当前人工智能、机器学习的热度不减的当下,依托成熟三方服务或者开源实现,实现一个类似的应用理论上是不难的,而核心的技术难点也显而易见,主要在语音识别,以及机器翻译的准确性上,考虑到商用,所以感觉最大可能是使用了三方成熟的API!
呱牛笔记
2023/05/02
3.2K0
使用ffmpeg给视频自动添加字幕
C#实战:使用腾讯语音识别服务轻松完成音频文件识别功能
今天给大家分享一下使用腾讯语音识别服务轻松完成音频文件识别功能。这里使用的是C#编写的窗体应用。希望对大家了解和快速接入腾讯语音识别服务的朋友提供一些帮助!
小明互联网技术分享社区
2024/05/23
6680
C#实战:使用腾讯语音识别服务轻松完成音频文件识别功能
AI办公自动化:根据字幕时间轴批量对视频进行截图
读取视频:"D:\My.Neighbor.Totoro.1988.720p.BluRay.X264-AMIABLE [PublicHD]\My.Neighbor.Totoro.1988.720p.BluRay.X264-AMIABLE.mkv";
AIGC部落
2024/06/24
1340
AI办公自动化:根据字幕时间轴批量对视频进行截图
肝了4天,我用ChatTTS和LLM让deeplearning.ai课程说上流畅中文
我们都知道外网上有很多优秀的视频教程平台,比如 Coursera 和 deeplearning.ai。尤其是后者,由吴恩达老师与OpenAI、Langchain、LlamaIndex、AutoGen等公司和作者合作,推出了一系列广受好评的LLM教程,如Prompt Engineering、Langchain教程、LlamaIndex教程和AutoGen教程。deeplearning.ai 的课程紧跟时下热点,是大语言模型爱好者和从业者不可或缺的资源。然而,deepleaning.ai 的课程通常没有中文字幕,这无疑提高了学习的门槛。即使有些同学坚持学习,也可能因为语言障碍只能学到皮毛。我肝了4天,我成功地让这些课程说上流畅地道的普通话。话不多说,让我们直接看看效果视频。
AgenticAI
2025/03/18
1710
肝了4天,我用ChatTTS和LLM让deeplearning.ai课程说上流畅中文
推荐阅读
相关推荐
python-根据语音识别让无字幕视频自动生成字幕,附srt字幕文件
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档