【问题标题】:how convert ogg file to telegram voice format?如何将 ogg 文件转换为电报语音格式?
【发布时间】:2017-11-20 19:26:02
【问题描述】:

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

通过 ffmpeg 转换为 opus 编码的 ogg 文件。

https://api.telegram.org/bot<token>/sendVoice?chat_id=x&voice=http://music-farsi.ir/ogg/voice.ogg

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

我的 ogg 文件:ogg file

【问题讨论】:

  • 你是如何创建你的 ogg 的?
  • 也可以转换成另一种格式(如mp3)吗?
  • 在线转换器创建的ogg文件。是的,电报接受另一种格式

标签: telegram telegram-bot


【解决方案1】:

感谢 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)

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

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

【讨论】:

  • 在我开始将 ogg vorbis 转换为 opus 之前,我得到了奇怪的结果。有时电报将音频文件显示为语音消息,而其他时候则显示为需要在外部播放器中下载和播放的音频文件。
  • 这有效,但前提是从 Android 上传,如果从 PC 上传,则没有栏。顺便说一句:不需要 Python,我直接从命令行调用了 ffmpeg……ffmpeg -i input.mp3 -acodec libopus output.ogg -y
【解决方案2】:

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

更多关于带有 url 的 sendVoice 方法的信息可以找到here

【讨论】:

    【解决方案3】:

    如果您希望它显示音频频谱图,请确保使用 opus 编解码器对 ogg 进行编码

    【讨论】:

    • 我想知道如何实现频谱图。看我的回答。
    猜你喜欢
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 2019-12-08
    • 2020-12-03
    • 1970-01-01
    • 2016-11-06
    • 1970-01-01
    • 2020-11-15
    相关资源
    最近更新 更多