Почему не удается отправить аудиофайл с помощью FRONT_COVER на Pytelegrambotapi?Python

Программы на Python
Ответить
Anonymous
 Почему не удается отправить аудиофайл с помощью FRONT_COVER на Pytelegrambotapi?

Сообщение Anonymous »

В общем проблема в том, что аудиофайл пересылается в файл без картинки. Я сначала подумал, что проблема в том, что картинка установлена ​​не на ту версию id3, и попробовал четыре способа установки
  • через команду ffmpeg = [ «ffmpeg», «-i», путь_файла, «-i», путь_обложки, «-map», «0», «-map», «1», «-c:a», «копировать», « -c:v», «mjpeg», «-id3v2_version», «3», «-y», выходной_файл, ]subprocess.run(command, check=True)
  • через Eyed3 , audiofile.tag.images.set(
    eyed3.id3.frames.ImageFrame.FRONT_COVER,
    cover_data,
    “` image/jpeg,
    )
  • через библиотеку мутагенов попробовал установить audio.add(
    APIC(
    encoding=3,
    mime="image/ jpeg»,
    type=3,
    desc="Обложка",
    data=open(saved_photo, "rb").read(),
    )
    )
    На этом этапе я понял, что проблема не в правильной настройке тега id3, а в способе отправки аудиофайла. потому что если бы я открыл его вручную и отправил, обложка была бы на месте.
    Но я также попробовал установить тег. вторая версия. через библиотеку Eyed3, но это также не привело к отправке аудиофайла с обложкой в ​​Telegram.
аудиофайл без обложки
и точно такой же аудиофайл, только с обложкой. (ничего не менялось)

Код: Выделить всё


user_states = {}

def save_audio(message):
file_info = bot.get_file(message.audio.file_id)
downloaded_file = bot.download_file(file_info.file_path)

user_dir = os.path.join("TEMP", str(message.chat.id), "albums")
os.makedirs(user_dir, exist_ok=True)

original_file_name = (
message.audio.file_name
if message.audio.file_name
else f"{message.audio.file_id}.mp3"
)

file_path = os.path.join(user_dir, original_file_name)

if message.chat.id not in user_states:
user_states[message.chat.id] = {"files": [], "stage": None}

with open(file_path, "wb") as f:
f.write(downloaded_file)

user_states[message.chat.id]["files"].append(file_path)

return file_path

def clear_metadata_for_file(file_path, user_id):
clear_metadata = settings.get(str(user_id), {}).get("clear", True)

if clear_metadata:
temp_file_path = f"{file_path}.temp.mp3"
command = [
"ffmpeg",
"-i",
file_path,
"-map_metadata",
"-1",
"-c:a",
"copy",
"-y",
temp_file_path,
]
subprocess.run(command, check=True)
os.replace(temp_file_path, file_path)

audio_file = eyed3.load(file_path)
if audio_file.tag is not None:
audio_file.tag.clear()
audio_file.tag.save()

else:
return file_path

def send_files(message):
chat_id = message.chat.id
if chat_id not in user_states or "files" not in user_states[chat_id]:
return "No files found"

for file_path in user_states[chat_id]["files"]:
try:
with open(file_path, "rb") as f:
bot.send_audio(chat_id, f)
except Exception as e:
return e

@bot.message_handler(content_types=["photo"])
def handle_cover(message):

if message.content_type == "photo":
try:

saved_photo = save_photo(message)

for file_path in user_states[message.chat.id]["files"]:

audio = ID3(file_path)
audio.add(
APIC(
encoding=3,
mime="image/jpeg",
type=3,
desc="Cover",
data=open(saved_photo, "rb").read(),
)
)
audio.save(file_path)
with open(saved_photo, "rb") as image_file:
image_data = image_file.read()

audiofile = eyed3.load(file_path)

if audiofile.tag is None:
audiofile.initTag(version=(2, 3, 0))

audiofile.tag.images.set(
3, image_data, "image/jpeg", description="Cover"
)
audiofile.tag.save(version=(2, 3, 0))

send_files(message)

except Exception as e:
return

bot.infinity_polling()

Я надеялся получить несколько аудиофайлов с обложками, и уверен, с этим проблем не возникнет. Но почему-то сам файл присылается визуально без обложки. Я был бы очень признателен, если бы вы помогли мне с этим.

Подробнее здесь: https://stackoverflow.com/questions/793 ... the-pytele
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»