📦 openai-tts — OpenAI文本转语音

v0.1.0

OpenAI文本转语音API,用于高质量语音合成。可通过可自定义的语音和语调从文本生成自然流畅的音频。

0· 20·0 当前·0 累计
lnj22 头像by @lnj22·MIT-0
下载技能包
License
MIT-0
最后更新
2026/4/15
0
安全扫描
VirusTotal
无害
查看报告
OpenClaw
可疑
high confidence
该技能指令明确要求 OPENAI_API_KEY 和 Python 库,但技能元数据未声明任何必需的凭据或安装步骤——这种不匹配令人担忧,安装前需密切关注。
评估建议
该技能看似是一个简单的 OpenAI TTS 配方,但存在关键元数据不匹配:SKILL.md 需要 OPENAI_API_KEY 但包元数据未声明该要求。在安装/提供 API 密钥前,请验证技能来源并考虑:(1) 仅提供具有限权限和预算的范围内 API 密钥,(2) 确保环境有所需的 Python 包(openai、pydub)和 ffmpeg,(3) 如可能,在隔离环境中运行技能,(4) 要求作者更新元数据以明确声明 OPENAI_API_KEY 和任何安装先决条件。如果无法验证来源或无法限制密钥,请勿安装。...
详细分析 ▾
用途与能力
名称/描述声称是简单的 OpenAI TTS 助手,与 SKILL.md 内容一致。然而,技能元数据未声明所需的环境变量或主要凭据,而运行时指令明确依赖 OPENAI_API_KEY;这种不一致表明打包不完整或草率。
指令范围
SKILL.md 指令仅涉及 TTS 功能(调用 OpenAI TTS、分块文本、拼接音频)。它们访问 OPENAI_API_KEY 环境变量(元数据中未声明)并假设 Python 包(openai、pydub)和系统工具(pydub 用的 ffmpeg)可用;它们不会读取无关的系统文件或向意外端点泄露数据。
安装机制
这是一个纯指令技能,没有安装规范,因此不会写入磁盘也不会获取远程代码。风险较低,但它确实隐式依赖未声明的第三方 Python 包和系统工具。
凭证需求
指令需要 OPENAI_API_KEY(敏感凭据)但注册表元数据未列出所需的环境变量或主要凭据。对于 TTS 技能来说,申请 API 密钥是合理的,但未声明它是一个重要的一致性问题,并降低了对将使用哪些凭据的透明度。
持久化与权限
技能不请求持久/常驻存在,也不修改其他技能或系统级设置;允许正常自主调用(默认)。
安全有层次,运行前请审查代码。

License

MIT-0

可自由使用、修改和再分发,无需署名。

运行时依赖

无特殊依赖

版本

latestv0.1.02026/4/15

批量发布自 all-task-skills-dedup

无害

安装命令

点击复制
官方npx clawhub@latest install pg-essay-to-audiobook-openai-tts
镜像加速npx clawhub@latest install pg-essay-to-audiobook-openai-tts --registry https://cn.longxiaskill.com

技能文档

使用 OpenAI 的 TTS API 从文本生成高质量口语音频。

认证

API 密钥以环境变量形式提供:

OPENAI_API_KEY

模型

  • gpt-4o-mini-tts - 最新,最可靠。支持音调/风格指令。
  • tts-1 - 较低延迟,较低质量
  • tts-1-hd - 较高质量,较高延迟

语音选项

内置语音(针对英语优化):

  • alloy, ash, ballad, coral, echo, fable
  • nova, onyx, sage, shimmer, verse
  • marin, cedar - 推荐以获得最佳质量

注意:tts-1tts-1-hd 仅支持:alloy, ash, coral, echo, fable, onyx, nova, sage, shimmer。

Python 示例

from pathlib import Path
from openai import OpenAI

client = OpenAI() # 使用 OPENAI_API_KEY 环境变量

# 基本用法 with client.audio.speech.with_streaming_response.create( model="gpt-4o-mini-tts", voice="coral", input="Hello, world!", ) as response: response.stream_to_file("output.mp3")

# 带音调指令(仅 gpt-4o-mini-tts) with client.audio.speech.with_streaming_response.create( model="gpt-4o-mini-tts", voice="coral", input="Today is a wonderful day!", instructions="Speak in a cheerful and positive tone.", ) as response: response.stream_to_file("output.mp3")

处理长文本

对于长文档,请分块并拼接:

from openai import OpenAI
from pydub import AudioSegment
import tempfile
import re
import os

client = OpenAI()

def chunk_text(text, max_chars=4000): """在句子边界处将文本分割成块。""" sentences = re.split(r'(?<=[.!?])\s+', text) chunks = [] current_chunk = "" for sentence in sentences: if len(current_chunk) + len(sentence) < max_chars: current_chunk += sentence + " " else: if current_chunk: chunks.append(current_chunk.strip()) current_chunk = sentence + " " if current_chunk: chunks.append(current_chunk.strip()) return chunks

def text_to_audiobook(text, output_path): """将长文本转换为音频文件。""" chunks = chunk_text(text) audio_segments = [] for chunk in chunks: with tempfile.NamedTemporaryFile(suffix='.mp3', delete=False) as tmp: tmp_path = tmp.name with client.audio.speech.with_streaming_response.create( model="gpt-4o-mini-tts", voice="coral", input=chunk, ) as response: response.stream_to_file(tmp_path) segment = AudioSegment.from_mp3(tmp_path) audio_segments.append(segment) os.unlink(tmp_path) # 拼接所有片段 combined = audio_segments[0] for segment in audio_segments[1:]: combined += segment combined.export(output_path, format="mp3")

输出格式

  • mp3 - 默认,通用用途
  • opus - 低延迟流式传输
  • aac - 数字压缩(YouTube、iOS)
  • flac - 无损压缩
  • wav - 未压缩,低延迟
  • pcm - 原始采样(24kHz,16位)
with client.audio.speech.with_streaming_response.create(
    model="gpt-4o-mini-tts",
    voice="coral",
    input="Hello!",
    response_format="wav", # 指定格式
) as response:
    response.stream_to_file("output.wav")

最佳实践

  • 使用 marincedar 语音以获得最佳质量
  • 长内容在句子边界处分割文本
  • 使用 wavpcm 以获得最低延迟
  • 添加 instructions 参数来控制音调/风格(仅 gpt-4o-mini-tts)
数据来源ClawHub ↗ · 中文优化:龙虾技能库