python实现从英文视频中提取文字实现中文翻译

大家搞短视频创作,难免要去youtube等国外视频网站搞些素材。

国外视频大部分都是英文的。为了方便我们二次创作,如何提取音轨、识别文字、英对中的翻译呢?

流程基本如下:

  1. 从视频中提取音轨以便后续处理

  2. 语音识别技术将音频转换为文本

  3. 将转换后的文本翻译为中文

  4. 剪辑软件文本字幕

步骤1:提取视频音轨

需要从视频中提取音轨以便后续处理。为了实现这一步骤,我们可以使用moviepy库。在base虚拟环境中安装moviepy

pip install moviepy

VideoFileClip类加载视频文件,并使用audio属性提取音频。

然后,我们使用write_audiofile方法将音频保存到指定路径的文件中。


from moviepy.editor import VideoFileClip

def extract_audio(video_path, audio_path):
    video = VideoFileClip(video_path)
    audio = video.audio
    audio.write_audiofile(audio_path)

# 我们测试一下
extract_audio(r"E:\01.mp4",r"E:\111.wav")

效果如下:
在这里插入图片描述

步骤2:使用语音识别将音频转换为文本

我们需要将音频转换为文本。为了实现这一步骤,我们可以使用SpeechRecognition库。

pip install SpeechRecognition 
pip install vosk

这个库大部分是调用API,很多国外API我们访问不了,比如:Google Speech API


import speech_recognition as sr
import vosk
import json

def convert_audio_to_text(audio_path):
    r = sr.Recognizer()

    with sr.AudioFile(audio_path) as source:
        print("正在读取内容....")
        audio = r.record(source)

    print("模型正在识别,要等待....")
    # 这要注意去去vosk的官网下模型修改模型文件夹名称为model
    #  保存到项目目录下
    return r.recognize_vosk(audio)

 # 测试一下函数
txt = convert_audio_to_text(r'E:\111.wav')
entext = json.loads(txt)['text']
print(entext)

效果如下图:
在这里插入图片描述
首先创建了一个Recognizer对象。然后,我们使用AudioFile对象加载音频文件,并使用record方法记录音频。

接下来,我们使用recognize_vosk方法将音频转换为文本。

步骤3:翻译文本为中文

获得了音频的文本表示,我们可以将其翻译为中文。为了实现这一步骤,我们可以百度翻译,去百度翻译云申请开发者账号和服务

https://api.fanyi.baidu.com/


import requests
import random
import json
from hashlib import md5

API_URL = 'http://api.fanyi.baidu.com/api/trans/vip/translate'


def translate_text(query, from_lang="en",to_lang="zh"):
    appid = '你申请的appid'
    appkey = '你申请的秘钥'
    
    salt = random.randint(32768, 65536)
    signstr = appid + query + str(salt) + appkey
    sign = md5(signstr.encode("utf-8")).hexdigest()

    headers = {'Content-Type': 'application/x-www-form-urlencoded'}
    payload = {'appid': appid, 'q': query, 'from': from_lang, 'to': to_lang, 'salt': salt, 'sign': sign}

    # Send request
    r = requests.post(API_URL, params=payload, headers=headers)
    return  r.json()
    

result = translate_text(entext)
print(json.dumps(result, indent=4, ensure_ascii=False))
txt = result['trans_result'][0]['dst']
print(txt)

with open('output.txt','w') as fp:
    fp.write(txt)
    

在这里插入图片描述
我也有从剪映中提取文字,抽取字幕,导出字幕文本,然后翻译,下面是两个的对照结果。你感觉哪个更好一些?

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老朱2000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值