【AI】1692- OpenAI Whisper + FFmpeg + TTS:动态实现跨语言视频音频翻译

本文介绍了结合OpenAIWhisper进行语音识别和翻译,FFmpeg处理视频音轨以及TTS技术生成新语音,实现视频内容的多语言版本,降低翻译成本和时间。通过这个自动化流程,可以为不同行业的视频内容添加多语言配音,促进全球化交流。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文作者系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/

往期回顾

#

如何使用 TypeScript 开发 React 函数式组件?

#

11 个需要避免的 React 错误用法

#

6 个 Vue3 开发必备的 VSCode 插件

#

3 款非常实用的 Node.js 版本管理工具

#

6 个你必须明白 Vue3 的 ref 和 reactive 问题

#

6 个意想不到的 JavaScript 问题

#

试着换个角度理解低代码平台设计的本质

2c73136783b726c5842687983c08e905.gif

回复“加群”,一起学习进步

<think>好的,我现在需要帮助用户解决如何使用Whisper进行视频音频流的实时语音识别并转换为文字的问题。首先,我要回忆一下Whisper的基本信息。WhisperOpenAI开发的开源语音识别模型,支持多语言,能够处理实时或离线音频转文字。用户提到的是实时处理视频中的音频流,所以可能需要处理视频提取音频、实时流处理和Whisper的集成。 接下来,我应该考虑步骤分解。用户可能需要从视频中提取音频流,这需要用到FFmpeg之类的工具。然后,实时处理音频流,这可能涉及将音频分成块进行流式传输,避免一次性处理整个文件带来的延迟。同时,Whisper本身是否支持实时处理?根据之前的了解,Whisper的模型可能有不同的规模,比如tiny、base、small等,不同模型在速度和准确性上有所权衡,实时应用可能需要较小的模型。 然后,我需要查找是否有相关的库或工具已经实现Whisper的实时流式处理。比如,有没有Python库支持实时音频输入并调用Whisper进行转录?或者是否需要结合其他工具如WebSocket或音频处理库(PyAudio)来捕获实时音频流,分块传输给Whisper处理。 另外,用户提到视频作为输入源,可能需要先解复用视频流,提取音频部分。FFmpeg可以实时提取视频中的音频流,输出为PCM或其他格式,然后通过管道传输给处理脚本。这一步可能需要设置正确的参数,确保音频格式与Whisper的输入要求匹配。 然后,关于Whisper的具体调用方式,官方文档或社区是否有实时处理的示例?比如,Whisper的API是否支持流式输入,还是需要将音频分成短片段,逐一转录。如果Whisper本身不支持流式处理,可能需要使用VAD(语音活动检测)来检测语音段落,分割成适当的块进行处理,减少延迟。 还需要考虑性能优化,比如使用GPU加速,或者选择适合实时处理的模型大小。例如,使用Whisper的tiny或base模型,虽然准确性较低,但处理速度更快,适合实时场景。同时,多线程或异步处理可能有助于提高效率,避免阻塞主线程。 此外,用户可能需要代码示例,展示如何整合这些步骤。比如,使用FFmpeg实时提取音频,用PyAudio捕获音频流,分块后调用Whisper进行转录,最后输出文本。同时,需要注意音频的采样率、格式是否与Whisper的要求一致,比如16000Hz,单声道。 可能遇到的问题包括延迟过高、识别准确性下降、资源占用过大等。需要建议用户根据实际需求调整模型大小,优化音频处理流程,或者使用硬件加速。另外,实时处理可能需要处理重叠的音频块,或者使用上下文窗口来提升连贯性,但Whisper本身是否支持这种处理方式需要进一步确认。 最后,结合用户提供的引用内容,查看是否有相关的开源项目或工具已经实现了类似功能。比如,引用中提到的Whisper-CPP可能是一个优化版本,适合在CPU上运行,适合资源受限的环境。而阿里开源的CosyVoice或其他TTS项目可能与语音合成相关,但用户的问题主要集中在语音识别部分,所以可能需要更关注Whisper及其衍生产品的实时处理能力。 总结步骤应该是:提取视频音频流、实时分块处理、调用Whisper模型转录、输出文本。并提供代码框架和优化建议,确保用户能够实施。</think>要使用Whisper实现视频音频流的实时语音识别并转换为文字,需结合音视频处理工具和模型优化技术。以下是分步指南: --- ### 1. **提取视频音频流** 使用FFmpeg视频中实时提取音频流,并将其转换为Whisper支持的格式(如16kHz单声道PCM): ```bash ffmpeg -i input_video.mp4 -f wav -ar 16000 -ac 1 pipe:1 ``` 此命令将音频流通过管道输出,便于程序实时读取[^3]。 --- ### 2. **实时音频流处理** 通过Python脚本捕获音频流并分块处理,使用`pydub`或`pyaudio`实现流式读取: ```python import pyaudio import numpy as np CHUNK = 1600 # 100ms的音频块(16kHz采样率) FORMAT = pyaudio.paInt16 CHANNELS = 1 RATE = 16000 p = pyaudio.PyAudio() stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) while True: data = stream.read(CHUNK) audio_np = np.frombuffer(data, dtype=np.int16).astype(np.float32) / 32768.0 # 调用Whisper进行转录 ``` --- ### 3. **集成Whisper模型** 使用优化后的Whisper库(如`faster-whisper`或`whisper-cpp`)提升实时性能: ```python from faster_whisper import WhisperModel model = WhisperModel("tiny.en", device="cpu", compute_type="int8") segments, info = model.transcribe(audio_np, beam_size=5, language="en") for segment in segments: print(f"[{segment.start:.2f}s -> {segment.end:.2f}s] {segment.text}") ``` 选择`tiny`/`base`等小模型可降低延迟,GPU加速进一步优化速度。 --- ### 4. **优化策略** - **模型压缩**:量化(如INT8)减少内存占用。 - **并行处理**:多线程处理音频块与模型推理。 - **语音活动检测(VAD)**:过滤静音段,减少无效计算。 - **上下文窗口**:设置`no_speech_threshold=0.5`避免漏识别[^1]。 --- ### 5. **完整代码示例** ```python import subprocess import pyaudio import numpy as np from faster_whisper import WhisperModel # 启动FFmpeg进程提取音频 ffmpeg_cmd = [ "ffmpeg", "-i", "input_video.mp4", "-f", "wav", "-ar", "16000", "-ac", "1", "pipe:1" ] process = subprocess.Popen(ffmpeg_cmd, stdout=subprocess.PIPE) # 初始化Whisper model = WhisperModel("tiny.en", device="cpu") # 读取并处理音频流 CHUNK = 1600 while True: raw_data = process.stdout.read(CHUNK * 2) # 16-bit样本 if not raw_data: break audio_np = np.frombuffer(raw_data, dtype=np.int16).astype(np.float32) / 32768.0 segments, _ = model.transcribe(audio_np) for seg in segments: print(seg.text) ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值