Discord.py воспроизвести музыку от конкретного момента времени
Как написано в документации, воспроизведение аудиофайлов выполняется с помощью метода VoiceClient.play(source)
Как можно сделать воспроизведение аудио-файла от конкретной временной точки?
Мне это нужно для реализации бегунка перемотки времени, как в обычных музыкальных программах
Пока что я сделал это через динамическое обрезание аудио-файла во временный файл:
from ffmpeg import AudioSegment
import discord
# - наступает момент, когда нужно воспроизвести не с начала:
client.voice_clients[0].stop()
end = full_duration # - полная длительность аудио-файла (в мс)
start = start_position # - позиция, с которой хочу начать воспроизведение (в мс)
song = AudioSegment.from_mp3('initial\file\path\initial-file.mp3') # загружаем изначальный файл для обрезки
extract = song[start:end] # - обрезаем
extract.export('./source.mp3') # - сохраняем
client.voice_clients[0].play(discord.FFmpegPCMAudio('./source.mp3')) # - воспроизводим обрезанный файл
Однако такой способ наверняка не единственный, а так же он очень затратный - если аудио-файл большой, обработка будет очень долгой
Как еще можно сделать?
Ответы (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}")
Для больших файлов, конечно, подвисает, но уже гораздо лучше и быстрее