python перемещение по mp3 с помощью BytesIO.seek

Загружаю в io.BytesIO mp3-файл, и из этого io.BytesIO потом его проигрываю

Если его надо проиграть не с начала, а с определенного момента времени, я так понимаю, надо воспользоваться методом seek

import io

b = io.BytesIO(open('my_song.mp3', 'rb').read())
start_point = 5000 # - время от которого надо начать в миллисекундах

b.seek(convert(start_point, *other_args))

cool_player.play(b.read())

Какой вот принцип расчета, который надо реализовать внутри convert(...)?

UPD

Проигрываю я эту штуку в голосовой канал discord с помощью discord.py

b = io.BytesIO(open('my_song.mp3', 'rb').read())
start_point = 5000 # - время от которого надо начать в миллисекундах

b.seek(convert(start_point, *other_args))
client.voice_clients[0].play(fixes.FFmpegPCMAudio(b.read(), pipe=True))

Причем предоставляемое api выдает ошибку для класса FFmpegPCAudio, поэтому я использую пофикшенный вариант вот отсюда


Ответы (1 шт):

Автор решения: Андрей Григорьев

Спасибо @andreymal

Позицию надо устанавливать как опцию к CLI-инструментарию ffmpeg в параметре options или before_options, когда создаем класс FFmpegPCMAudio

Пример:

start_position = 5000 # - пусть надо начать с 5 сек (5000 мсек)
FFmpegPCMAudio(b.read(), pipe=True, options=f"-ss {start_point / 1000}") # - для BytesIO

FFmpegPCMAudio('my_song.mp3', options=f"-ss {start_point / 1000}")

Для больших файлов, конечно, подвисает, но не сильно

→ Ссылка