Всем привет! Меня зовут Николай Луняка, и я, как и многие из вас, ежедневно утопаю в потоке информации. Количество аудиоконтента растёт в геометрической прогрессии, при этом его нужно ещё «переварить» и зафиксировать.
Интереснейшие лекции хочется сохранить не только в памяти, но и в виде тезисов, а ещё есть подкасты, интервью, да и банальные голосовые заметки, надиктованные на бегу. Знакомая картина?
На помощь приходят облачные сервисы: транскрибация, саммаризация, диаризация — чуть ли не кофе в постель приносят. Удобно? Без сомнения.
Как у любого хорошего решения, у облачных сервисов есть оборотная сторона:
Приватность: куда на самом деле уходят мои данные? Кто их видит, как использует, и не всплывут ли мои приватные обсуждения там, где не надо? А если речь идёт о чувствительной информации? Использовать облачные сервисы в рабочем процессе опять же сложно из‑за NDA.
Подписки. Для расшифровки приходится использовать несколько сервисов. Большинство из них платные — из ежемесячного бюджета набегает ощутимая сумма. При больших объёмах записей ценник становится соответствующим, зачастую кусачим.
Зависимость от интернета. Куда без него в нашем «облачном» мире? Нет сети — нет обработки.
Однажды я устал расшифровывать аудио пачкой инструментов в духе «Балерино-Капучино и Бобрито-Бандито» и решил собрать свой пайплайн.

Дальше покажу мой вариант решения всех этих проблем — свой собственный уголок AI‑независимости, где аудиоданные в полной безопасности под моим неусыпным контролем.
Для начала расскажу, какие инструменты показались мне наиболее подходящими.
1. Whisper: локальной магией из аудиофайла получаем текст

Начнём с Whisper — модели распознавания речи от OpenAI в open‑source — готовый инструмент, не сырая демка, да ещё и бесплатная (ну, почти — электричество‑то компьютер кушает).
Почему Whisper? Мои аргументы:
Точность транскрибирования, близкая к идеалу, даже в версии tiny: из всего, что я пробовал локально, Whisper показывает, пожалуй, лучший результат. Особенно на английском, но и с русским справляется на ура. Меньше ошибок — меньше править руками.
Многоязычность: он «всеядный», и даже сам пытается определить, на каком языке ему подсунули запись. Удобно!
Не боится трудностей: шумы, акценты, не лучшая дикция — Whisper старается вытащить смысл, и часто успешно.
Сам расставит точки и запятые (ну, почти). Пунктуацию и какое‑никакое форматирование он делает, и это сильно облегчает жизнь.
Главный аргумент — работает локально. Никаких «отправьте нам ваше аудио».
Под любые ресурсы и мощности вашего ПК: Модельки от крошечной «tiny» до монструозной «large» можно подобрать под своё железо. Я обычно целюсь в «large‑v3» для качества, если время позволяет.

В общем, Whisper — наш надёжный поставщик текста из аудио.
2. NeMo: разложим по полочкам кто что сказал
Текст мы получили. Но если это запись встречи на пять человек, как понять, где чья реплика? На помощь приходит NVIDIA NeMo. Это целый фреймворк для разговорного AI, но нас интересует конкретная фича — диаризация спикеров. NeMo пытается понять, сколько людей говорило и какие куски текста принадлежат каждому из них.
Чем хорош NeMo для этой задачи:
Различает голоса довольно неплохо, даже если кто‑то кого‑то перебивал, NeMo старается разобраться. Не всегда идеально, но часто очень помогает.
Можно подкрутить, есть возможность тонкой настройки, если вы готовы в это погрузиться.
За ним стоит NVIDIA, а это значит, проект живой, развивается, есть поддержка.
3. Ollama: доступный мост к языковым моделям разных версий

