Библиотека на C11 для автоматической публикации медиаконтента (текст, аудио, видео, изображения) в Telegram, Reddit, Vimeo и другие платформы.
- Текст: Telegram MarkdownV2, HTML, BBCode → отправка в Telegram
- Аудио: чтение, перекодирование через FFmpeg, отправка с подписью
- Видео и субтитры: SRT парсинг, наложение, конвертация
- Изображения: фильтры FFmpeg (
buffer/buffersinkgraph), PNG-энкодинг, параллельный batch processing - Vimeo: TUS resumable upload видео, метаданные, приватность, плеер, домены встраивания, обложки, главы
- Reddit API, история публикаций в PostgreSQL
Нужен только компилятор и CMake — никаких глобальных apt install ffmpeg / brew install ffmpeg / vcpkg install / Python / meson / perl.
- Linux / macOS — внешние либы (FFmpeg, libcurl, libpq) лежат как pre-built
.so/.dylibвexternal_libs/ - Windows — всё собирается из исходников в
external_sources/через MSVC (FFmpeg, curl, libpq + NASM/VSNASM портативно вexternal_sources/tools/)
sudo apt install build-essential cmake
cmake -S . -B build
cmake --build build -j
./app/VTLxcode-select --install
brew install cmake
cmake -S . -B build
cmake --build build -j
./app/VTLНативно через MSVC (Visual Studio 2022/2026). MinGW/MSYS2/WSL/Python не нужны.
cmake -S . -B build-source -A x64
cmake --build build-source --config Release -j
.\app\VTL.exeПервая сборка идёт долго (~10–15 минут): собирается FFmpeg 7.1 (ShiftMediaProject) + libpq + curl. Последующие сборки инкрементальные.
В корне проекта должны лежать input-файлы (в репо не закоммичены, положить вручную):
text.md— текст публикацииaudio_ariel.mp3,audio_styuardessa.mp3,audio_xanadu.mp3— аудиофайлы
Переменные окружения:
TG_BOT_TOKEN,TG_CHAT_ID— для Telegram (без нихText Pipeline/Audio Pipelineупадут на старте)VIMEO_ACCESS_TOKEN— для Vimeo (нужен только если используешь vimeo-функции; без него вернётсяVTL_res_vimeo_kMissingToken)
export TG_BOT_TOKEN="<токен от @BotFather>"
export TG_CHAT_ID="<id из getUpdates>"
export VIMEO_ACCESS_TOKEN="<personal access token>"
./app/VTL$env:TG_BOT_TOKEN = "<токен от @BotFather>"
$env:TG_CHAT_ID = "<id из getUpdates>"
$env:VIMEO_ACCESS_TOKEN = "<personal access token>"
.\app\VTL.exeset TG_BOT_TOKEN=<токен от @BotFather>
set TG_CHAT_ID=<id из getUpdates>
set VIMEO_ACCESS_TOKEN=<personal access token>
app\VTL.exeПолучить значения:
TG_BOT_TOKEN— у @BotFather, команда/newbotTG_CHAT_ID— отправить сообщение боту, дёрнутьhttps://api.telegram.org/bot<TOKEN>/getUpdates, скопироватьchat.idиз ответаVIMEO_ACCESS_TOKEN— Vimeo Developer → создать app → Personal Access Token со скоупамиupload,edit,private,video_files
Без переменных всё что до публикации (AsciiDoc-парсер, бенчмарки параллелизма) отработает и покажет вывод — это удобно для проверки сборки.
VTL/
publication/ — пайплайн публикации (текст, аудио)
content_platform/ — Telegram, Reddit, Vimeo
media_container/ — аудио, видео, субтитры, изображения
encoding/ — видеоэнкодер (FFmpeg H.264/H.265/AV1, опционально Vulkan)
user/ — история публикаций
utils/ — файлы, строки, шифрование, HTTP, БД
auth/ — ed25519 wrapper (keypair, sign/verify)
external_libs/ — pre-built бинари для Linux/macOS
linux/ — .so для Linux
macos/ — .dylib для macOS
external_sources/ — исходники для source-build (Windows)
parson/ — JSON-парсер (используется везде)
ed25519/ — orlp/ed25519 (vendored для VTL_auth)
curl/ — curl 8.x (Schannel TLS)
libpq/ — postgresql 18.3 (libpq client)
ffmpeg/ — FFmpeg 7.1 (ShiftMediaProject build)
zlib/ — zlib (для опциональных FFmpeg кодеков)
tools/ — NASM + VSNASM (для FFmpeg .asm)
cmake/
Dependencies-{Windows,MacOS}.cmake — диспетчер зависимостей по платформам
libpq/ — собственный CMakeLists.txt для libpq под MSVC
generated/ — pre-generated headers (kwlist_d.h, pg_config*.h, ...)
scripts/ — bat/ps1 для FFmpeg source build
msvc/ — артефакты FFmpeg-сборки (генерится локально, не в git)
| Ветка | Автор | Модуль |
|---|---|---|
| yarovitchuk | Яровитчук | Аудио (чтение, запись, перекодирование) |
| bulachev | Булачев | Enum-ы, исправления опечаток |
| lachugin | Лачугин | BBCode формат текста |
| ivannikov | Иванников | Telegram Bot API |
| ishatalov | Ишаталов | БД (PostgreSQL) |
| fedorov-subtitles-macOS | Федоров | Субтитры (SRT парсинг, наложение, конвертация, стили) |
| borisenkov-reddit | Борисенков | Reddit API, HTTP-клиент |
| zmaev-vimeo | Змаев | Vimeo (TUS upload, метаданные, приватность, плеер, обложки, главы) |
| polev-img-update | Полев | Обработка изображений (FFmpeg filter graph, PNG-энкодинг, параллельный batch) |
| pr-15-mediawiki | Прядченко | MediaWiki-парсер (inline-разметка, заголовки, ссылки, шаблоны, параллельная обработка) |
| shevtsov-sheduler | Шевцов | Scheduler публикаций (PostgreSQL очередь, metadata JSON, dispatcher TG/Reddit/VK) |
| text | Иванников | Текстовые форматы: HTML/Markdown/Telegram MD парсеры и сериализаторы (параллельные сканеры bold/italic/strike) |
| feat-user-user-history | Черникова | Администрирование истории пользователя (CRUD через PostgreSQL, encryptor, просмотр) |
| feature/envode | Мамонов | Видеоэнкодер (FFmpeg H.264/H.265/AV1, опциональный Vulkan) + аутентификация Ed25519 (keypair, sign/verify) |
Команда проекта VTL.