如何将Opus/OGG文件转为Telegram语音格式?SendVoice发送异常解决
解决Telegram SendVoice识别为普通音频的问题
Telegram对语音消息的OGG/Opus文件有严格的格式要求——哪怕编码正确,容器参数或元数据不符,也会被识别为普通音频。以下是针对性解决方案:
一、修正FFmpeg转换参数
你的原命令缺少Telegram语音要求的关键采样率设置,且未清理冗余元数据。替换为以下命令重新转换:
ffmpeg -i test.mp3 -ac 1 -ar 16000 -codec:a opus -b:a 32k -vbr on -compression_level 10 -map_metadata -1 -f ogg test1.ogg
参数说明:
-ar 16000:强制设置16kHz采样率,这是Telegram语音的标准适配采样率-vbr on -compression_level 10:启用可变比特率并拉满压缩等级,更适配语音场景优化-map_metadata -1:清除所有元数据,避免容器额外信息干扰Telegram的文件类型识别-f ogg:明确指定输出容器为OGG,确保格式标记正确
二、检查现有文件的格式信息
如果test1.ogg已经是Opus编码,先通过ffprobe验证关键参数是否合规:
ffprobe -v quiet -print_format json -show_format -show_streams test1.ogg
重点核对:
streams[0].channels必须为1(单声道)streams[0].sample_rate需为8/12/16/24/48kHz(优先16kHz)streams[0].codec_name必须是opusformat.format_name必须是ogg
三、修复容器头部异常
如果参数都符合但仍被识别为普通音频,大概率是OGG容器头部存在异常,尝试重新封装:
ffmpeg -i test1.ogg -c copy -map_metadata -1 -f ogg re-encoded_test1.ogg
该命令保留原始Opus编码,仅重新生成干净的OGG容器头部。
四、SendVoice接口参数验证
发送时需确保:
- 文件名后缀为
.ogg - 设置
duration参数(传入音频准确时长,单位秒) - 请求的MIME类型指定为
audio/ogg
内容的提问来源于stack exchange,提问作者user23120850
相关产品推荐
相关产品推荐

