Создание стенограммы с пользовательскими временными метками для бота -дискордовPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Создание стенограммы с пользовательскими временными метками для бота -дискордов

Сообщение Anonymous »

Я использую py-cord , а бот присоединяется к собрании, начинает записывать, и как только команда End дается, она ставит все в этот раскол. В тот момент, когда мой код выполняет транскрипцию только по сравнению с тем, когда пользователь начинает говорить. Пример: если пользователь начинает говорить с самого начала встречи и заканчивается на старт через 5 минут после начала встречи, и в этот момент 2 -й пользователь начинает говорить - в транскрипции они будут так же, как будто они говорили одновременно. Стенограмма не относится к началу собрания. РЕДАКТИРОВАТЬ: Что я ищу. Стенограмма должна следовать надлежащей временной шкале от начала встречи, и когда люди начали говорить по сравнению с началом встречи. Пример. Встреча начинается в 0, докладчик 1 начинает говорить до мин 5. В мин 5:01 Спикер 2 начинает говорить, встреча заканчивается на мин 10. Транскрипция должна быть чем -то вроде < /p>
[00:00] Speaker 1:...
[05:01] Speaker 2:...

Если они будут говорить в одно и то же время в какой -то момент, то оба появятся в транскрипте в этом HR/MIN/Second.
любая помощь. < /p>
async def once_done(sink: discord.sinks, channel: discord.TextChannel, *args):
meeting_start = connections.get(channel.guild.id, {}).get("meeting_start", 0)
user_start_times = connections.get(channel.guild.id, {}).get("user_start", {})

await channel.send("🟡 Transcribing...")
await sink.vc.disconnect()

words_list = []

for user_id, audio in sink.audio_data.items():
payload = {"buffer": audio.file.read()}
response = deepgram.listen.rest.v("1").transcribe_file(payload, options)

words = response["results"]["channels"][0]["alternatives"][0]["words"]
words = [word.to_dict() for word in words]

if words:
first_word_time = words[0]["start"]
if user_id not in user_start_times:
user_start_times[user_id] = first_word_time

user_offset = user_start_times[user_id] - meeting_start

for word in words:
words_list.append({
"word": word["word"],
"start": word["start"] + user_offset,
"end": word["end"] + user_offset,
"punctuated_word": word["punctuated_word"],
"speaker": user_id,
})

words_list.sort(key=lambda x: x["start"])

transcript = []
current_speaker = None
current_segment = {"speaker": None, "start": None, "end": None, "text": ""}

for word in words_list:
speaker = word["speaker"]
if (speaker != current_speaker or
(current_segment["end"] is not None and word["start"] - current_segment["end"] > 2)):
if current_speaker is not None:
transcript.append(current_segment)
current_speaker = speaker
current_segment = {
"speaker": speaker,
"start": word["start"],
"end": word["end"],
"text": word["punctuated_word"]
}
else:
current_segment["text"] += " " + word["punctuated_word"]
current_segment["end"] = word["end"]

if current_segment["speaker"] is not None:
transcript.append(current_segment)

with open("transcript.txt", "w") as f:
for segment in transcript:
start_minutes = int(segment["start"] // 60)
start_seconds = int(segment["start"] % 60)
end_minutes = int(segment["end"] // 60)
end_seconds = int(segment["end"] % 60)
f.write(f"({start_minutes}:{start_seconds:02d} - {end_minutes}:{end_seconds:02d}) {segment['speaker']}:\n{segment['text']}\n\n")

await channel.send(file=discord.File("transcript.txt"))
await channel.send("🟢 Transcription finished.")


Подробнее здесь: https://stackoverflow.com/questions/794 ... iscord-bot
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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