Aiogram: почему в Telegram не визуализируется voice сообщение?

Отправляю сообщение таким образом:
await message.answer_voice(voice)
Всё работает, за исключением самой визуализации звуковых волн, а так же нет продолжительности аудио. Ниже изображение как это выглядит:
Результат работы моего бота
65b2815c643e8908138858.png

Как это пофиксить? Видел у того же Silero TTS, что бот отправляет сообщение с видимыми звуковыми волнами.
пример работы Silero TTS
65b2811e448aa074492575.png


UPD: Для показа продолжительности войса, нужно явно передать её в функцию. Но тогда вопрос в том, как посчитать продолжительность аудио из байтовой строки? Не хотелось бы перед отправкой сохранять на сервере. И на визуализацию звуковых волн это не влияет, этот вопрос актуален.
  • Вопрос задан
  • 201 просмотр
Решения вопроса 1
EntireMusic
@EntireMusic Автор вопроса
(:
Из документации:
For this to work, your audio must be in an .OGG file encoded with OPUS

То есть, чтобы войс визуализировался, нужно отправлять его в формате .OGG, тогда и продолжительность будет отображаться корректно. А чтобы отображалась продолжительность (duration) при отправке других форматов, нужно явно её указать при отправке.

Важное дополнение для Windows:
1. Скачайте ffmpeg и распакуйте
2. Добавьте путь в Path
3. Функция на Python:
import subprocess
import io

def mp3_to_ogg(filename, path=''):
    with open(f'{path}{filename}.mp3', 'rb') as input_file, open(f'{path}{filename}.ogg', 'wb') as output_file:
        mp3_io = io.BytesIO(input_file.read())
        ffmpeg_command = ['ffmpeg', '-i', 'pipe:0', '-c:a', 'libopus', '-f', 'ogg', 'pipe:1']
        result = subprocess.run(ffmpeg_command, input=mp3_io.read(), capture_output=True)
        ogg_bytes = result.stdout
        output_file.write(ogg_bytes)

*вы можете изменить функцию, например добавив путь к файлам, использовав временные файлы и т.д.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы