Проект «Прометей»: как озвучить целую библиотеку за один вечер при помощи ИИ

#tts #TextToSpeech #AI

Подготовка среды

Сначала необходимо [зайти на сервер] под пользователем root.
Развернуть базовый набор инструментов: Python для работы движка, FFmpeg для обработки звука, Pandoc для парсинга книг из FB2 и Aria2 для скоростной закачки моделей и данных.

Установка системных пакетов и движка

apt update && apt install -y python3-pip ffmpeg pandoc aria2
pip install edge-tts --break-system-packages

Флаг --break-system-packages необходим в современных версиях Debian/Ubuntu для установки Python-пакетов глобально, минуя виртуальные окружения.

Создание структуры директорий

Чтобы файлы не перемешивались, создадим рабочую иерархию папок для текстов, готового аудио и временных файлов:

mkdir -p /root/books/{text,audio,tmp}

https://habr.com/ru/companies/selectel/articles/1006288/

Проект «Прометей»: как озвучить целую библиотеку за один вечер при помощи ИИ

Каждый из вас хоть раз ловил себя на мысли: «А почему бы не начать слушать книги вместо того, чтобы их читать?». Пока едешь в метро, стоишь в пробке, занимаешься домашней рутиной или вместо приевшейся...

Хабр

#tts #TextToSpeech #AI

Теперь создадим управляющий скрипт. Вам нужно создать файл в папке /root/, вставить в него код и разрешить системе его запуск (дать право на запуск) командой chmod +x. Для этого:

1. создайте файл: nano /root/prometheus.sh;

2. вставьте код скрипта;

3. сохраните (Ctrl+O, Enter) и выйдите (Ctrl+X);

4. сделайте файл исполняемым `chmod +x`.

#tts #TextToSpeech #AI

#!/bin/bash

# PROJECT PROMETHEUS v7.2.1 | MASTER EDITION

# КОНФИГУРАЦИЯ
THREADS=12               # Оптимально для стабильности без бана по IP
VOICE="ru-RU-DmitryNeural" # Эталонный мужской голос
RATE="+15%"               # Сжатие пауз и темп
OUTPUT_BASE="/root/books/audio"
TEMP_BASE="/root/books/tmp"

#1. ВВОД ДАННЫХ (Поддерживает автозаполнение через Tab)

read -e -p "Путь к файлу (txt/fb2): " INPUT_PATH
INPUT_PATH=(echo "INPUT_PATH" | sed -e 's/^"//' -e 's/"//' -e "s/^'//" -e "s/'//")
[ ! -f "$INPUT_PATH" ] && echo "ERR: Файл не найден!" && exit 1

#2. ПОДГОТОВКА

WORKDIR="{TEMP_BASE}/work_(date +%s)"
mkdir -p "WORKDIR" "OUTPUT_BASE"

#tts #TextToSpeech #AI

#3. ПАРСИНГ МЕТАДАННЫХ (Вытаскиваем автора и название из FB2)

FILE_EXT="{INPUT_PATH##*.}"
ORIG_NAME=(basename "INPUT_PATH" ."FILE_EXT")
if [[ "FILE_EXT" == "fb2" ]]; then
    F_NAME=(grep -i -oP '(?<=<first-name>).?(?=</first-name>)' "INPUT_PATH" | head -1)
    L_NAME=(grep -i -oP '(?<=<last-name>).?(?=</last-name>)' "INPUT_PATH" | head -1)
    TITLE=(grep -i -oP '(?<=<book-title>).*?(?=</book-title>)' "INPUT_PATH" | head -1)
    BOOK_NAME="{L_NAME}_{F_NAME}__{TITLE}"
    # Fallback если метаданные кривые
    [ {#BOOK_NAME} -lt 10 ] &amp;&amp; BOOK_NAME="ORIG_NAME"
    pandoc -f fb2 -t plain "INPUT_PATH" -o "WORKDIR/raw.txt"
else
    BOOK_NAME="ORIG_NAME"
    cp "INPUT_PATH" "$WORKDIR/raw.txt"
fi

#Санация имени файла (убираем мусорные символы)

BOOK_NAME=(echo "BOOK_NAME" | sed 's/[[:space:]]/_/g' | sed 's/[\/:"*?<>|]//g')
FINAL_FILE="OUTPUT_BASE/{BOOK_NAME}.mp3"
echo -e ">>> ЗАПУСК ПРОТОКОЛА: ${BOOK_NAME}.mp3"

#tts #TextToSpeech #AI

#4. ОБРАБОТКА ТЕКСТА И НАРЕЗКА

sed '/^/d' "WORKDIR/raw.txt" > "WORKDIR/source.txt"
fold -s -w 2000 "WORKDIR/source.txt" | tr -d '\r' > "WORKDIR/formatted.txt"
split -l 100 -d -a 4 "WORKDIR/formatted.txt" "WORKDIR/part_"
TOTAL_PARTS=(ls "$WORKDIR"/part_[0-9]* | wc -l)

#5. КОНВЕЙЕРНАЯ ОЗВУЧКА

export VOICE WORKDIR RATE
do_tts() {
    local file=1
    edge-tts --rate="RATE" --voice "VOICE" --file "file" --write-media "$file.mp3" > /dev/null 2>&1
}
export -f do_tts

#Очередь через xargs (вот здесь живет скорость)

ls "WORKDIR"/part_[0-9]* | xargs -P THREADS -I {} bash -c 'do_tts "{}"'

#tts #TextToSpeech #AI

#6. СКЛЕЙКА (БЕЗ ПОТЕРИ КАЧЕСТВА)

ls "WORKDIR"/part_*.mp3 | sort | xargs -I {} echo "file '{}'" &gt; "WORKDIR/list.txt"
ffmpeg -f concat -safe 0 -i "WORKDIR/list.txt" -c copy -y "FINAL_FILE" > /dev/null 2>&1
rm -rf "WORKDIR"
echo "ГОТОВО! Файл: FINAL_FILE"

https://habr.com/ru/companies/selectel/articles/1006288/

Проект «Прометей»: как озвучить целую библиотеку за один вечер при помощи ИИ

Каждый из вас хоть раз ловил себя на мысли: «А почему бы не начать слушать книги вместо того, чтобы их читать?». Пока едешь в метро, стоишь в пробке, занимаешься домашней рутиной или вместо приевшейся...

Хабр