本机占用
节点负载
任务构成
完成量
计算池
本控制台
导入素材
尚未设定本地资源池,请先到「本地资源池管理」新增。
本机目录或 NFS/CIFS 等已挂载路径,可配置多个并自定义名称与权限。
| 名称 | 权限 | 路径 | 说明 | 操作 |
|---|
为每个池设置可读 / 可写 / 读写;导入只用可读或读写,提交输出只用可写或读写。
| 名称 | 权限 | 类型 | 路径 / Bucket | Endpoint | 说明 | 操作 |
|---|
素材列表
| 类型 | 文件 | 修改时间 | 操作 |
|---|
没有符合筛选的素材。
节点
| 状态 | 名称 | 资源池 | 地址 / 转码地址 | 负载 | 可用核 | 任务 | 最近心跳 | 操作 |
|---|
没有符合筛选的节点。
任务回调
节点参数
任务列表
提交任务| 选 | 状态 | 压缩率 | 质量 | 时耗 | 模板 | 下载 | 操作 |
|---|
任务详情
视频模板
| 模板 | 帧率 | 音频 | 音频码率 | 采样率 | 视频码率 | 最小高度 | profile/level | 首片/递增 | 操作 |
|---|
图片模板
| 模板 | 输出格式 | 质量 | 无损 | 色度 | 缩放 | 对齐源编码 | 说明 | 操作 |
|---|
音频模板
| 模板 | 编码 | 码率 | 采样率 | 说明 | 操作 |
|---|
编辑模板
快速接入 接口文档
目标留空:自动写到源的同一目录,文件名加 -yyMMddHHmmss(提交时的年月日时分秒)。
接口文档
POST /api/jobs 提交视频或音频任务
立即返回 202,转码在后台继续。可以只写模板,也可以逐项写参数,两边一起写时,请求里出现的字段覆盖模板。模板名不区分大小写,必须是 GET /api/profiles 里的键,形如 libx264_1920。未知名字返回 400。
目标留空时,成品写到源的同一目录,文件名加 -yyMMddHHmmss(提交时的年月日时分秒)。/mnt/1.ts 得到 /mnt/1-261023143045.ts。显式填写 dest 时必须是绝对路径,且 source 也是本机路径。
请求字段
| 字段 | 类型 | 默认 | 取值 |
|---|---|---|---|
source | string | 必填 | 本机绝对路径,或 http(s):// / ftp://(只读,成品写本机),或 oss:// / s3:// / OSS·S3 HTTPS;配合 media_pool 时可只写对象键(如 dir/a.mp4)。 |
dest | string | 同目录 -yyMMddHHmmss | 本机绝对路径。OSS/S3 对象源不能另指定目标(写回源旁);HTTP/FTP 源可指定本机路径,默认写在暂存旁。 |
template | string | 空 | 视频模板名,如 libx264_1920、libx265_1280、libx264_source。空表示不按视频模板。安装包常见档位宽度为 640、800、1024、1280、1920;_source 表示不缩放。本机实际名单以 GET /api/profiles 为准。 |
audio_template | string | 空 | 音频模板名,如 aac_128、aac_192、mp3_192、copy。只填空着的 audio_format、audio_bit_rate、audio_sampling_rate。名单以 GET /api/audio-profiles 为准。未知名字返回 400。 |
media_pool | string | 空 | 云素材池名(见 GET /api/media-pools)。自动补全 bucket / Endpoint / AK / SK;相对键会拼成 oss://bucket/… 或 s3://…。请求里显式填写的凭证优先。 |
endpoint | string | 空 | 对象存储 Endpoint。未选素材池时,oss:// 和 s3:// 必填。本机路径忽略。 |
region | string | 空 | S3 区域,如 ap-southeast-1。OSS 留空。 |
access_key / secret_key | string | 空 | 对象存储 AK/SK,或 FTP/HTTP Basic 的用户名/密码。未选素材池时 OSS/S3 必填;HTTP/FTP 可选;选了池则可省略。 |
video_format | string | libx264 | ffmpeg 的 -c:v。常用 libx264、libx265、copy(不重编码,直接复制源视频流)。本机 ffmpeg 编进来的其它编码器也可以写,但要有同名模板,否则走默认模板。 |
audio_format | string | 模板值,否则 aac | aac、copy(不重编码,大小写不敏感,也可写 copy: 开头)、以及 ffmpeg 音频编码器名:libfdk_aac、libmp3lame、ac3、opus、pcm_s16le、mp2。 |
video_width | string | 空(不缩放) | 正整数像素,如 1280、1920。source、keep、native、original、auto、0、留空都表示不缩放,档位名用 <编码>_source。 |
video_height | string | 空 | 空或 auto:按源宽高比取偶数。正整数:强制该高度,比例不符时画面被拉伸。 |
video_frame_rate | string | 空 | 空:用模板的 fps。模板也空,或写成 source / keep / passthrough / source-keep / 0 / auto:保持源帧率。正数(25、29.97、50)强制该帧率。 |
video_bit_rate | string | 模板的视频码率 | 850k、8000k、1.2M,或 source / source:90%(跟随源视频码率)。k 是 kbps,M 是 Mbps。模板开了 CRF 时,这个值也常作码率上限的回落值。视频编码为 copy 时可忽略。 |
audio_bit_rate | string | 模板值,否则 128k | 88k、128k、192k,或 source / source:90%(跟随源音轨码率)。audio_format 为 copy 时不参与编码,但仍要占位。 |
audio_sampling_rate | string | 模板值,否则 44100 | 赫兹。常用 44100、48000、32000。copy 时不重采样。 |
profile | string | 模板值(仅 libx264 自动补) | H.264:baseline、main、high、high10、high422、high444。HEVC:main、main10、mainstillpicture。历史写法 8-4 会被忽略。只在切片路径生效,method 为 4 时不用。 |
level | string | 模板值(仅 libx264 自动补) | 3.0、3.1、4.0、4.1、4.2、5.1、5.2。参考包装脚本不把 level 传给 ffmpeg。 |
start_time | string | 空 | HH:MM:SS.xx,如 00:01:30.00。切片起点。method 为 4 时编码整段,不按此裁切。 |
duration_time | string | 空 | 同样是 HH:MM:SS.xx。空值在切片时用探测到的时长填充。直接出片不按此裁切。 |
ext | string | 目标扩展名,否则 mp4 | mp4、mov、mkv(封装名 matroska)、ts / m2t / m2ts / mts(封装名 mpegts)。 |
uuid | string | 自动 | 报表标识。没写 id 时也用作任务 ID;与已有任务重复时自动改名。 |
id | string | 自动 | 任务 ID。留空则用 uuid,再没有就自动生成。已存在返回 409。不能含空格、/、\、?、# 或 ..,最长 128 个字符。上传接口的 fields.id 同样有效。 |
title | string | 空 | 标题,最长 200 个字符。出现在任务列表里,可按它筛选。上传接口的 fields.title 同样有效。 |
priority | string | medium | high 高、medium 中、low 低。也可以写「高」「中」「低」。高优先级在同一个资源池里空出位置时先开始,不会打断已经在转码的任务,也不会和别的池抢位置。相同优先级按提交先后。上传接口的 fields.priority 同样有效。 |
efficiency | string | 系统配置 | ultra 超快、fast 快速、normal 正常。也可以写「超快」「快速」「正常」。本任务关联的效率档;各档核数在「系统配置 → 转码效率」的 web.efficiency_cores 里改(默认视频 8/4/2,音频与图片 4/2/1,例如超快可改成 10)。留空时用 web.efficiency_* 默认档。机器核数更少时自动封顶。上传接口的 fields.efficiency 同样有效。 |
pool | string | 配置 web.default_pool,再缺省 default | 只在这个资源池的节点里调度。留空用默认池。池满只让本池排队。上传接口的 fields.pool 同样有效。 |
callback | string | 配置 web.callback_url | 任务成功或失败后 POST 的地址,必须是 http:// 或 https://。留空用控制台配置;配置也空则不回调。请求里写了就覆盖配置,并在提交时定下来。取消和图片任务不回调。上传接口的 fields.callback 同样有效。 |
method | int | 3 | 见下表。 |
client | string | 配置 web.client,样本是 client | client 串行;parallel-client(或 parallel)并行。其它字符串按串行处理。 |
method
| 值 | 名称 | 行为 |
|---|---|---|
4 | direct | 直接出片。一次编码写成成品,不写分片,不写 m3u8。任务列表按一整段计数(整段 1/1),选并行也不会拆开。小于 32 MiB 的本机文件在控制台进程里直接编码,不进资源池。 |
2 或 0 | commit | 先切片,再合并成一个成品。0 与 2 相同。 |
1 | split | 切片并保留 m3u8,不合并成单文件。 |
缺省、3 或其它整数 | realtime | 实时切片。 |
结束回调
视频任务和音频任务进入 succeeded 或 failed 后,向回调地址发 POST,Content-Type 为 application/json。地址上会带上 ?id=<任务ID>,正文也有同一份 ID:
{"id":"job-1b94b4288d76","state":"succeeded"}
{"id":"job-1b94b4288d76","state":"failed","error":"原因"}
配置了 web.callback_secret 时,请求头带 X-Videopai-Secret。对方返回 2xx 才算送到;其它状态或连不上会再试两次。取消不回调。图片任务不回调。回调地址在提交时确定,之后改配置不影响已经提交的任务。
留空的帧率、码率、采样率、profile、level,在探测完源文件后用最终档位 <video_format>_<video_width> 补齐。改了编码或宽度,补齐用的档位也跟着变。CRF、preset、像素格式写在模板里,由转码进程读取,不是这个请求的字段。
请求
curl -s -X POST http://127.0.0.1:8080/api/jobs \
-H 'Content-Type: application/json' \
-d '{"source":"/mnt/a.mp4","template":"libx264_1920","method":4,"client":"client"}'
应答 202
{
"id": "job-1b94b4288d76",
"uuid": "job-1b94b4288d76",
"state": "queued",
"kind": "video",
"client": "client",
"method": "direct",
"source": "/mnt/a.mp4",
"dest": "/mnt/a-261023143045.mp4",
"video_format": "libx264",
"width": "1920",
"priority": "medium",
"percent": 0,
"elapsed_seconds": 0,
"segments": 0,
"total_segments": 1,
"servers": null,
"created": "2026-10-22T22:15:08+08:00"
}
请求
curl -s -X POST http://127.0.0.1:8080/api/jobs \
-H 'Content-Type: application/json' \
-d '{"source":"/mnt/a.mp4","dest":"/mnt/out/b.mp4","template":"libx264_1920","video_bit_rate":"4000k","audio_format":"copy","method":4}'
应答 202
{
"id": "job-9f3c1a20b8e4",
"uuid": "job-9f3c1a20b8e4",
"state": "queued",
"kind": "video",
"client": "client",
"method": "direct",
"source": "/mnt/a.mp4",
"dest": "/mnt/out/b.mp4",
"video_format": "libx264",
"audio_format": "copy",
"width": "1920",
"video_bit_rate": "4000k",
"percent": 0,
"elapsed_seconds": 0,
"segments": 0,
"total_segments": 1,
"servers": null,
"created": "2026-10-22T22:20:00+08:00"
}
查询、取消、重试、画质
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/jobs | 任务列表。state=running 只看正在执行的任务,每条带 id、state、percent、elapsed_seconds、title。id、title 是不区分大小写的子串;q 同时匹配 ID 和标题。?events=1 时每条带事件。未知 state 返回 400。 |
| GET | /api/jobs/{id} | 轮询用的短状态:id、title、priority、state、percent、elapsed_seconds、error、source、dest。运行时长从开始转码算起,结束后不再增加。 |
| GET | /api/jobs/{id}?detail=1 | 完整记录:分片、节点、source_info、quality、事件、提交时的编码和码率。 |
| POST | /api/jobs/{id}/cancel | 取消尚未结束的任务。成功 {"status":"canceled"}。已结束返回 409。 |
| POST | /api/jobs/{id}/retry | 用原参数重新提交。 |
| DELETE | /api/jobs/{id} | 从控制台记录里删除。不删除成品文件。 |
| POST | /api/jobs/{id}/quality | 对已成功的任务测量 VMAF / PSNR / SSIM。进行中的任务会被拒绝。 |
| GET | /api/jobs/{id}/compare | 源文件与输出文件的元数据对比,附带当前 VMAF / PSNR / SSIM 结果。控制台「对比」弹窗会左右预览源与成品(图片静图;视频同步播放与拖动)。 |
| POST | /api/quality/scan | 给所有已成功但还没有画质数字的任务排队。一次只测一条。 |
| GET | /api/jobs/{id}/files | 该任务目录下的成品、播放列表和分片。 |
| GET | /api/jobs/{id}/download | 下载成品(目标)文件。 |
| GET | /api/jobs/{id}/source | 下载源文件(仅本机绝对路径;对象存储地址不可用)。 |
| GET | /api/jobs/{id}/playlist | HLS 播放列表。分片地址已改写到本控制台。 |
| GET | /api/jobs/{id}/segments/{name} | 一个 HLS 分片。 |
| GET | /api/jobs/{id}/events | 该任务的 SSE。先回放历史,再推新事件。 |
| GET | /api/events | 全部任务的 SSE。 |
| GET | /api/status | 版本、调度模式、上传目录是否可用、本机负载。 |
state
queued 等待,running 转码中,succeeded 完成,failed 失败,canceled 已取消。失败原因在 error。源文件没有视频流时,视频任务会在探测阶段失败,例如 no video stream found。
请求
curl -s http://127.0.0.1:8080/api/jobs/job-1b94b4288d76
应答 200
{
"id": "job-1b94b4288d76",
"title": "晚间新闻",
"priority": "high",
"state": "running",
"percent": 40,
"elapsed_seconds": 125,
"source": "/mnt/a.mp4",
"dest": "/mnt/a-261023143045.mp4"
}
请求
curl -s 'http://127.0.0.1:8080/api/jobs?state=running&title=晚间'
应答 200
{
"jobs": [
{
"id": "job-1b94b4288d76",
"title": "晚间新闻",
"state": "running",
"kind": "video",
"client": "parallel-client",
"method": "commit",
"source": "/mnt/a.mp4",
"dest": "/mnt/a-261023143045.mp4",
"percent": 40,
"elapsed_seconds": 125,
"segments": 3,
"total_segments": 8,
"servers": ["10.0.0.5"]
}
]
}
请求
curl -s 'http://127.0.0.1:8080/api/jobs/job-1b94b4288d76?detail=1'
应答 200
{
"id": "job-1b94b4288d76",
"title": "晚间新闻",
"state": "succeeded",
"kind": "video",
"method": "commit",
"percent": 100,
"elapsed_seconds": 96,
"segments": 8,
"total_segments": 8,
"servers": ["10.0.0.5"],
"source_info": {"format": "mov,mp4,m4a,3gp,3g2,mj2", "Width": 1920, "Height": 1080, "Seconds": 600},
"events": [
{"time": "2026-10-22T22:15:10+08:00", "kind": "plan", "total_segments": 8},
{"time": "2026-10-22T22:16:40+08:00", "kind": "progress", "segments": 8, "total_segments": 8, "percent": 100}
]
}
上传视频
POST /api/jobs/upload
multipart/form-data。一个 file 部分,加上和 POST /api/jobs 相同的字段(表单里都是字符串)。服务端决定目标路径,调用方不传 dest。默认方法是切片后合并(method 为 2)。
| 字段 | 取值 |
|---|---|
file | 视频文件。必填。 |
template | 模板名。同时用来给成品文件命名。未知模板返回 400。 |
video_format / video_width | 与提交任务相同。都空着时,从 template 拆出编码和宽度;宽度仍空则为 source。 |
method | 1 切片 + m3u8,3 实时切片,2、4 或其它值:切片后合并。 |
client | client 或 parallel-client。 |
audio_format、video_height、video_frame_rate、video_bit_rate、audio_bit_rate、audio_sampling_rate、profile、level、start_time、duration_time、ext | 与 POST /api/jobs 相同。ext 默认 mp4。 |
分片上传
大文件先 POST /api/uploads/init,再按片 PUT,最后 POST .../complete 合并并提交任务。
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/uploads/init | JSON:name 文件名,size 字节数,chunk_size 每片字节(可省),fields 与上传表单相同的任务字段(值必须是字符串,不要传数字或对象)。返回 id、count、chunk_size。 |
| PUT | /api/uploads/{id}/chunks/{index} | 请求体是这一片的原始字节。index 从 0 起。可重传。 |
| GET | /api/uploads/{id} | 已收到哪些片、还缺哪些片。 |
| POST | /api/uploads/{id}/complete | 合并、落盘、提交任务。返回 202 和任务对象。 |
| DELETE | /api/uploads/{id} | 放弃这次上传并删除已收到的分片。 |
请求
curl -s -X POST http://127.0.0.1:8080/api/uploads/init \
-H 'Content-Type: application/json' \
-d '{"name":"短片.mp4","size":16777216,"chunk_size":8388608,"fields":{"template":"libx265_source","method":"2"}}'
应答 202
{
"id": "up-1b94b4288d76aabbccddeeff00112233",
"name": "短片.mp4",
"chunk_size": 8388608,
"count": 2
}
每一片 PUT 的应答是 {"received":0,"bytes":8388608}。查进度的应答:
{
"id": "up-1b94b4288d76aabbccddeeff00112233",
"name": "短片.mp4",
"size": 16777216,
"chunk_size": 8388608,
"count": 2,
"received": [0],
"missing": [1]
}
POST .../complete 在分片齐全时返回 202 和任务对象,与提交任务的应答相同。缺片时:
{"error":"1 of 2 chunks are still missing","missing":[1]}
图片
POST /api/images/sync 按路径同步转码
读完再返回,成功 200。适合单张图。
| 字段 | 类型 | 取值 |
|---|---|---|
source | string | 本机绝对路径,或 http(s):// / ftp://(只读),或 oss:// / s3:// / HTTPS 对象地址。 |
dest | string | 可省。本机源可填绝对路径,扩展名要和输出格式一致。对象源必须留空,结果写回源旁边的 <名>-yyMMddHHmmss.<扩展名>。 |
template | string | GET /api/image-profiles 里的名字,如 webp_q90、heic_q60、avif_q65。空表示按源格式重压缩、不缩放。未知名字返回 400。 |
endpoint / region / access_key / secret_key | string | 与视频任务相同。本机路径不用填。 |
id | string | 任务 ID。留空自动生成。已存在返回 409。规则与视频任务相同。 |
title | string | 标题,最长 200 个字符。出现在任务列表里,可按它筛选。 |
pool | string | 资源池。写进任务记录,可按池筛选。留空用默认池。图片本机同步完成,不进池内调度。 |
priority | string | high / medium / low。写进任务记录。留空为中。 |
efficiency | string | ultra / fast / normal(超快 / 快速 / 正常)。图片:4 / 2 / 1 核。留空为正常。 |
GET /api/image CDN 回源直出
本机绝对路径读图,响应体直接是压缩后的图片,不创建任务。支持 ETag、Cache-Control、If-None-Match(304)和 Range;重编码结果缓存在 <web.upload_dir>/image-live-cache/。参数:src(必填)、template、fmt、q、chroma、w、h、max、target_bytes、perceptual、lossless、keep_color_type。
curl -u admin:*** -o a.webp \ 'http://127.0.0.1:8080/api/image?src=/data/a.jpg&template=webp_q90&q=82&w=1600'
POST /api/images 上传一张图
multipart/form-data,同步返回。有 template 时以模板为准,下面的字段可覆盖模板里的同名项。
| 字段 | 取值 |
|---|---|
file | 图片文件。支持 JPEG、PNG、WebP、HEIC、AVIF、GIF。 |
template | 图片模板名。可空。 |
format | source(跟源)、jpeg、png、webp、heic、avif、gif。 |
quality | 0–100。0 或省略用 82。PNG 是无损,不使用质量。 |
chroma | 只对 JPEG。420、422、444。空表示跟源。 |
lossless | 1 / true / on 为真,其它为假。主要用于 WebP。 |
keep_color_type | 同上。为真时保持 PNG 原来的色彩类型和位深。 |
width / height | 非负整数像素。0 或不传表示该边不限制。只填一边时另一边等比;两边都填则放入框内不裁切、不放大。 |
max_long_side | 非负整数像素。0 不缩小。较长的一边超过该值时才缩小。可与 width/height 同时用。 |
id / title | 与同步接口相同。写进任务记录。重复的 id 返回 409。 |
pool / priority / efficiency | 与同步接口相同。写进任务记录;efficiency 控制编码器核数。 |
POST /api/images/batch 整目录
在本机目录上批量转码,返回 202 和一条批量任务。进度用任务查询接口看。
| 字段 | 取值 |
|---|---|
src_dir / out_dir | 本机绝对路径。必填。 |
template | 图片模板名。与 format 二选一的用法和单张相同。 |
format / quality | 与单张上传相同。quality 是整数。 |
jobs | 并发数。0 或省略时按 CPU 核数。 |
exclude | 要跳过的目录名。JSON 数组,或逗号分隔的字符串。 |
skip_existing | true 时已有产物不重做。 |
keep_color_type | true 时保持 PNG 色彩类型。 |
quality_report / quality_vmaf | true 时跑完再做画质报告。VMAF 更慢。 |
limit | 最多处理多少张。0 表示不限制。 |
manifest | 清单路径。空则写在输出目录。 |
dry_run | true 只统计数量,不转码。 |
id / title | 与同步接口相同。写在这条批量任务上。重复的 id 返回 409,预览不建任务。 |
pool / priority / efficiency | 与同步接口相同。写在这条批量任务上;efficiency 控制每张图的编码器核数。 |
GET /api/images/{name} 下载一次上传转码留下的结果文件。name 是返回里的文件名,不是任意路径。
请求
curl -s -X POST http://127.0.0.1:8080/api/images/sync \
-H 'Content-Type: application/json' \
-d '{"source":"/mnt/1.jpeg","template":"heic_q60"}'
应答 200
{
"job_id": "pic-1",
"source": "/mnt/1.jpeg",
"dest": "/mnt/1-261023143045.heic",
"src_bytes": 275086,
"dst_bytes": 91402,
"saving_percent": 66.77,
"quality": {
"vmaf": 95.12,
"psnr": 41.85,
"ssim": 0.9941,
"took_seconds": 0.42
}
}
quality 是转码后立刻对比源图与产物得到的画质,只含 vmaf / psnr / ssim / took_seconds。单帧 VMAF 需要本机 ffmpeg 带 libvmaf;没有该滤镜时可能只有 PSNR 和 SSIM。
请求
curl -s -u admin:*** -F file=@/mnt/1.jpeg -F template=webp_q90 \ http://127.0.0.1:8080/api/images
应答 200
{
"template": "webp_q90",
"format": "WebP",
"format_name": "webp",
"src_bytes": 275086,
"dst_bytes": 91402,
"saving_percent": 66.77,
"quality_used": 90,
"attempts": 1,
"kept_original": false,
"download": "/api/images/1-opt.webp"
}
请求
curl -s -X POST http://127.0.0.1:8080/api/images/batch \
-H 'Content-Type: application/json' \
-d '{"src_dir":"/data/图片库","out_dir":"/data/图片库/输出","template":"webp_q90","jobs":8}'
应答 202
{
"job_id": "job-b92b895a685c",
"state": "running",
"src_dir": "/data/图片库",
"out_dir": "/data/图片库/输出",
"template": "webp_q90",
"total": 120,
"workers": 8,
"manifest": "/data/图片库/输出/manifest.csv",
"status": "/api/jobs/job-b92b895a685c"
}
模板与配置
| 方法 | 路径 | 说明 |
|---|---|---|
| GET / PUT | /api/profiles | 视频模板。正文是 {"default_profile":{...},"profiles":{"libx264_1920":{...}}}。PUT 用整份文档替换;缺了的名字会被删掉。名字必须是 <编码>_<宽度>。 |
| POST | /api/profiles/broadcast | 写入广电档位(720 / 1280 / 1920 / 3840,25 或 50 帧,H.264 与 H.265)。{"overwrite":false} 保留已有同名模板,省略或 true 则覆盖。 |
| GET / PUT | /api/image-profiles | 图片模板。{"default":"webp_q90","profiles":{...}}。 |
| GET / PUT | /api/audio-profiles | 音频模板。{"default":"aac_128","profiles":{"aac_192":{"audio_format":"aac","audio_bitrate":"192k","audio_sample":"48000"}}}。PUT 用整份文档替换。 |
| GET / PUT | /api/config | 整份节点配置。PUT 会先备份再保存,保存后对新任务生效。 |
视频模板里的字段
| 字段 | 取值 |
|---|---|
fps | source 保持源帧率,或正数如 25、50。 |
audio_format | aac、copy、mp2,以及其它 ffmpeg 音频编码器名。 |
audio_bitrate / video_bitrate | 128k、8000k,或 source / source:90%(跟随源对应流码率)。 |
audio_sample | 48000、44100、32000。 |
profile / level | 与提交任务的 profile、level 相同。 |
crf | 有值时按恒定质量编码,video_bitrate 变成码率上限。空则按平均码率。 |
preset | ultrafast … veryslow。常用 medium、slow。 |
maxrate | 码率上限,或 source、source:90%(跟源码率的百分比)。 |
pix_fmt | 空表示跟源。HEVC 10 比特用 yuv420p10le。 |
mini_height | 探测不到源高度时的兜底高度。不缩放模板用 0。 |
first_frame_time / numerator / denominator | 切片长度。首段秒数,之后每段乘以分子再除以分母。 |
图片模板里的字段
| 字段 | 取值 |
|---|---|
format | source、jpeg、png、webp、heic、avif、gif。 |
quality | 0–100。 |
lossless | true / false。 |
chroma | 420、422、444,或空。 |
width / height | 目标宽/高(像素)。0 不限制该边;等比缩小,两边都填则适应框。 |
max_long_side | 长边上限(像素)。0 不按长边限制。 |
keep_color_type | true 时保持 PNG 色彩类型。 |
description | 给操作员看的一句话,不参与编码。 |
音频模板里的字段
| 字段 | 取值 |
|---|---|
audio_format | 必填。aac、mp3、mp2、ac3、opus、flac、copy。也可以写 libfdk_aac、libmp3lame、pcm_s16le。 |
audio_bitrate | 96k、128k、192k、256k。空则稍后由视频档位补。copy 不使用这个值。 |
audio_sample | 赫兹。48000、44100、32000、22050、16000。空则沿用视频档位。 |
description | 给操作员看的一句话,不参与编码。 |
资源管理
资源管理页可在「本地导入」上传文件,或在「云资源池导入」里粘贴地址/选用输入池;池本身在「云资源池配置」里维护。HTTP/FTP 只读输入,成品写本机或不经输出池回写远端;OSS/S3 可写回对象旁。视频和音频提交走 POST /api/jobs,图片走 POST /api/images/sync:本机成品文件名加 -yyMMddHHmmss。
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/media/browse | 列出本机某个目录下的子目录,供页面点选。?dir=/data;省略时用 web.media_dir,再没有则从文件系统根开始。返回 dir / parent / dirs。 |
| POST | /api/media/scan | JSON:{"dir":"/data/media"}。dir 可省略:省略时用配置 web.media_dir。必须是已存在的绝对路径。递归列出视频、音频和图片,跳过点号开头的子目录。最多 2000 个,超出时 truncated 为 true。kind 为 video、audio 或 image。 |
| POST | /api/media/upload | multipart/form-data。dir 是保存目录(绝对路径,不存在则创建);省略或空时用 web.media_dir。file 是一个视频、音频或图片文件。同名会自动改名。其它类型返回 400。 |
| POST | /api/media/probe | JSON:source(本机路径、http(s)/ftp、oss/s3,或相对对象键),可选 media_pool;OSS/S3 可带 endpoint / AK/SK;HTTP/FTP 的 AK/SK 当作 Basic 用户名/密码。返回 kind、remote、summary 与 info。 |
| POST | /api/media/stage | 把远程/对象地址暂存到本机,供预览。字段同 probe。返回本地 path;同一地址会复用缓存。 |
| GET | /api/media-pools | 列出已配置的云素材池(不返回 secret_key,只给 has_secret)。 |
| PUT | /api/media-pools | 整表保存云素材池:{"pools":{"prod":{"provider":"oss","endpoint":"…","bucket":"…","access_key":"…","secret_key":"…","prefix":"raw/"}}}。已有池的 secret_key 留空表示保留原值。 |
计算池
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/pool | 本机身份、各节点在线状态、核数、负载、正在跑的任务数。 |
| GET | /api/pool/hosts | 纯文本,每行一个地址。给部署脚本用。?all=1 包含已离线的节点。 |
| POST | /api/pool/peers | JSON:address(10.0.0.5 或 10.0.0.5:6611),force 为 true 时允许加回曾经删除的节点。pool 可选,加入后把该节点划进这个池;留空则沿用节点自己的池。 |
| DELETE | /api/pool/peers/{address} | 从资源池删除该地址。地址里的冒号要按 URL 编码。本机节点不能删除。 |
| POST | /api/pools/assign | 把一台节点划进指定池。JSON:address(节点的成员地址),pool(池名,空或 default 表示默认池)。节点会改自己的 cluster.pool 并通知其它节点。 |
| POST | /api/pool/peers/{address}/accepting | 开启或关闭节点。JSON:{"accepting": false} 关闭后不再接新任务,已经在转的会做完;true 重新开启。地址里的冒号要按 URL 编码。 |
| GET | /metrics | Prometheus 文本。web.metrics 为 false 时返回 404。 |