Към съдържанието

Transcribe service

Видео или среща на входа, протокол с търсене на изхода и цена за всяко пускане

Роля
Сам, ръководя агенти
Статус
В процес
Код
Частно хранилище
Технологии
PythonFastAPIReactTypeScriptffmpegSQLiteOpenRouter
Илюстративен резултат от едно изпълнение върху измислена 47-минутна среща за продукт. Лента от кадри от записа на екрана носи времеви отметки, като повтарящите се екрани са отбелязани като дубликати, над времева линия на приложенията на екрана. Отдолу са откъс от транскрипт с разпознати говорещи A, B и C, четири екранни снимки без повторения, наименувани по часа си, и обединеният запис на срещата със записи за говор, екранна активност и екранни снимки.
Илюстративно съдържание: измислена среща, не истински запис.

В числа

4

резултата от едно пускане: транскрипция, хронология на екрана, снимки на екрана и един протокол от срещата

~90мин

най-дългите записи, върху които е доработван до надеждност, на три езика, включително български

1

място в кода, през което минава всяка заявка към модел, с ротация на ключовете от общ набор

2

режима на таксуване, личен или фирмен, обявявани за всяка задача и без стойност по подразбиране

Проблемът

Решенията се вземат на срещи, демонстрации и записи на екрана, а транскрипцията сама по себе си губи какво се е виждало на екрана. Запис, в който не мога да търся, няма да го използвам. Трябваше ми протокол, който мога да проверя: кой какво е казал, кога и какво е било показано в същия момент.

Подходът

Идеята е един процес, който превръща всяко видео или среща в един протокол. Звукът става транскрипция с разпознаване на говорещите. Видеото се реже на сегменти, всеки сегмент отива при модел, който съставя хронология на случилото се на екрана, а снимките на важните моменти се правят, чистят от повторения и се описват с помощта на транскрипцията около тях. Накрая обединяване слива всичко в протокол от срещата. Първо го направих като skill, който Claude и Codex можеха да пускат, и го доработвах върху записи до около 90 минути на три езика, включително български. После му направих обвивка, локална услуга с регистър на задачите, и запазих командния ред.

Страница на задача в Transcribe service за демонстрационен запис на седмична среща: статус „done“, лента с етапите на процеса: говор, видео и екранни снимки, панел с подробности, последните редове от лога и списък с изходни файлове като транскрипт, запис на срещата и бележки от срещата.
Само демонстрационни данни.

Как работи

  1. Паралелни етапи, едно обединяване

    Транскрипцията и приемането на видеото тръгват заедно. Всеки видеоклип отива към модела веднага щом ffmpeg го отреже, а снимките на екрана за един сегмент се избират веднага щом са готови събитията му. Едно обединяване в края, което чака всички етапи и може да се пусне пак, сглобява протокола.

  2. Снимки на екрана само за важните моменти

    Снимките се избират от събитията в хронологията, правят се и се сравняват с общ за всички сегменти набор от хешове, така че повтарящите се кадри се свиват до една снимка. Настройките за разстояние между снимките държат цената на дългия запис ниска.

  3. Кой говори

    Файл със списък на участниците казва кой говори и на какви езици. Папка с по една снимка на човек позволява на процеса да назовава хората пред камерата. Видеото от камера и записите на екрана се обработват различно.

  4. Едно място за заявките и хранилище без ключове

    Всички заявки към модели минават през една функция към OpenRouter, която събира API ключовете в общ набор, сменя ключа при отговори 402 и 429 и изважда ключ от употреба при 401 и 403. Тест прочита изходния код и потвърждава, че в хранилището не стои нито един ключ.

  5. Сметка за всяко пускане

    Всяка задача трябва да обяви режим на таксуване, личен или фирмен, и няма стойност по подразбиране. Режимът определя кои ключове може да ползва пускането и надделява над файла с настройки на средата, а регистърът записва колко е струвало всяко пускане.

  6. Пропуските се запълват

    Неуспелите прозорци на транскрипцията, видеосегменти и снимки се опитват отново в края на етапа си. Повторният опит използва наново добрите части и прави отново само неуспелите, така че една неуспешна заявка не налага повторна обработка на целия запис.

Регистър на задачите с две демонстрационни задачи с номера 001 и 002, с колони за медия, статус, таксуване, етап, продължителност, разход и дата на създаване, и бутони „Scan and Import“ и „New Job“.

Какво избрах и какво отпадна

Избрах

Режим на таксуване, обявен за всяка задача

Пред

Стойност по подразбиране от файла с настройки на средата

Режимът се вижда на задачата и случайна настройка на средата не може да го замени.

Резултатът

Ползвам го всеки ден. Услугата има лиценз, ръководство за участие и набор от тестове, който покрива паралелните етапи, средата за таксуване и проверката, че в кода няма ключове. Дефект при уеднаквяването на говорещите, довел до загуба на 776 етикета в две пускания, беше още отворен във версията като skill, от която израсна услугата. Записите, върху които е проверен, са на клиенти и екипи, затова не показвам нито един.

Какво следва

Да го пусна върху нов набор от записи и да потвърдя, че дефектът с говорещите е изчезнал.