<div style="text-align:center"><img width="200" 
        height="200" src="assets/book-with-gear.png" /></div>

# Lecture Automator

Lecture Automator позволяет автоматически генерировать презентации с озвучкой для каждого из слайдов. Всё, что вам нужно сделать - написать текстовый файл Markdown со специальной разметкой, а остальное за вас сделает Lecture Automator.

## Установка

С помощью pip (также необходимо установить ffmpeg и [Marp](https://github.com/marp-team/marp-cli)):
```
pip install lecture-automator
```

## Использование

### Через CLI

Для использование необходимо создать Markdown-файл с описаниями слайдов (см. [Marp](https://marp.app/#get-started)) и [управляющими конструкциями](#управляющие-конструкции):
````md
# Python

```
print('Привет, мир')
```

/speech{На этом слайде представлена простейшая программа, написанная на языке програмирования Пайтон. Эта программа просто выводит указанные слова в терминал.}

---

# Python

```
a = 2
b = 4
print(a * b)
```

/speech{А здесь представлена другая программа, которая умножается число два на число четыре.}

````

Затем для генерации необходимо использовать следующую CLI команду в терминале:
```bash
lecture-automator convert Example.md Example.mp4
```

Пример сгенерированного видео:

[Example.webm](https://user-images.githubusercontent.com/33065236/231875817-1d3aae09-2a63-4bb1-8380-8b7f024bbe45.webm)

### Через Web

Lecture Automator может развернуть небольшой сервер с веб-интерфейсом, в котором можно
описывать слайды и тут же генерировать видео с возможность его просмотра прямо в данном
веб-интерфейсе.

Для его запуска необходимо выполнить следующую команду:
```bash
lecture-automator web
```


### Управляющие конструкции 

На данный момент реализованы следующие управляющие конструкции:
- `/speech{...}` - текст для озвучивания слайда (каждый слайд должен содержать данную конструкцию). 


### SSML

Текст речи, указанный в управляющей конструкции `/speech{...}`, можно дополнительно настраивать с помощью языка разметки SSML, позволяющий настраивать синтез речи. Примеры некоторой разметки [SSML](https://wiki.calloffice.ru/index.php?title=%D0%9F%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%B8%D0%B2%D0%B0%D0%B5%D0%BC%D1%8B%D0%B5_%D1%82%D0%B5%D0%B3%D0%B8_SSML_%D0%B2_Silero_TTS):
- установка пауз (`<break time="2000ms"/>` - пауза на указанное количество времени);
- установка тональности для части текста (`<prosody pitch="x-high">Высокий тон</prosody>`, см. [тональности](#доступные-тональности));
- установка скорости чтения для части текста (`<prosody rate="fast">Быстро</prosody>`, см [скорости](#доступные-скорости-чтения));
- расстановка ударений (поставить знак `+` после гласной в слове);
- разметки абзацев и предложений для автоматической расстановки пауз ([подробнее](#разметки-абзацев-и-предложений)).

Пример текста с SSML:
````md
# Python

```
print('Привет, мир')
```

/speech{<prosody pitch="x-low">На этом слайде представлена простейшая программа</prosody>, написанная на языке програмирования <break time="2000ms"/> Пайтон. Эта программа просто выводит указанные слова в терминал.}

---

# Python

```
a = 2
b = 4
print(a * b)
```

/speech{А здесь представлена другая программа, которая умножает число два на число четыре.}
````


#### Доступные тональности 

Доступные тональности:
- 'x-low': 0.6; 
- 'low': 0.8;
- 'medium': 1. (нормальный тон);
- 'high': 1.2;
- 'x-high': 1.4 (высокий тон);
- 'robot': 0.

#### Доступные скорости чтения

Доступные скорости чтения:
- 'x-slow': 0.5;
- 'slow': 0.8;
- 'medium': 1.;
- 'fast': 1.2;
- 'x-fast': 1.5.


#### Разметки абзацев и предложений

Для разметки абзацев и предложений существуют два тэга `<p>` для абзацев и `<s>` для предложений.

Пример:
```
<p>
 Длинные паузы между параграфами
</p>
<p>
  <s>Более короткие паузы.</s>
  <s>Между предложениями.</s>
</p>
```