OpenAI Whisper + FFmpeg + TTS:动态实现跨语言视频音频翻译

news2025/1/11 2:21:39

本文作者系360奇舞团前端开发工程师

摘要:

本文介绍了如何结合 OpenAI Whisper、FFmpeg 和 TTS(Text-to-Speech)技术,以实现将视频翻译为其他语言并更换声音的过程。我们将探讨如何使用 OpenAI Whisper 进行语音识别和翻译,然后使用 FFmpeg 提取视频音轨和处理视频,最后使用 TTS 技术生成新的语音并替换原视频的音轨。通过这种方式,我们可以为视频添加新的语言版本,同时保持其原始视觉内容。

引言:

现如今,全球范围内的视频内容正在迅速增长,跨语言传播和多语言支持成为了一个重要的需求。但是,手动为视频添加不同语言的字幕或配音可能非常耗时且昂贵。本文将介绍一种利用 OpenAI Whisper、FFmpeg 和 TTS 技术的方法,使我们能够将视频翻译为其他语言并更换声音,以满足多语言需求,同时降低成本和时间。

  1. OpenAI Whisper:是一种强大的语音识别模型,能够将语音转换为文本,并支持多种语言。我们将使用 Whisper 将视频中的原始语音提取为文本,并通过翻译服务将其转换为目标语言的文本。

  2. FFmpeg:处理视频和音轨提取接下来,我们使用 FFmpeg 工具处理视频和提取音轨。FFmpeg 是一款功能强大的多媒体处理工具,它支持各种音视频处理操作。我们可以使用 FFmpeg 提取原视频的音轨,以便稍后替换为新生成的语音。

  3. TTS 技术:生成新的语音为了替换原视频的音轨,我们需要生成新的语音。这里我们使用 TTS(Text-to-Speech)技术,将先前翻译得到的目标语言文本转换为对应语言的语音。TTS 技术基于深度学习模型,可以生成自然流畅的语音,使其与原视频的内容相匹配。

  4. 结合 Whisper、FFmpeg 和 TTS:实现视频翻译和更换声音最后,我们将 Whisper 生成的目标语言文本与 TTS 生成的新语音结合起来,并使用 FFmpeg 将新语音替换到原视频的音轨中。通过使用 FFmpeg 的音轨替换功能,我们可以确保新语音与视频内容同步,并生成具备目标。

结果展示

  • 原视频:https://caining0.github.io/statichtml.github.io/test.mp4

  • 转换后视频:https://caining0.github.io/statichtml.github.io/output.mp4

前提与依赖

pip3 install openai-whisper
pip3 install ffmpeg-python
brew install ffmpeg
pip3 install TTS//https://github.com/coqui-ai/TTS

openai-whisper用法

命令行用法

以下命令将使用medium模型转录音频文件中的语音:

whisper audio.flac audio.mp3 audio.wav --model medium

默认设置(选择模型small)适用于转录英语。要转录包含非英语语音的音频文件,您可以使用以下选项指定语言--language

whisper japanese.wav --language Japanese

添加--task translate会将语音翻译成英文:

whisper japanese.wav --language Japanese --task translate

运行以下命令以查看所有可用选项:

whisper --help

Python 用法

import whisper

model = whisper.load_model("base")
result = model.transcribe("audio.mp3")
print(result["text"])

例子

whisper test.mp4 --language Chinese --task translate
[00:00.000 --> 00:03.400]  If the Chinese people come to design a new building, it will be like this
[00:03.400 --> 00:06.360]  A new building that has been rebuilt by a Chinese city
[00:06.360 --> 00:09.480]  This is a real city, maybe it's your hometown
[00:09.480 --> 00:12.640]  Let's take a short film with us and show its real face
[00:12.640 --> 00:14.480]  The opening is a one-minute long lens
[00:14.480 --> 00:16.520]  First, the time has changed, the new season has no shadow
[00:16.520 --> 00:18.680]  A sense of depression is born
[00:18.680 --> 00:20.400]  We randomly saw the red tail of it
[00:20.400 --> 00:22.120]  This is the new building in the hundreds of square kilometers
[00:22.120 --> 00:24.480]  The blue protective tent inside the blue sky city in the front
[00:24.480 --> 00:26.080]  As in the front of the crystal ball
[00:26.080 --> 00:28.360]  The back is a larger environmental structure
[00:28.360 --> 00:29.800]  This is the shadow of the new building
[00:29.800 --> 00:30.600]  The lens is far away
[00:30.600 --> 00:32.040]  We see that there is a bandage
[00:32.040 --> 00:33.560]  It is passing through a huge star
[00:33.560 --> 00:35.240]  Those are the stars of the stars
[00:35.240 --> 00:37.280]  The stars do not affect the shape of the bandage
[00:37.280 --> 00:39.240]  This means that their motivation is super
[00:39.240 --> 00:42.040]  At this time, the lens enters the blue protective tent inside the first crystal ball

