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}")
Для больших файлов, конечно, подвисает, но не сильно