Итак, у нас есть текст, возможно, даже с разметкой по спикерам. Что дальше? А дальше хочется, чтобы кто‑то прочитал эту портянку текста и кратко выдал суть. Здесь в игру вступают большие языковые модели (LLM). Но запускать их локально — та ещё задачка... была, пока не появился Ollama.
Ollama — спасение для тех, кто хочет подружиться с LLM:
Простота: установить и запустить модель — буквально пара команд в терминале. Никаких танцев с бубном вокруг зависимостей (ну, почти).
Поддерживает кучу популярных инструментов — Llama, Mistral, Gemma.
Приватность — всё крутится локально.
Есть API — скрипты или плагины могут легко общаться с моделью.
Ollama — удобная «пусковая площадка» для Gemma, которая и будет заниматься погруженным анализом текста.
4. Gemma 27B: кратко, по делу и по пунктам раскладываем текст

Gemma — это семейство моделей от Google, при том открытое, что не может не радовать. Есть разные размеры, я проводил эксперименты на Gemma 27B (27 миллиардов параметров — звучит солидно). Хочется качественного анализа. Если у вас не тянет железо или меньше ресурсов, можно использовать модели, где параметров поменьше.
Что мне нравится в Gemma (когда она работает через Ollama):
Хоть это не гигант вроде GPT-4 с 1,8 триллионов параметров, Gemma 27B вполне достойно справляется с генерацией и пониманием текста. Для саммари — то, что доктор прописал.
Модельки Gemma неплохо оптимизированы для запуска на обычном (относительно мощном) железе. Интересная особенность Ollama — она подсовывает квантованные версии (это когда модель «ужимают» для скорости, не критично теряя в точности).
Открытость — больше людей пользуется и даёт обратную связь, система быстрее развивается.
Обучена на многих языках, так что с нашими «великим и могучим» проблем быть не должно.
5. Obsidian: цифровой мозг, куда всё стекается

Куда же мы будем складывать наши сокровища — транскрипты, диалоги, саммари? Я для себя выбрал Obsidian — не просто заметочник, а целая система управления знаниями. И самое главное — он работает с локальными файлами в Markdown.
Почему Obsidian — идеальный финальный аккорд:
Все заметки лежат в папке на моем компьютере. Стоп паранойя.
Markdown — это просто и удобно: легко писать, читать и переносить куда угодно.
Плагины — их тысячи! Вот где настоящая магия. Можно настроить Obsidian так, как тебе удобно, интегрировать с чем угодно. В нашем случае — автоматизировать сохранение результатов обработки аудио.
Можно связывать заметки друг с другом, строить целые карты знаний. Отчёт по встрече легко связывается с проектом, задачами, мыслями.
Внешний вид, горячие клавиши — всё можно кастомизировать.
Obsidian для меня — не просто хранилище, а активный инструмент. Сюда будут складироваться результаты работы нашего AI‑комбайна, отсюда же мы будем работать с ними дальше.
Вот такая команда сервисов у нас собралась в пайплайн. Каждый со своей ролью, но вместе они — сила.
Как заставить этот оркестр играть слаженно: путь от аудиозаписи до осмысленной заметки в Obsidian
С нашими чудо‑инструментами мы более‑менее разобрались. Наступает самый ответственный момент: как эти разрозненные компоненты соединить в единый, слаженно работающий конвейер?

