如何将ogg文件转换为电报语音格式?

M P*_*M P 5 telegram telegram-bot

我正在尝试通过电报bot中的SendVoice方法发送语音消息,但它将语音作为文档文件发送(而不是播放)。

ffmpeg将ogg文件转换为opus编码。

https://api.telegram.org/bot<token>/sendVoice?chat_id=x&voice=http://music-farsi.ir/ogg/voice.ogg
Run Code Online (Sandbox Code Playgroud)

我的ogg文件和电报语音消息有什么区别?

我的ogg文件:ogg文件

Bes*_*esi 8

感谢 YoilyL,我能够使用频谱图发送语音消息。

这是我的 python 脚本,它将我的.wav文件转换为.ogg

import os
import requests
import subprocess

token = YYYYYYY
chat_id = XXXXXXXX

upload_audio_url = "https://api.telegram.org/bot%s/sendAudio?chat_id=%s" % (token, chat_id)
audio_path_wav = '/Users/me/some-file.wav'

# Convert the file from wav to ogg
filename = os.path.splitext(audio_path_wav)[0]
audio_path_ogg = filename + '.ogg'
subprocess.run(["ffmpeg", '-i', audio_path_wav, '-acodec', 'libopus', audio_path_ogg, '-y'])

with open(audio_path_ogg, 'rb') as f:
    data = f.read()

# An arbitrary .ogg filename has to be present so that the spectogram is shown
file = {'audio': ('Message.ogg', data)}
result = requests.post(upload_audio_url, files=file)
Run Code Online (Sandbox Code Playgroud)

这导致语音消息的以下呈现:

截屏

您需要ffmpeg使用您选择的包管理器进行安装。

  • 这有效,但仅当从 Android 上传时有效,如果从 PC 上传,则没有栏。顺便说一句:不需要 Python,我直接从命令行调用 ffmpeg... `ffmpeg -i input.mp3 -acodec libopus output.ogg -y` (4认同)

Shi*_*fty 5

sendVoice 方法的 MIME 类型必须设置为 audio/ogg。您的示例设置为 video/ogg。

有关带有 url 的 sendVoice 方法的更多信息可以在此处找到