Почему этот код не работает? (Пайтон)
import os
import telebot
import requests
import speech_recognition as sr
import subprocess
import datetime
logfile = str(datetime.date.today()) + '.log'
token = '5807585021:AAGokTDFe7CMcPnf6fpMGDZyGpdiojeKeBo'
bot = telebot.TeleBot(token)
def audio_to_text(dest_name: str):
# Функция для перевода аудио , в формате ".vaw" в текст
r = sr.Recognizer() # такое вообще надо комментить?
# тут мы читаем наш .vaw файл
message = sr.AudioFile(dest_name)
with message as source:
audio = r.record(source)
result = r.recognize_google(audio, language="ru_RU") # здесь можно изменять язык распознавания
return result
@bot.message_handler(content_types=['voice'])
def get_audio_messages(message):
# Основная функция, принимает голосовуху от пользователя
try:
print("Started recognition...")
# Ниже пытаемся вычленить имя файла, да и вообще берем данные с мессаги
file_info = bot.get_file(message.voice.file_id)
path = file_info.file_path # Вот тут-то и полный путь до файла (например: voice/file_2.oga)
fname = os.path.basename(path) # Преобразуем путь в имя файла (например: file_2.oga)
doc = requests.get('https://api.telegram.org/file/bot{0}/{1}'.format(token, file_info.file_path))# Получаем и сохраняем присланную голосвуху (Ага, админ может в любой момент отключить удаление айдио файлов и слушать все, что ты там говоришь. А представь, что такую бяку подселят в огромный чат и она будет просто логировать все сообщения [анонимность в телеграмме, ахахаха])
with open(fname+'.oga', 'wb') as f:
f.write(doc.content) # вот именно тут и сохраняется сама аудио-мессага
process = subprocess.run(['ffmpeg', '-i', fname+'.oga', fname+'.wav'])# здесь используется страшное ПО ffmpeg, для конвертации .oga в .vaw
result = audio_to_text(fname+'.wav') # Вызов функции для перевода аудио в текст, а заодно передаем имена файлов, для их последующего удаления
bot.send_message(message.from_user.id, format(result))
except sr.UnknownValueError as e:
bot.send_message(message.from_user.id, "Прошу прощения, но я не разобрал сообщение, или оно поустое...")
with open(logfile, 'a', encoding='utf-8') as f:
f.write(str(datetime.datetime.today().strftime("%H:%M:%S")) + ':' + str(message.from_user.id) + ':' + str(message.from_user.first_name) + '_' + str(message.from_user.last_name) + ':' + str(message.from_user.username) +':'+ str(message.from_user.language_code) + ':Message is empty.\n')
except Exception as e:
bot.send_message(message.from_user.id, "Что-то пошло через жопу, но наши смелые инженеры уже трудятся над решением... \nДа ладно, никто эту ошибку исправлять не будет, она просто потеряется в логах.")
with open(logfile, 'a', encoding='utf-8') as f:
f.write(str(datetime.datetime.today().strftime("%H:%M:%S")) + ':' + str(message.from_user.id) + ':' + str(message.from_user.first_name) + '_' + str(message.from_user.last_name) + ':' + str(message.from_user.username) +':'+ str(message.from_user.language_code) +':' + str(e) + '\n')
finally:
os.remove(fname+'.wav')
os.remove(fname+'.oga')
bot.polling(none_stop=True, interval=0)# Очень не культурно стучимся телеге и проверяем наличие сообщений

Здравствуйте.
Если вы хотите задать вопрос по скопированному коду, то желательно оставлять ссылку на первоисточник. Ок? Очень тяжело понять проблему кода, когда ты понятия не имеешь, что он делает.
Ваша ошибка заключается в том, что у вас отсутствует ffmpeg на компьютере. Поэтому при вызове подпроцесса ffmpeg в строке с:
process = subprocess.run (['ffmpeg', '-i', fname+'.oga', fname+'.wav'])
ничего не происходит(не появляется wav-файл).
В идеале вы должны найти документацию по установке и указанию пути к этому ПО в самой системе. Но можно проще: вы скачиваете архив(по ссылке https://www.gyan.dev/ffmpeg/builds/ffmpeg-git-full.7z ), из папки bin копируете три exe-файла в папку с проектом, где находится ваш py-файл. Должно работать.
Прямым текстом же все сказано
Ты попытался удалить несуществующий файл file_27.oga.wav
Однако, возможные причины проблем могут быть связаны с:
- Неправильно указанным token для Telegram бота
- Отсутствием установленных библиотек (os, telebot, requests, speech_recognition, subprocess)
- Ошибками при записи и чтении аудио-сообщений (например, неправильный путь к файлу, неправильно указанный формат и др.)
- Проблемами с ffmpeg (например, его отсутствием на компьютере или неправильно указанным путем к нему)
- Прочими проблемами, которые могут возникнуть при работе с Telegram API и библиотеками для обработки аудио
Для того, чтобы точнее определить причину проблемы, нужно более подробное описание проблемы или вывод ошибок, если они есть. (на фото ничего не видно)