TTS

from TTS.api import TTS
model_name = TTS.list_models()[0]
tts = TTS(model_name)
tts.tts_to_file(text="Hello world!", speaker=tts.speakers[0], language=tts.languages[0], file_path="output.wav")
#实践中需要把text更换为whisper提取内容

ffmpeg

  • 提取无音频视频

ffmpeg -i /Users/cnn/Downloads/test.mp4 -an -y output_new.mp4
  • 去噪

ffmpeg -y -i output_new.wav -af "anlmdn=ns=20" output_clean.wav
  • 合并与剪切

ffmpeg -i merge1.wav -i a_p1.wav -filter_complex "[0:0] [1:0] concat=n=2:v=0:a=1 [a]" -map [a] -y merge0.wav
  • 其他问题,由于tts生成语音,实际时长与原视频时长不一样,需要动态调整

# 思路为,获取视频时长和原视频时间的比例,并设置,调整语速
ffmpeg -y -i output.wav -filter:a "atempo=0.8" output_new.wav

前景

结合 OpenAI Whisper、FFmpeg 和 TTS 技术的跨语言视频翻译与语音本地化应用具有广阔的前景与市场潜力。随着全球化的推进,多语言视频内容需求日益增加,教育、媒体、娱乐和商务等领域都需要提供多语言支持。这种应用可以帮助内容创作者快速将视频本地化,满足全球受众的需求,同时降低成本和时间投入。在教育领域,多语言支持可以促进全球学习交流与合作;媒体和娱乐行业可以通过本地化的视频内容吸引更广泛的受众市场。此外,企业在跨国业务和跨文化交流中也可以利用这种应用进行语音本地化,促进全球团队合作和商务沟通。未来,这种应用有望成为视频内容创作工具与服务的一部分,提供高效、自动化的跨语言翻译和语音本地化功能。总之,这种应用在满足多语言视频需求的同时,为各个行业带来商业机会,并推动全球化交流与合作的发展。

不足

  • TTS略有杂音,后续优化,或者考虑收费版本,如Polly:https://aws.amazon.com/cn/polly/,

引用

  • https://github.com/openai/whisper

  • https://github.com/coqui-ai/TTS

  • https://ffmpeg.org/

- END -

关于奇舞团

奇舞团是 360 集团最大的大前端团队,代表集团参与 W3C 和 ECMA 会员(TC39)工作。奇舞团非常重视人才培养,有工程师、讲师、翻译官、业务接口人、团队 Leader 等多种发展方向供员工选择,并辅以提供相应的技术力、专业力、通用力、领导力等培训课程。奇舞团以开放和求贤的心态欢迎各种优秀人才关注和加入奇舞团。

90fae4332479d2e0b1894a676ba2fab5.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/561692.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件设计师 操作系统涉及题目

做题技巧 看有几个箭头就是有几个信号量。比如四个箭头就是S1 S2 S3 4把对应的信号量从小到大顺序放在对应箭头 比如P1-》P2就是 12 P1-》P3就是13 所以13大 注意是先V(S) 再P(S),箭头前是v后是p **P1没有前驱,第一个执行的进程.执行前用P操作 执行后用…

媒体传输协议的演进与未来

音视频应用近年来呈现出迅猛的发展趋势,成为互联网流量的主要载体,其玩法丰富,形态多样,众多繁杂的媒体传输协议也应运而生。LiveVideoStackCon 2022北京站邀请到快手传输算法负责人周超,结合快手在媒体传输上的优化与…

官宣!首个大模型兴趣小组开放申请,专注大模型应用落地

‍‍ 这里汇聚着大模型开发者与应用者 这是一个小而美小而精的兴趣组织 这是一个更关注大模型行业实际落地的组织 飞桨 AI Studio 大模型领域兴趣小组关注文心一言等大模型与开源模型应用落地,跟进最新技术趋势与应用方向,共同拓展技术视野、找寻商业化机…

QSS QTableWidget样式设置

QTableWidget的样式分为几个部分: 分别是: 外框:QTableWidget 表头:QHeaderView 表头字段:QHeaderView::section 表格:QTableWidget::item 选中的表格:QTableWidget::item::selected 水平滚动条…

chatgpt赋能Python-python_pensize

Python Pensize: How to Adjust Your Pen Size in Python If you’re new to Python, you might be struggling to master the art of the pen. Thankfully, Python Pensize is here to help. In this article, we’ll discuss how to adjust your pen size in Python so you …

快手广告怎么顺利度过冷启动期?

快手广告经常会出现这样的问题,投放初期新广告主、新产品、新账户都很难拿到曝光,没法突破;今天给大家介绍下什么是冷启动,如何快速有效的度过冷启动期。 冷启动就是刚开始启动的时候没有基础,模型需要根据历史情况来预…

Linux 查看或统计网卡流量的几种方式么?

在工作中,我们经常需要查看服务器的实时网卡流量。通常,我们会通过这几种方式查看Linux服务器的实时网卡流量。 目录 1、sar 2、 /proc/net/dev 3、ifstat 4、iftop 5、nload 6、iptraf-ng 7、nethogs 8、扩展 1、sar sar命令包含在sysstat工具…

大Op和小op的含义及理解

大Op和小op的含义及理解 Stochastic order notation(随机有序符号)6.1.1 O p O_p Op​和 o p o_p op​之间的关系6.2 符号速记及其算数性质6.3 为什么 o p o_p op​和 O p O_p Op​符号很有用?6.4例子:均值估计的相合性参考: Stochastic orde…

基于大模型GPT,如何提炼出优质的Prompt

基于大模型实现优质Prompt开发 1. 引言1.1 大规模预训练模型 2. Prompt开发2.1 Prompt基本定义:2.2 为什么优质Prompt才能生成优质的内容2.3 如何定义优质的Prompt 3. Prompt优化技巧3.1 迭代法3.1.1 创作评估3.1.2 基础创作3.1.3 多轮次交互 3.2 Trick法3.2.1 戴高…

【MySQL入门实战4】-发行版本及安装概述

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA工作经验 一位上进心十足的【大数据领域博主】!😜&#x1f61…

python+django基于爬虫系统的世界历史时间轴历史事件大事记6ouj9

随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&#xf…

chatgpt赋能Python-python_pyuserinput

介绍 Python是一种极其流行的编程语言,可以用于多种任务,例如数据分析、机器学习、Web开发等等。 Python社区非常活跃,因此有许多模块和库可以用于各种任务,包括用户输入和自动化。 PyUserInput是一个Python库,它提供…

C#,码海拾贝(22)——线性方程组求解的全选主元高斯-约当消去法之C#源代码,《C#数值计算算法编程》源代码升级改进版

using System; namespace Zhou.CSharp.Algorithm { /// <summary> /// 求解线性方程组的类 LEquations /// 原作 周长发 /// 改编 深度混淆 /// </summary> public static partial class LEquations { /// <summary> …

小航编程题库机器人等级考试理论一级(2022年9月) (含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSDN博客 单选题2.0分 删除编辑 答案:C 第1题使用下列工具不能省力的是&#xff1f;&#xff08; &#xff09; A、斜面B、动滑轮C、定滑轮D…

深度学习笔记之循环神经网络(五)循环神经网络的反向传播过程

深度学习笔记之循环神经网络——循环神经网络的反向传播过程 引言回顾&#xff1a;循环神经网络的前馈计算过程场景构建前馈计算描述 反向传播过程各参数的梯度计算各时刻损失函数梯度计算损失函数对各时刻神经元输出的梯度计算 Softmax \text{Softmax} Softmax回归的梯度计算关…

chatgpt赋能Python-python_pyzmq

Python和pyzmq&#xff1a;高效的分布式计算 Python是一种高级的、面向对象的编程语言&#xff0c;因其易学易用以及可扩展性而备受青睐。其中&#xff0c;用于消息传递和异步I/O操作的pyzmq库&#xff0c;使Python成为一个高效的分布式计算平台。 Pyzmq的概述 Pyyzmq是Pyth…

chatgpt赋能Python-python_peak

Python Peak - 程序员必备技能 Python Peak 指的是 Python 的高峰和巅峰。Python 是一种高级编程语言&#xff0c;已成为数据科学和软件开发领域中最流行的语言之一。在 Python Peak 中&#xff0c;程序员能够利用 Python 的最佳实践和工具&#xff0c;最大化地发挥出 Python …

Java——JDK1.8新特性

目录 一、Lambda 表达式 &#xff08;一&#xff09;Lambda 表达式语法 &#xff08;二&#xff09;类型推断 二、函数式接口 &#xff08;一&#xff09;自定义函数式接口 &#xff08;二&#xff09;作为参数传递Lambda 表达式 &#xff08;三&#xff09;Java 内置四…

随身WIFI恢复日记

引言 因为折腾WIFI棒子的过程中&#xff0c;不小心砖了。现在需要重新刷一下机&#xff0c;所以把之前的过程的细节给梳理一下 1 、恢复 使用备份镜像文件恢复随身WIFI&#xff0c;使用MIKO软件将文件刷写到EMMC中。等待一会就好了 2 、原始分区 既然已经恢复成原始镜像了&…

chatgpt赋能Python-python_qrcode解码

Python QR码解码&#xff1a;了解QR码及其在Python中的使用 QR码&#xff08;Quick Response Code&#xff09;也被称为二维条码&#xff0c;是一种可以储存文本、链接等信息的矩阵条码。QR码已广泛应用于各个行业&#xff0c;例如商业广告、政府宣传、电子票据等领域。Python…