Как превратить аудиофайл в информационную конфетку — структурированную, осмысленную и готовую к употреблению заметку в Obsidian? Давайте пройдёмся по шагам этого увлекательного процесса, как его реализую я.
Шаг 1: Готовим «сырьё» – наш драгоценный аудиофайл
Обычно приложения типа Zoom или Контур.Толк предупреждают юзеров о записи аудио. Но хороший тон — предупредить собеседников, что вы записываете созвон.
Всё начинается, как нетрудно догадаться, с аудио. Я лично стараюсь использовать формат.wav или.flac — исторически сложилось, что Whisper с ними дружит особенно хорошо, да и меньше шансов нарваться на неожиданные сюрпризы с экзотическими кодеками. Тем не менее, Whisper довольно «всеяден» и с удовольствием «скушает» и MP3, и M4A, и многие другие популярные форматы. Главное, чтобы сама запись была более‑менее приличного качества.
Если у вас, скажем, стереозапись со встречи, где разные участники были записаны на разные каналы — вообще шикарный вариант, NeMo потом скажет вам отдельное спасибо. Но и с обычной моно‑записью вполне можно жить и получать достойные результаты. Дополнительно можно убрать длинные паузы (тишину) и попробовать улучшить качество записи при помощи библиотеки ffmpeg:
cmd = [
"ffmpeg",
"-i", str(input_path), # входной файл
"-ac", "1", # преобразовать звук в моно (1 канал)
"-ar", "16000", # понизить частоту 16 кГц
"-af", "silenceremove=start_periods=1:start_silence=0.3:start_threshold=-35dB:\
detection=peak", # фильтр для удаления пауз
str(output_path)
]
Я использую следующие фильтры:
start_periods=1 # реагирует на 1ю возникшую паузу
start_silence=0.3 # пауза считается значимой, если длится дольше 0.3 сек
start_threshold=-35dB # всё тише −35 дБ считается тишиной
detection=peak # на основе пикового сигнала в аудио
Шаг 2: Whisper, на выход! Превращаем голос в буквы, или Магия транскрибации
Первым делом мы «скармливаем» наш аудиофайл Whisper. Я обычно использую модель «large‑v3» для русского языка, если нужна максимальная точность и есть немного времени подождать. Если же ситуация «горит» и результат нужен «ещё вчера» — можно взять модель «medium». Whisper немного попыхтит, проанализирует аудиодорожку и выдаст текстовый файл. И что особенно приятно — уже с запятыми, точками, а иногда даже с попытками разбить текст на абзацы. Красота, да и только!
Как это может выглядеть в консоли (очень упрощённый пример):
bash
whisper vstrecha.wav --model large-v3 --language ru --output_format txt
На выходе мы получаем, например, файл «vstrecha.txt» — с ним можно работать дальше.
Лайфхак: если у вас есть хорошая видеокарта с поддержкой RTX, для транскрибации можно использовать GPU.
Мой скрипт:
# Аргументы командной строки
p = argparse.ArgumentParser()
# Обязательный аргумент -- путь к файлу.
p.add_argument("path", help="Аудио‑ или видеофайл")
# Необязательный аргумент --lang, по умолчанию -- русский.
p.add_argument("--lang", default="ru")
# Параметр случайности (температура) для модели, влияет на вариативность результатов.'''
p.add_argument("--temperature", type=float, default=0)
# Размер beam search (если используется), влияет на точность/варианты распознавания.
p.add_argument("--beam_size", type=int)
# Булев флаг: использовать ли предыдущий текст как контекст при распознавании.
p.add_argument("--condition", action="store_true",
help="condition_on_previous_text")
# Необязательный текстовый ввод -- вводная для модели (можно подсказать контекст/темы).
p.add_argument("--prompt", default="",
help="Вводная: тема, участники, термины...")
# Парсит все аргументы из командной строки в объект args.
args = p.parse_args()
if not os.path.isfile(args.path):
raise SystemExit(f"Файл не найден: {args.path}")
# Проверяет, доступна ли видеокарта CUDA (GPU). Если нет -- используется CPU.
device = "cuda" if torch.cuda.is_available() else "cpu"
# Выводит на каком устройстве будет происходить транскрипция.
print(f"Устройство: {device.upper()} --",
torch.cuda.get_device_name(0) if device == "cuda" else "CPU")
# Загружает модель large-v3 на выбранное устройство (GPU или CPU).
model = whisper.load_model("large-v3", device=device)
# Сообщение о старте и начало отсчёта времени.
print("Транскрибирование...")
t0 = time.time()
result = model.transcribe(
args.path,
language=args.lang,
temperature=args.temperature,
beam_size=args.beam_size,
condition_on_previous_text=args.condition,
initial_prompt=args.prompt or None
)
# Показывает, сколько времени заняла транскрипция.
print(f"{round(time.time()-t0,2)} с")
# Сохранение результата в JSON и TXT
base = os.path.splitext(args.path)[0]
with open(base + ".json", "w", encoding="utf-8") as f:
json.dump(result["segments"], f, ensure_ascii=False, indent=2)
with open(base + ".txt", "w", encoding="utf-8") as f:
f.write(result["text"])
print("Сохранено:", base + ".json / .txt")
Шаг 3: NeMo, помоги разобраться, кто есть кто! Искусство диаризации
Просто текст — конечно, хорошо, но если это была запись оживлённой беседы нескольких человек, без чёткого понимания, кто и что сказал, далеко не уедешь. Тут в дело вступает NeMo с функцией диаризации спикеров. Он снова «слушает» исходный аудиофайл и, опираясь на временные метки (которые Whisper тоже может любезно предоставить, если попросить его выдать результат в формате SRT или VTT), пытается аккуратно «нарезать» общую речь на отдельные кусочки и присвоить каждому уникальную метку: «Спикер_0», «Спикер_1», «Спикер_2» и т. д.
NVIDIA рекомендует выполнять установку через pip install nemo_toolkit["all"]
. Иногда могут возникнуть нюансы с зависимостями, так что внимательно читайте сообщения в консоли при установке. Официальная документация NeMo — ваш лучший друг.
Сразу предупрежу: для дальнейшей работы и настройки это, как правило, не одна простая команда в консоли. Здесь потребуется небольшой скрипт на Python, который будет управлять работой NeMo, загружать модели (например, «titanet_large» для получения эмбеддингов голоса и «msdd_vad» или аналогичную для кластеризации сегментов).
Результат определённо того стоит: вместо сплошного, неразборчивого потока текста мы получаем нечто гораздо более осмысленное, например:
[Спикер_0]: Привет, команда! Какие у нас сегодня новости по проекту «Смарт»?
[Спикер_1]: Привет! В целом, всё идет по плану, но есть пара нюансов, которые хотелось бы обсудить...
Уже гораздо понятнее и информативнее, не правда ли?
# Чтение аудио и извлечение эмбеддингов
wav, sr = librosa.load(wav_path, sr=16000, mono=True)
embs, stamps = extract_embeddings(wav, sr, model)
# Автокластеризация спикеров по эмбеддингам
labels = auto_cluster(embs, max_k=max_k)
spk_cnt = len(set(labels))
diar = merge_segments(stamps, labels)
# Мерж с расшифровкой Whisper
with open(whisper_json, encoding="utf-8") as f:
whisper_segs = json.load(f)
tagged = []
for seg in whisper_segs:
spk = next(
(f"Speaker{d['spk'] + 1}" for d in diar
if not (seg['end'] <= d['s'] or seg['start'] >= d['e'])),
"Unknown"
)
tagged.append({**seg, "speaker": spk})
# Сохраняем результат
out_path = Path(whisper_json).with_stem(Path(whisper_json).stem + "_tagged")
with open(out_path, "w", encoding="utf-8") as f:
json.dump(tagged, f, ensure_ascii=False, indent=2)
Я использую следующий флоу: загружаю модель >> извлекает эмбеддинги (числовые данные, которые позволяют понять количество спикеров) >> кластеризует на группы говорящих >> сливает последовательные сегменты одного спикера >> сопоставляет с полученными данными на предыдущем шаге >> для каждого сегмента определяет, в какой диаризационный диапазон он попадает, присваивает спикера.
Шаг 4: Gemma, твой звёдный час! Делаем умное и структурированное саммари
Перед запуском локального LLM‑сервер через Ollama обязательно нужно активировать модель:
ollama run gemma3:27b
Теперь, когда у нас есть практически идеальный диаризованный транскрипт, время задействовать тяжёлую артиллерию — Gemma 27B, запущенную и управляемую через Ollama. Наша задача на этом этапе — «скормить» ей полученный текст и вежливо, но настойчиво попросить сделать качественную выжимку: о чём говорили, к каким выводам пришли, что решили, какие задачи поставили и на кого их повесили.
Здесь важную роль играет правильно составленный запрос к модели. Я формулирую промпт примерно так:
«Ты мой эффективный AI‑ассистент по анализу стенограмм совещаний и лекций. Вот тебе текст разговора нескольких людей. Сделай из него структурированное саммари на русском языке. В саммари обязательно выдели следующие пункты (можно использовать маркированные списки):
1. Основные обсуждавшиеся темы или вопросы.
2. Ключевые аргументы, предложения или идеи, высказанные участниками (если были).
3. Принятые решения (если таковые были).
4. Поставленные задачи с указанием ответственных лиц (если это можно однозначно понять из текста).
5. Главные выводы или итоги обсуждения».
Ollama отправляет этот промпт вместе с текстом нашей Gemma, и она, немного подумав (время и скорость обработки зависит от выбранной модели и вашего железа), выдаёт готовое саммари. Настоящая AI‑магия в действии!
# Ключевые настройки скрипта
--model - имя локальной LLM-модели в Ollama (“gemma:27b”, “llama3:8b”...)
--no-stream - отключает потоковую генерацию (по умолчанию - включена)
--timeout - ограничивает время ожидания ответа
max_chars - ограничивает длину текста для LLM (по умолчанию 15 000)
system_prompt - инструкция для модели (как структурировать Markdown-резюме)
Входной файл должен быть в формате JSON: `[{ “speaker”: “...”, “text”: “...”, “start”: ..., “end”: ... }, ...]
Шаг 5: Все дороги ведут в Obsidian. Наводим порядок, систематизируем и пользуемся результатами
И вот он, долгожданный финал нашего увлекательного путешествия. Собираем все наши артефакты: исходный «сырой» транскрипт от Whisper, диаризованный текст от NeMo, блестящее саммари от Gemma — и аккуратно, с любовью укладываем это богатство в наше хранилище Obsidian. Как это сделать? Вариантов масса:
1. Старым дедовским способом — руками: скопировал — вставил. Долго, муторно, неэффективно, и вообще не наш метод, если мы говорим о регулярных задачах и автоматизации.
2. Магия скриптов — наш выбор. Пишем небольшой (или большой, в зависимости от ваших амбиций) скрипт на Python, который будет выполнять все предыдущие шаги по очереди, а затем самостоятельно создавать новую заметку в Obsidian, правильно её называть (например, по дате и теме встречи или по имени исходного аудиофайла), добавлять теги, вставлять саммари, диаризованный транскрипт, а может, даже ссылку на исходный аудиофайл. В общем полный автомат, мечта любого лентяя (в хорошем смысле этого слова).
3. Плагины Obsidian: расширяем горизонты. Тут тоже есть где разгуляться творческой мысли. Можно использовать плагин Obsidian Shell Commands
для запуска Python‑скрипта прямо из интерфейса Obsidian или плагин Templater
для создания новых заметок по заранее подготовленному красивому шаблону, куда будут автоматически подставляться все наши данные.

Так шаг за шагом из непонятного и объёмного аудиофайла мы получаем структурированную осмысленную информацию, с которой можно работать, по тексту которой можно искать, которой можно делиться с коллегами, и просто чувствовать себя настоящим молодцом, победившим информационный хаос.
Удобно обернуть всё это дело в простенький GUI, как у меня и вышло:
import os
import subprocess
def run_pipeline(filepath, use_clean=True, do_summary=True, temperature="0", beam_size=None, condition=False, prompt=""):
if not filepath or not os.path.exists(filepath):
raise FileNotFoundError(f"Файл не найден: {filepath}")
base_name = os.path.splitext(filepath)[0]
cleaned_file = base_name + "_cleaned.wav"
audio_file = cleaned_file if use_clean else filepath
# Шаг 1: Очистка аудио (опционально)
if use_clean:
subprocess.run(["python", "clean_audio.py", filepath])
# Шаг 2: Транскрипция Whisper
cmd = [
"python", "transcribe.py",
audio_file,
"--lang", "ru",
"--temperature", temperature,
]
if beam_size:
cmd += ["--beam_size", str(beam_size)]
if condition:
cmd.append("--condition")
if prompt:
cmd += ["--prompt", prompt]
subprocess.run(cmd)
# Шаг 3: Диаризация NeMo
json_file = os.path.splitext(audio_file)[0] + ".json"
subprocess.run(["python", "diarize_nemo_auto.py", audio_file, json_file, "12"])
# Шаг 4: Конвертация в TXT / MD
tagged_json = os.path.splitext(audio_file)[0] + "_tagged.json"
if os.path.exists(tagged_json):
from convert_tagged_json_to_txt_md import convert_tagged_json_to_txt_md
convert_tagged_json_to_txt_md(tagged_json)
# Шаг 5: Генерация саммари (опционально)
if do_summary:
subprocess.run(["python", "summarize_json.py", tagged_json])
Как вам такой подход?
А что у других? Сравниваем наш “самосбор” с готовыми решениями, облачными и не очень
Зачем мудрить, если есть облачные гиганты и их свита?
Google Speech‑to‑Text, AWS Transcribe, Azure Speech Services, Yandex SpeechKit, AssemblyAI, Otter.ai, Sonix.ai, Fireflies.ai и многие другие ребята, конечно, молодцы. У них, как правило, всё очень просто, быстро, удобно и часто весьма качественно.
Чем готовые решения объективно круче:
Простота: зарегистрировался, получил API‑ключ (или просто загрузил файл через веб‑интерфейс) — и через несколько минут получил результат. Никаких сложных установок, настроек зависимостей и чтения многостраничных мануалов.
Скорость и масштабируемость: у этих компаний в распоряжении дата‑центры с тысячами мощных серверов. Они способны переваривать огромные объёмы аудио очень и очень быстро. Если вам нужно обработать терабайты записей в сжатые сроки — облака, скорее всего, ваш выбор.
Дополнительные «фичи» и «плюшки»: часто облачные сервисы предлагают набор допов — автоматический анализ тональности речи, выделение ключевых слов и тем, определение эмоций, интеграции с популярными сервисами (CRM, таск‑менеджеры и т. д.).
Где облачные сервисы однозначно проигрывают локальному стеку:
Деньги, деньги, дребеденьги: практически все облачные сервисы работают по подписке или тарифицируют каждую обработанную минуту аудио (или каждый распознанный символ). Если вы пользуетесь их услугами регулярно и в больших объемах, ежемесячные счета набегают весьма приличные.
Мои драгоценные данные у «дяди Сэма» (или у кого‑то ещё): вопрос конфиденциальности и безопасности данных стоит очень остро. Вы доверяете свои, возможно, очень чувствительные аудиозаписи третьей стороне. Не всегда хочется (а иногда и просто нельзя по соображениям безопасности или требованиям закона) светить совещания и личные разговоры.
Без интернета — никуда, от слова «совсем»: тут всё предельно понятно. Есть интернет — есть сервис. Нет интернета — приходите завтра.
Гибкость? Не, не слышали (или слышали, но не про вашу честь): что разработчики сервиса вам предоставили, тем вы и пользуетесь. Шаг влево, шаг вправо от стандартного функционала — или невозможно, или требует дополнительных затрат и согласований. Кастомизация под специфические нужды часто сильно ограничена.
Чем самодельный пайплайн выигрывает:
1. GDPR + офлайн. Данные не покидают диск.
2. Нулевые вложения — нет платных подписок.
3. Качество расшифровки. Gemma 27B выделяет agenda / decisions / action items почти как GPT‑4.
4. Интеграция с Obsidian. «Минутки» попадают в единый граф заметок, ищутся, тегируются, попадают в Dataview‑таблицы.
5. Гибкость. Хотите выгрузку в Jira или Notion — меняете промпт/скрипт, а не ждёте фичи от SaaS.
Другие локальные решения (open-source и не только, если они существуют в природе)
Тут тоже есть из чего выбрать, если хорошенько покопаться в закромах GitHub и других ресурсов. Однако найти готовое, комплексное и такое же гибкое решение довольно сложно.
Сейчас Альфа тестирует плагин для Контур.Толка, чтобы транскрибировать и делать саммари созвонов в инфраструктуре банка на платформе AlfaGen. Это приятный доп для сотрудника — всё собрано и настроено за тебя, можно грузить любые рабочие обсуждения и даже клиентские данные, они не утекут за контур. Точно жду этот плагин.
Альтернативы Whisper для транскрибации: конечно, существуют другие open‑source ASR‑модели и фреймворки (Kaldi, DeepSpeech, Vosk). Но Whisper, на мой взгляд, лидер по соотношению простоты использования, доступности предобученных моделей и итоговой точности для большинства языков и задач.
Альтернативы NeMo для диаризации: можно посмотреть в сторону библиотек
pyannote.audio
— очень мощный и активно развивающийся инструмент. Выбор инструмента часто зависит от ваших специфических требований, качества аудио и готовности разбираться в особенностях библиотеки.Альтернативы Ollama/Gemma для запуска LLM: для локального запуска больших языковых моделей есть довольно много различных путей. Можно напрямую возиться с
llama.cpp
(если вы хардкорный разработчик и любите всё контролировать до деталей), естьLM Studio
,GPT4All
,Jan.ai
. Ollama мне импонирует невероятной простотой установки и использования и удобным API. Выбор самих моделей просто огромен: тут вам и различные версии Llama (Llama 2, Llama 3), и Mistral, и Mixtral и многие другие. Gemma 27B — сбалансированный вариант для достаточно мощных домашних или рабочих ПК с качественной саммаризацией и анализом текста.Альтернативы Obsidian для управления знаниями: для заметок и построения персональной базы знаний есть множество других прекрасных инструментов: Joplin, Logseq, Notion (хотя он уже не совсем локальный и у него свои нюансы с приватностью), Standard Notes, Trillium Notes и другие. Obsidian с его ставкой на локальное хранение данных в простом Markdown‑формате, невероятной гибкостью, системой плагинов и активным сообществом — моя давняя и неизменная любовь.
Полезные ссылки, чтобы собрать AI-пайплайн для транскрибации
Whisper от OpenAI: https://github.com/openai/whisper
NVIDIA NeMo Toolkit: https://docs.nvidia.com/deeplearning/nemo/user‑guide/docs/en/stable
Ollama: https://ollama.com
Google Gemma: https://ai.google.dev/gemma
Obsidian: https://obsidian.md
PyTorch: https://pytorch.org
Faster Whisper: https://github.com/guillaumekln/faster‑whisper
pyannote.audio (мощная альтернатива NeMo для задач диаризации спикеров): https://github.com/pyannote/pyannote‑audio
LM Studio, Jan.ai, GPT4All (другие популярные инструменты для локального запуска LLM, если Ollama вам по какой‑то причине не подойдёт):
Вывод
Дерзайте, друзья! Собирайте своих AI‑помощников, автоматизируйте рутину, освобождайте своё время для более творческих и интересных дел. Пусть работа с информацией приносит вам только радость, пользу и удовлетворение от результата.
Если у вас есть вопросы или идеи по моему пайплайну или вы захотите поделиться своим опытом создания подобных систем — пишите в комментариях, будет интересно обсудить.
Ruslan964
интересно решение!
я ранее пользовался для этого chatGPT платной версией)
еще из интересного - яндекс браузер умеет делать выжимки из видео, возможно, он также умеет и аудио (не пробовал). Но самый главный плюс описанного решения - что на локальной тачке и ИБ-шники не придут в гости))