Реалізація автоматичного транскрибування лекцій та вебінарів Транскрибація освітнього контенту - конспекти лекцій, текстові версії вебінарів, пошук за записами курсів. Специфіка: один основний мовець (лектор), можливі слайди та демонстрації екрану, академічна лексика. ### Просте рішення для одного лектора```python
from faster_whisper import WhisperModel from openai import AsyncOpenAI
model = WhisperModel("large-v3", device="cuda") client = AsyncOpenAI()
async def transcribe_lecture( video_path: str, lecture_topic: str = None ) -> dict: # Извлекаем аудио audio_path = extract_audio(video_path)
# Транскрибируем
segments, info = model.transcribe(
audio_path,
language="ru",
initial_prompt=f"Лекция на тему: {lecture_topic}. " if lecture_topic else None,
vad_filter=True
)
full_text = " ".join(seg.text for seg in segments)
# Структурируем через LLM
structure = await client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "system",
"content": """Обработай транскрипт лекции:
1. Исправь очевидные ошибки распознавания
2. Раздели на логические разделы с заголовками H2
3. Выдели ключевые термины жирным
4. Добавь список ключевых понятий в конце
Формат: Markdown."""
}, {
"role": "user",
"content": full_text[:8000] # ограничение контекста
}]
)
return {
"raw_transcript": full_text,
"structured_notes": structure.choices[0].message.content,
"duration_minutes": info.duration / 60,
"language": info.language
}
### Обробка довгих лекцій (2+ години) Розбиваємо на частини по 20–30 хвилин, обробляємо паралельно, склеюємо з урахуванням контексту:python
async def process_long_lecture(audio_path: str, chunk_minutes: int = 25) -> str:
chunks = split_audio(audio_path, chunk_minutes * 60)
transcripts = await asyncio.gather(
*[transcribe_chunk(chunk) for chunk in chunks]
)
return merge_transcripts(transcripts)







