Конвертирует загруженное видео в выбранный формат, включая MP4, WebM, AVI, MOV, MKV и GIF. Цена - 0.15 ₽ за секунду видео.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Видео-конвертер пересохраняет ролик по ссылке в другой формат: MP4, WebM, AVI, MOV, MKV или анимированный GIF. Содержимое ролика не меняется: при переводе между видеоформатами сохраняются размер кадра, частота кадров и длительность, а меняется только контейнер и кодек, чтобы файл открылся там, где нужно.
Где это пригодится:
<video>;Один вызов - одно видео. Вызов создаёт асинхронную операцию: сначала вы получаете id, затем проверяете статус, пока не появится ссылка на готовый файл. Короткий ролик конвертируется примерно за 20-40 секунд.
POST /api/v1/operationsAuthorization: Bearer brth_...id операции и стартовый статус queued.Режим у нейросети один: исходное видео плюс нужный формат результата. Ниже показаны три типичных случая: MOV в MP4, MP4 в WebM и фрагмент в GIF.
{
"tool": "video-converter",
"input": {
"video": "https://cdn.example.com/source-video-1.mov",
"output_format": "mp4"
}
}
tool - slug нейросети, всегда "video-converter".input - параметры запуска. Поля передаются прямо внутри этого объекта, без дополнительной вложенности.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
video | string (url) | Да | Ссылка на исходное видео. Один файл, только внешний http/https URL с расширением .mp4, .mov или .webm. Длительность - от 1 секунды до 10 минут. |
output_format | enum | Да | Формат готового файла. Варианты: mp4 - MP4, самый совместимый вариант; webm - WebM для веба; avi - AVI для старых программ и плееров; mov - MOV для техники и программ Apple; mkv - MKV для хранения и медиаплееров; gif - анимированный GIF без звука. Если поле не передать, будет mp4. |
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "video-converter",
"input": {
"video": "https://cdn.example.com/source-video-1.mov",
"output_format": "mp4"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'video-converter',
input: {
video: 'https://cdn.example.com/source-video-1.mov',
output_format: 'mp4',
},
}),
})
const operation = await response.json()
console.log(operation.id, operation.status, operation.cost)
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'video-converter',
'input': {
'video': 'https://cdn.example.com/source-video-1.mov',
'output_format': 'mp4',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "video-converter",
"input": {
"video": "https://cdn.example.com/source-video-1.mp4",
"output_format": "webm"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'video-converter',
input: {
video: 'https://cdn.example.com/source-video-1.mp4',
output_format: 'webm',
},
}),
})
const operation = await response.json()
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'video-converter',
'input': {
'video': 'https://cdn.example.com/source-video-1.mp4',
'output_format': 'webm',
},
},
timeout=30,
)
print(response.json())
GIF подходит для роликов на несколько секунд: звук в нём не сохраняется, а файл получается заметно тяжелее MP4 той же длины. Если нужен кусок длинного видео, обрежьте его заранее.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "video-converter",
"input": {
"video": "https://cdn.example.com/short-clip-1.webm",
"output_format": "gif"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'video-converter',
input: {
video: 'https://cdn.example.com/short-clip-1.webm',
output_format: 'gif',
},
}),
})
const operation = await response.json()
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'video-converter',
'input': {
'video': 'https://cdn.example.com/short-clip-1.webm',
'output_format': 'gif',
},
},
timeout=30,
)
print(response.json())
Ответ на конвертацию 5-секундного ролика в WebM:
{
"id": "op_uuid-123",
"status": "queued",
"tool": "video-converter",
"cost": 0.75,
"balance_after": 499.25,
"created_at": "2026-09-30T19:48:37.783335+00:00"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "video-converter",
"cost": 0.75,
"created_at": "2026-09-30T19:48:37.783335+00:00",
"completed_at": "2026-09-30T19:48:59.673294+00:00",
"result": {
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/video-converter/result-1.webm"
]
},
"error_message": null
}
Пока операция выполняется, status будет queued или processing, а result - null. Если конвертация не удалась, придёт status: "failed" и текст причины в error_message.
Сохраните id из ответа на создание и запрашивайте операцию по нему:
GET /api/v1/operations/{id}
curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
Пример ожидания результата на JavaScript / TypeScript:
async function waitForVideo(id: string): Promise<string> {
while (true) {
const res = await fetch(`https://bratuha.ru/api/v1/operations/${id}`, {
headers: { Authorization: 'Bearer brth_ваш_ключ' },
})
const op = await res.json()
if (op.status === 'completed') return op.result.urls[0]
if (op.status === 'failed') throw new Error(op.error_message)
await new Promise((r) => setTimeout(r, 5000))
}
}
Статус одной операции можно запрашивать не чаще раза в секунду, иначе придёт 429. Для конвертера достаточно опроса раз в 5 секунд.
{
"type": "video",
"urls": [
"https://storage.bratuha.ru/results/video-converter/result-1.webm"
]
}
type - "video".urls - массив ровно из одной ссылки на готовый файл.Расширение в ссылке соответствует выбранному формату: .mp4, .webm, .avi, .mov, .mkv или .gif. При конвертации между видеоформатами размер кадра, частота кадров и длительность остаются как у исходника: ролик 864×496, 24 кадра/с и 5 секунд в WebM пришёл с теми же параметрами.
Цена зависит только от длительности исходного видео: 0,15 ₽ за секунду. Формат результата на цену не влияет, gif стоит столько же, сколько mp4.
Длительность сервер измеряет сам по файлу, передавать её не нужно. Неполная секунда округляется вверх: ролик длиной 12,5 секунды считается как 13 секунд.
| Длительность видео | Цена |
|---|---|
| 5 секунд | 0,75 ₽ |
| 30 секунд | 4,50 ₽ |
| 1 минута | 9 ₽ |
| 5 минут | 45 ₽ |
| 10 минут (максимум) | 90 ₽ |
Сумма списывается при создании операции, поле cost в ответе показывает её точно.
POST /api/v1/operations не идемпотентен: каждый повторный запрос создаёт новую операцию и списывает деньги ещё раз. Если ответ на POST потерялся, не отправляйте тот же запрос вслепую.queued, результат забирайте через GET /api/v1/operations/{id}.video принимаются только внешние http/https ссылки с расширением .mp4, .mov или .webm. Ссылки на localhost и внутренние адреса отклоняются с validation_error. Файл должен открываться без авторизации и весить не больше 128 МБ.400 validation_error, деньги не списываются. Длинную запись разрежьте на части и отправьте отдельными операциями.mp4 или webm.